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

 
SeriousRacoon:
E tente desativar a lógica atual e substituí-la por um mago comum. Você verá imediatamente onde o gato deu errado, na lógica ou na execução.

bom conselho.... Não devemos chegar ao ponto em que pensamos que a otimização não é nada além de instâncias separadas de execuções únicas, pelo menos, é isso que os usuários gostariam e o que os desenvolvedores queriam.

Isto significa que não importa quão complexo seja o algoritmo do Expert Advisor, o resultado de uma única execução deve ser idêntico ao obtido em um grupo de execuções durante a otimização.

Eu imprimiria (como Renat aconselha) após a conclusão de cada execução durante a otimização o histórico de negócios em um arquivo contendo parâmetros (para facilitar a busca entre uma pilha de arquivos criados) e faria o mesmo para uma única execução, desta forma será possível descobrir onde os resultados diferem após a otimização e uma única execução. parece ser a única maneira de se chegar à verdade.

No entanto, estou muito curioso sobre o que, que nuance, pode causar resultados diferentes na otimização e execução única, porque a lógica sugere que isto é impossível em princípio, desde que uma única execução seja idêntica à da execução em lote de otimização.

 
Алексей Тарабанов:

"quase todos os dados são inicializados em um loop".

Pessoal, não se pode rubricar em loop. Você tem que ler no laço.

Mostrei-lhe em que casos não só é possível, mas necessário e não há outra maneira.

 

@Andrey Dik, estou me perguntando exatamente como aparafusar a impressão ao(s) arquivo(s). Parece que o arquivo deve ser escrito à medida que você for avançando. E o que exatamente deve ser escrito ali? Os preços não são informativos. Você precisa escrever algumas informações que o ajudarão a entender a razão da discrepância. Que tipo de informação? Onde podemos encontrá-lo? Ainda não tenho a menor idéia.

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

@Andrey Dik, estou me perguntando exatamente como aparafusar a impressão ao(s) arquivo(s). Parece que o arquivo deve ser escrito à medida que você for avançando. E o que exatamente deve ser escrito ali? Os preços não são informativos. Você precisa escrever algumas informações que o ajudarão a entender a razão da discrepância. Que tipo de informação? Onde podemos encontrá-lo? Ainda não tenho nenhuma idéia.

Na função OnTester(), crie um arquivo chamado InputName1 + "_" + InputName2 + "_" + InputName3 + "_" + InputName4 + "_" +.... e registrar o histórico de todos os negócios (não as posições) nele contidos, todas as informações necessárias para análise, tempo, preço, etc. serão registradas. Você também pode escrever neste arquivo outra coisa muito interessante para uma determinada EA, que pode ser útil para a busca de inconsistências entre o otimizador e uma única execução.

Não esqueça de verificar MQLInfoInteger (MQL_OPTIMIZATION); para adicionar postfix no nome do arquivo em execução única, para não sobrescrever o mesmo arquivo após a otimização.


SZY. Se você conseguir dois arquivos com conteúdos diferentes, não será suficiente para os desenvolvedores, mas apenas lhe dará uma direção onde cavar mais, você precisará trazer um código de problema reproduzível. esperemos que o problema esteja no código EA.

 
Andrey Dik:

Na função OnTester() crie um arquivo chamado InputName1 + "_" + InputName2 + "_" + InputName3 + "_" + InputName4 + "_" +.... e registrar o histórico de todos os negócios (não as posições) nele contidos, todas as informações necessárias para análise, tempo, preço, etc. serão registradas. Você também pode escrever neste arquivo outra coisa muito interessante para uma determinada EA, que pode ser útil para a busca de inconsistências entre o otimizador e uma única execução.

Não esqueça de verificar MQLInfoInteger (MQL_OPTIMIZATION); para adicionar postfix no nome do arquivo em execução única, para não sobrescrever o mesmo arquivo após a otimização.


SZY. Se você conseguir dois arquivos com conteúdos diferentes, não será suficiente para os desenvolvedores, mas apenas lhe dará uma direção onde cavar mais, você precisará trazer o código do problema reproduzível. esperemos que o problema esteja no código da EA.

Obrigado. Será feito.

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

Obrigado. Estarei fazendo isso.


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

Obrigado. Será feito.

Verificar inicialização de variáveis declaradas globalmente.

Se a inicialização não estiver no OnInit() mas na declaração e se seus valores forem alterados no código.

 
Andrey F. Zelinsky:

Verificar inicialização de variáveis declaradas globalmente.

Se a inicialização não estiver no OnInit(), mas na declaração e se seus valores forem alterados no código.

se as variáveis são inicializadas ou não, mas os resultados devem coincidir em ambos os modos de teste (otimização e execução única)

 
Andrey Dik:

bom conselho.... Não devemos chegar ao ponto em que pensamos que a otimização nada mais é do que instâncias separadas de execuções únicas, pelo menos é isso que os usuários gostariam e o que os desenvolvedores queriam.

Isto significa que não importa quão complexo seja o algoritmo do Expert Advisor, o resultado de uma única execução deve ser idêntico ao obtido em um grupo de execuções durante a otimização.

Eu imprimiria (como Renat aconselha) após a conclusão de cada execução durante a otimização o histórico de negócios em um arquivo contendo parâmetros (para facilitar a busca entre pilhas de arquivos criados) e faria o mesmo durante uma única execução, assim seria possível descobrir a diferença de resultados após a otimização e uma única execução.

No entanto, estou muito curioso sobre o que, que nuance, pode causar resultados diferentes na otimização e execução única, porque a lógica sugere que isto é impossível em princípio, desde que uma única execução seja idêntica à da execução em lote de otimização.

Em geral, estou de acordo com você. Se a coruja realmente não faz filiais dependendo do ambiente (quer esteja funcionando no otimizador ou no testador), então a única coisa que podemos assumir é que no modo de otimização algumas chamadas de api no testador são otimizadas demais para a velocidade, perdoe a tautologia. Talvez dependa das bandeiras nas funções utilizadas. Um registro detalhado das transações e dos resultados de execução ajudaria, sim.

Ainda não me deparei com isso pessoalmente.

 
Andrey Dik:

se as variáveis são inicializadas ou não, mas os resultados devem coincidir em ambos os modos de teste (otimização e execução única)

declarar uma variável globalmente e inicializá-la ao declarar, por exemplo, int kk=0;

então, em OnTick(), desimprima e altere o valor, por exemplo Print("kk=",kk); ++kkk;

em seguida, mudar TF ou parâmetros - e ver o resultado.