[Arquivo!] Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por ela. Não poderia ir a lugar algum sem você - 2. - página 159

 
BooGUY:

todem, eu tentei se (d1!=0)

mas a EA ainda abre em um lugar errado. Em geral, ela deve mudar Comprar para Vender, mas às vezes abre duas vezes para Vender. Talvez eu não tenha copiado nada.


você não acha que é um pouco tarde?
 
DhP:

O número de passes pode ser reduzido:

1. Aumentar o passo.

2. Reduzir a faixa de otimização dos parâmetros.

3. Reduzir o número de parâmetros a serem otimizados.

4. Habilitar "Algoritmo genético".


Aqui está mais sobre o Algoritmo Genético (....., se você puder))))

 

Pessoal, que tal o consultor.... Sei que não há limite para o quão bom um consultor pode ser, mas em sua opinião qual é a rentabilidade de um consultor (retorno anual) ??????

Mais de um ano.... Eu recebi o seguinte:

Máximo de drawdown: 8,69% (3768$)

Lucro: $27464,5 um pouco mais de 100 por cento

Total de comércios: 142

Eu negociei um lote fixo: 1 lote

Minha primeira EA...graças a todos que ajudaram)

 

digamos que tenho um Expert Advisor (My_expert) e um indicador (My_indicator)

Expert Advisor utiliza dados indicadores (atualmente via iCustom)

Posso fazer o Expert Advisor adicionar o indicador ao gráfico durante a inicialização e excluí-lo durante a desinicialização?

 

Estou tentando escrever um consultor especializado que fecharia o pedido no dia seguinte (em qualquer caso). Mas o pedido não está fechado por alguma razão (por favor, informe por quê?

Abaixo está o código para venda:


se (OrderTotal()==0) {

OPENORDER ("Sell");
}
int TC = int TimeCurrent();
int OM = int OrderMagicNumber();

if (OrderTotal()==1 && OrderType()==OP_SELL && TC-OM>86400){ // DayMove(3)<0 && DayMove(2)<0 && DayMove(3)<0 && DayMove(4)<0 && DayMove(5)>0
CLOSEORDER("Sell");
}

Esta é a função de ordem aberta/fechada:

void CLOSEORDER(string ord)
{
para (int i=0; i<OrdersTotal(); i++)
{
se (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==verdadeiro)
{
se (OrderSymbol()!=Symbol()||Magic!=OrderMagicNumber()) continuar;
se (OrderType()==OP_BUY && ord==="Buy")
OrderClose(OrderTicket(),OrderLots(),Bid,3,CLR_NONE);
se (OrderType()==OP_SELL && ord==="Sell")
OrderClose(OrderTicket(),OrderLots(),Ask,3,CLR_NONE);
}
}
}
//--------------------------------------------------------------------


OPENORDER(string ord) vazio
{
erro int;
//Magic=TimeDay(CurTime();
Magia = TimeCurrent();
if (ord==="Buy" ) error=OrderSend(Symbol(),OP_BUY, LOT,Ask,2,SL,TP, "EMA WMA RSI",Magic,3);
if (ord==="Sell") error=OrderSend(Symbol(),OP_SELL,LOT,Bid,2,SL,TP, "EMA WMA RSI",Magic,3);
if (error==-1) ShowERROR(error,0,0);
retornar;
}

 
Vovo4ka:

Pessoal, que tal o consultor.... Sei que não há limite para o quão bom um consultor pode ser, mas em sua opinião qual é a rentabilidade de um consultor (retorno anual) ??????

Mais de um ano.... Eu recebi o seguinte:

Máximo de drawdown: 8,69% (3768$)

Lucro: $27464,5 um pouco mais de 100 por cento

Total de comércios: 142

Eu negociei um lote fixo: 1 lote

Minha primeira EA...graças a todos que ajudaram)

Se é um gráfico em uma área otimizada, não há nada a dizer sobre seu desempenho futuro. Se for um gráfico em uma área não otimizada, então há esperança de que seja lucrativo. E a verdade será revelada quando se trabalhar com a conta real.
 
ILL:

...
int OM = int OrderMagicNumber();
...


A ordem deve ser pré-selecionada com OrderSelect(), este não é o caso aqui.
 
ilunga:

A ordem deve ser pré-selecionada usando OrderSelect(), este não é o caso no que você deu.


Viva!!! Funcionou=)

Muito obrigado.

 
todem:

Vamos fazer isso juntos. Eu tenho um indicador falso mostrando a direção atual - você precisa dele?


Sem problemas - vamos fazer isso juntos. Todos os desenvolvimentos estão indicados nos links anteriores... Não se trata apenas de verificar em loop. Procurando opções para escrever em cada verdade uma matriz - mas ainda não lidou com matrizes.

//+-------------------------------------------------------------------------------+
// Проверка смены тренда 
bool TrendChange(int Period_MAb, int Period_MAm, int nB)
{
  double maB1=iMA(NULL, 0, Period_MAb, 0, MODE_EMA, PRICE_WEIGHTED, 1);
  double maM1=iMA(NULL, 0, Period_MAm, 0, MODE_EMA, PRICE_WEIGHTED, 1);   
  for (int i=0; i<nB; i++) 
  {
    double maB=iMA(NULL,0, Period_MAb, 0, MODE_EMA, PRICE_WEIGHTED, i);
    double maM=iMA(NULL,0, Period_MAm, 0, MODE_EMA, PRICE_WEIGHTED, i); 
     if ((maM<maB && maM1>maB1)||(maM>maB && maM1<maB1)){
//     Alert("TrendChange-true");
     return(true);
     }
  }
  return(false);   
}

Então - esta função funciona! Quem pode precisar!

MAS! a questão é sobre economia de recursos - como minha máquina não é a mais forte, e esta função é freqüentemente verificada. Assim, acontece que cada tique que temos que recalcular um monte de barras antigas (por exemplo, no meu caso nB=610 ). A única maneira de resolver este problema é escrever uma bandeira em uma matriz e depois verificar toda a matriz e a última barra em busca da verdade. Alguém tem outras variantes? Alguma sugestão?

 
ILL:


Viva!!! Funcionou=)

Muito obrigado.

De nada))

Quem me responderia agora))

Razão: