Mas o que está acontecendo? - página 2

 

Eu tenho um truque diferente. O assessor coloca uma venda na abertura de cada hora. Para o euro funciona corretamente, mas para o símbolo personalizado não está claro como

No modo visual faltam alguns candelabros


Arquivos anexados:
MySymbol.mq5  4 kb
Test.mq5  2 kb
 
Сергей Таболин:

Trata-se mais uma vez do testador/optimizador...

Discrepâncias notadas nos resultados da otimização e do teste único. Terminal reinicializado, ajustes alterados (só para ter certeza). Iniciada a otimização.

Fiz um único teste...

Como poderia ser? De onde vem este absurdo?

Foi da mesma forma. Entre os passes de otimização, as variáveis nem sempre foram ou nem todas inicializadas como eram antes de um único passe. Comecei a inicializar tudo e o problema foi embora.

Em outra ocasião tive um problema semelhante por causa do iSAR, em passos mínimos.

 

Um cliente tinha um problema. Seu consultor especializado estava testando e dando resultados no testador, mas no otimizador todas as execuções eram nulas.

O algoritmo de seu consultor especializado em termos de abertura de negócios foi baseado na leitura da legenda do botão que mudou dependendo da situação. Como os objetos gráficos não são renderizados durante a otimização, esta solicitação sempre resultou em um resultado negativo.

Se o algoritmo de seu Expert Advisor utiliza dados de objetos gráficos, também pode haver diferenças significativas entre o teste e a otimização.

 
Сергей Таболин:


Como assim? Ambos são a mesma coisa. Como pode haver uma diferença? Especialmente porque quase todos os dados são inicializados em um loop. E se algo não for inicializado ali, você receberá um erro.


Se você puder - elaborar. Eu gostaria de ver a inicialização no loop. Vou mostrá-lo à minha neta.

 
Para nunca mais fazer isso.
 
Алексей Тарабанов:

Se possível, mais detalhes. Eu gostaria de ver a inicialização no loop. Vou mostrá-lo à minha neta.

int sum = 0;

for ()

  sum = 0;

  for ()

    sum += ....

Ou melhor ainda, sua neta não vai entender o significado:

int sum;

for ()

  sum = 0;

  for ()

    sum += ....
 
Andrey Barinov:
Você só precisa esquecer de inicializar algo em seu código e haverá uma diferença. Verifique o código.

Verificamos tudo novamente - todas as variáveis são inicializadas.

@Andrey Kaunov, obrigado, mas eu não uso nenhum objeto gráfico.

Alexei Tarabanov:

Se você puder - elaborar. Eu gostaria de ver a inicialização no loop. Vou mostrá-lo à minha neta.

Pelo amor de Deus )))) Exagerei um pouco - não todos, é claro, mas apenas os manípulos indicadores ))))

int      ind_handle[];

int OnInit()
{
...........
   if(!nc_getHandles()) return(INIT_FAILED);
...........
}
//+------------------------------------------------------------------+
bool  nc_getHandles(void)
{
   ind_nums = ArraySize(indicators);
   ArrayResize(ind_handle, ind_nums);

   for(int i = 0; i < ind_nums; i++)
   {
      ind_handle[i]  = iCustom(Symbol(), Period(), folder+indicators[i]);
      if(ind_handle[i] == INVALID_HANDLE)
      {
         Print("Ошибка получения хандла индикатора >>> "+indicators[i]);
         writeErrorFile(program_name,program_version,"Ошибка получения хандла индикатора >>> "+indicators[i]);
         return(false);
      }
   }
   Print("Получены хэндлы всех индикаторов >> ",ArraySize(indicators));
//-----------------------------------
   return(true);
}
 

Agora vamos ao que interessa.

Limpar completamente todos os troncos e caches.

Iniciou o editor, recompilou o Expert Advisor.

Abriu o terminal.

Iniciou a otimização genética.

Esperando...


Executando um único teste.

Eu verifico se os parâmetros estão corretos - eles são passados corretamente.

Abro a aba Backtest.

Lucros - 697 / 247

Ofícios - 44 / 56.

Agora vou reunir os troncos e anexá-los.

Arquivos anexados:
mt5logs.zip  288 kb
 

Analise o código e tente descobrir o que acontece com as transações dentro da otimização e com uma única passagem.

Desimprima-o, coloque-o você mesmo em um arquivo.

É sobre a lógica dentro do seu programa. O que ninguém além de você pode ver e, portanto, nenhuma ajuda estará disponível.

 
Renat Fatkhullin:

Analise o código e tente descobrir o que acontece com as transações dentro da otimização e com uma única passagem.

Desimprima-o, coloque-o você mesmo em um arquivo.

É sobre a lógica dentro do seu programa. Que ninguém além de você pode ver e, portanto, não haverá ajuda.

Renat, obrigado. Mas me explique, quem não sabe a diferença entre 2*2+2*3 no otimizador e no passe único? Ao menos me dê uma dica onde exatamente pode haver uma discrepância?

E, já que você mencionou isso, dê-me uma dica onde e como encontrar diferenças entre a EA no Testador de Estratégia e em uma conta real?

Eu, talvez por minha própria estupidez, sempre acreditei que o código escrito (tenha ou não erros, seja otimizado ou não), é compilado e, portanto, deve funcionar igualmente, seja no otimizador, seja no testador ou em uma conta real...

Bem, simplesmente tome a posição de um programador comum - onde, como e por que meios se deve procurar qualquer diferença pouco clara na execução de um código (compilado) nestes três estados?

Eu, como usuário, vejo apenas que um executável não funciona da mesma forma em otimizador e testador, o que significa que na vida real funcionará da mesma forma .....


Ocorreu-me uma ideia, e se você estiver testando um EA e ele... Bem, não é bom. E se eu o usar para comércio real? E se for o Santo Graal? ))))