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

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

Se você fizer várias otimizações, com os mesmos parâmetros da EA, os resultados de diferentes otimizações coincidem? se coincidirem, então o problema está na diferença entre o otimizador e o passe único. se não coincidirem - então o problema está definitivamente no código da EA.

 

Deixe-me explicar - a escrita da moda aqui no :

if (condition) {

} else if (!condition) {

}

supostamente aumentando a legibilidade e compreensão do código, é na verdade um mal

e além disso você tem que trabalhar muito, muito cuidadosamente com o dobro

 
Andrey Dik:

Você acha que uma variável EA global retém seu valor das execuções anteriores do otimizador e é transportada para as próximas?

Sim, é mais ou menos isso. Eu estava tentando fazer isso.

Somente não era apenas uma variável global, mas um membro da classe estática ou uma variável terminal ou algo mais.


Além disso, um único teste imediatamente após o lançamento do terminal e um teste repetido no mesmo agente pode ser diferente. Pela mesma razão.

Em resumo, você precisa inicializar tudo e manter um olhar escrupuloso sobre o assunto.


ps: não, isso me faz lembrar. Eu estava bem com a inicialização, foi uma das construções que inicializaram a estática de forma defeituosa. Conserte-o prontamente.

 
Andrey Dik:

qualquer transferência do conteúdo das variáveis EA de uma execução para outra deve ser considerada como um bug do testador, mesmo que se trate de variáveis globais do terminal.

Se houver várias cópias de uma EA rodando em gráficos em tempo real, o usuário usa um mago ou outras formas de identificação, e o processo de otimização implica múltiplas e independentes umas das outras execuções de uma EA com o mesmo mago, se não for assim, então não só está errado do ponto de vista ideológico da otimização, mas abre a possibilidade de influenciar a otimização e abusar dos produtos do mercado, enganando o comprador.

Mas à espera do relatório da TC sobre negócios não podados, intriga.

Não é criado para um santo ladrão.

A questão, como sempre, é simples - a EA não é descarregada para otimizar mais rapidamente. Os arquivos EX podem ser grandes.

 

Só hoje eu tive tempo de resolver o problema. Decidi começar pequeno. Uma coisa de cada vez. Incluindo a verificação dos arquivos abertos. O código é o seguinte:

      int      h     = FileOpen(filename, FILE_BIN|FILE_READ|FILE_COMMON);
      if(h == INVALID_HANDLE)
      {
         Print("Ошибка открытия файла обученной сети по индикатору >>> ",name);
         writeErrorFile(program_name,program_version,"======= "+IntegerToString(bars_count-1)+" === Ошибка открытия файла обученной сети по индикатору >>> "+name);
         writeOptTestFile(file_Opt_Tst,"======= "+IntegerToString(bars_count-1)+" === Ошибка открытия файла обученной сети по индикатору >>> "+name+"\n");
         FileClose(h);
         return(TRADESIGNAL_NO);
      }

Fiz a otimização e depois um único teste. Como resultado, recebi dois arquivos:

1_100_100_300_300_.opt
1_100_100_300_300_.tst

Eu abri estes dois arquivos no programa WinMerge. E isto foi o que eu vi lá

Há um problema com a abertura de arquivos no otimizador. Note que não existe tal erro no testador!

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

Há um problema com os arquivos de abertura mais otimizados. Note que não existe tal erro no testador!

Vários núcleos abrem o arquivo ao mesmo tempo. Uma se abre, o resto se estraga.
Precisa de código de espera, ou pelo menos a bandeira FILE_SHARE_READ

 

Se você:

  • estão acessando o mesmo arquivo de um EA na área comum
  • obter erros de acesso
  • não proteger contra o acesso compartilhado por múltiplos processos paralelos, não tentar repetir com um timeout
Então, é claro que você terá a diferença no otimizador e no passe único. Este é um erro lógico.
 
Andrey Khatimlianskii:

Vários núcleos abrem o arquivo ao mesmo tempo. Um abre, os outros são aparafusados.
Preciso de código de espera, ou pelo menos a bandeira FILE_SHARE_READ

Bem, eu não escrevi o código especificamente para o otimizador. Esperava-se que o otimizador já estivesse ciente de tais nuances. Vou tentar acrescentar uma bandeira, isso não vai piorar as coisas. )))

Renat Fatkhullin:

Se você:

  • você está acessando o mesmo arquivo na zona de comon de um Expert Advisor
  • obter erros de acesso
  • não protejam do acesso compartilhado por múltiplos processos paralelos, não tentem repetir com um timeout.
Então, é claro que você terá a diferença no otimizador e no passe único. Este é um erro lógico.

  1. Estou incluindo a zona de compromisso somente para a conveniência de encontrar arquivos.
  2. ....
  3. Eu não tenho nenhum acesso compartilhado. Estes arquivos são acessados apenas por uma EA.
 

Como ainda não há código, as condições de teste não são descritas de forma alguma, e você está fazendo afirmações claramente errôneas, então lide você mesmo com isso.

Se você não pode sequer abrir arquivos, isso significa que há muitos problemas no Expert Advisor.

Você até escondeu os nomes desses arquivos.

 
Renat Fatkhullin:

Como ainda não há código, as condições de teste não são descritas de forma alguma, e você está fazendo afirmações claramente errôneas, então lide você mesmo com isso.

Se você não pode sequer abrir arquivos, isso significa que há muitos problemas no Expert Advisor.

Você até escondeu estes nomes de arquivos.

Não há código porque a adição do balão realmente resolveu o problema. Agora os resultados da otimização e as execuções únicas são totalmente consistentes.

É que eu raramente usava arquivos em EAs antes (pelo menos toda a escrita/leitura durante a otimização/teste estava desativada), mas achei que o otimizador resolvia a questão do acesso a partir de um único EA.