Bibliotecas: MultiTester - página 41

 
Dormir por 10 segundos também não ajuda. Somente a limpeza dessa pasta resolve o problema.
 
klycko Dormir por 10 segundos também não ajuda. Somente a limpeza dessa pasta resolve o problema.

Publique o código para otimizar o MQL5\Experts\Examples\MACD\MACD Sample.mq5. Depois, você pode tentar reproduzir o problema. Quase não há trabalho construtivo agora.

 
fxsaber #:

Carregue o código para otimizar o MQL5\Experts\Examples\MACD\MACD Sample.mq5. Em seguida, você pode tentar reproduzi-lo. Quase não há trabalho construtivo agora.

Obrigado! Tentarei preparar os arquivos e publicá-los. No momento, tudo ainda está em um estado desorganizado.

 
fxsaber #:

Carregue o código para otimizar o MQL5\Experts\Examples\MACD\MACD Sample.mq5. Em seguida, você pode tentar reproduzi-lo. Não há quase nenhum trabalho construtivo agora.

Boa tarde!

Preparei os arquivos e os anexei.

Otimização de 25.03 a 20.05.2024 no período de tempo M1.

Depósito 17000. Alavancagem 40. Máximo do critério complexo.


Primeiro, para a pureza do experimento, precisamos limpar a pasta "C:\Users\ASUS\AppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075\Tester\cache".

O script do Nocturne deve ser executado com um parâmetro de cada vez para otimizá-lo.

Em seguida, ele gera a saída:

No primeiro parâmetro: ProfitNow -1478 ParamMax 0,37 pela primeira vez.

Para o segundo parâmetro: ProfitNow -379 ParamMax 30 pela primeira vez.

Para o terceiro parâmetro: ProfitNow -379 ParamMax 6 pela primeira vez.


Para o terceiro parâmetro: ProfitNow -379 ParamMax 6 repetidamente

Para o terceiro parâmetro: ProfitNow -379 ParamMax 6 repetidamente

Para o terceiro parâmetro: ProfitNow -379 ParamMax 6 repetidamente.


Isso mostra o travamento do cache de dados no terceiro parâmetro.


E agora precisamos limpar a pasta "C:\Users\ASUS\AppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075\Tester\cache" novamente

E então é uma repetição:


No primeiro parâmetro: ProfitNow -1478 ParamMax 0.37 pela primeira vez.

Para o segundo parâmetro: ProfitNow -379 ParamMax 30 pela primeira vez.

Para o terceiro parâmetro: ProfitNow -379 ParamMax 6 pela primeira vez.


Para o terceiro parâmetro: ProfitNow -379 ParamMax 6 repetidamente

Para o terceiro parâmetro: ProfitNow -379 ParamMax 6 repetidamente

Para o terceiro parâmetro: ProfitNow -379 ParamMax 6 repetidamente


As linhas 151-154 do script Nocturne dizem tudo como você me instruiu:

Run(Odinar);

int GLOC = MTTESTER::GetLastOptCache(Bytes); // Obtém o arquivo opt em uma matriz de bytes Bytes

TESTERCACHE<ExpTradeSummary> Cache;

bool CL = Cache.Load(Bytes); // Alimentar o array de bytes Bytes no Cache


O erro está, obviamente, no código que escrevi, mas ainda não sei como corrigi-lo.

Entretanto, descobri experimentalmente que, se você remover manualmente todos os arquivos opt da pasta "C:\bytes" antes de executar Run.

da pasta "C:\Users\ASUSAppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075\Tester\cache",

então meu código funciona corretamente e executa a otimização no parâmetro selecionado.


Se essa pasta não for limpa, o testador não executará otimizações repetidas (com os mesmos dados inalterados), mas lerá

o opt-file já existente dessa pasta. Isso pode ser visto claramente quando se executa repetidamente a mesma otimização manualmente.

Pode-se observar que a otimização real é executada apenas na primeira vez e, em seguida, lê apenas o arquivo opt da pasta.

Essa leitura repetida não parece atualizar o conteúdo do cache, e é isso que está causando o erro no meu código.


Limpar essa pasta pode ajudar a resolver o erro. É claro que essa é uma solução ruim, e seria mais elegante poder restaurar os dados corretos no cache.

Mas não sei como fazer isso. Por enquanto, os dados da otimização real anterior estão pendurados no cache (não correspondem à releitura da pasta).

Infelizmente, essa pasta não pode ser limpa do script usando o FolderClean, porque isso é proibido na MQL5.

Ela está fora da "sandbox" e é preenchida apenas pelo Strategy Tester.


Talvez você deva criar algum complemento externo por meio do C++ e executá-lo a partir do script.


Atenciosamente, Alexander

Arquivos anexados:
 

Erro no texto:



Boa tarde!

Preparei os arquivos e anexei.

Otimização de 25.03 a 20.05.2024 no timeframe M1.

Depósito 17000. Alavancagem 40. Máximo do critério complexo.


Primeiro, precisamos limpar a pasta "C:\Users\ASUS\AppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075\Tester\cache" para a pureza do experimento.

O script do Nocturne deve ser executado com um parâmetro de cada vez para otimizá-lo.

Em seguida, ele gera resultados:

No primeiro parâmetro: ProfitNow -1478 ParamMax 0,37 pela primeira vez.

Para o segundo parâmetro: ProfitNow -379 ParamMax 30 pela primeira vez.

Para o terceiro parâmetro: ProfitNow -379 ParamMax 6 pela primeira vez.


Para o primeiro parâmetro: ProfitNow -379 ParamMax 6 repetidamente

Para o segundo parâmetro: ProfitNow -379 ParamMax 6 repetidamente

Para o terceiro parâmetro: ProfitNow -379 ParamMax 6 repetidamente.


Isso mostra o travamento no cache de dados para o terceiro parâmetro.


E agora precisamos limpar a pasta "C:\Users\ASUS\AppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075\Tester\cache" novamente

E então é uma repetição:


No primeiro parâmetro: ProfitNow -1478 ParamMax 0.37 pela primeira vez.

Para o segundo parâmetro: ProfitNow -379 ParamMax 30 pela primeira vez.

Para o terceiro parâmetro: ProfitNow -379 ParamMax 6 pela primeira vez.


Para o primeiro parâmetro: ProfitNow -379 ParamMax 6 repetidamente

Para o segundo parâmetro: ProfitNow -379 ParamMax 6 repetidamente

Para o terceiro parâmetro: ProfitNow -379 ParamMax 6 repetidamente.


As linhas 151-154 do script Nocturne dizem tudo como você me instruiu:

Run(Odinar);

int GLOC = MTTESTER::GetLastOptCache(Bytes); // Obtém o arquivo opt em uma matriz de bytes Bytes

TESTERCACHE<ExpTradeSummary> Cache;

bool CL = Cache.Load(Bytes); // Alimentar o array de bytes Bytes no Cache


O erro está, obviamente, no código que escrevi, mas ainda não sei como corrigi-lo.

Entretanto, descobri experimentalmente que, se você remover manualmente todos os arquivos opt da pasta "C:\bytes" antes de executar Run.

da pasta "C:\Users\ASUSAppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075\Tester\cache",

então meu código funciona corretamente e executa a otimização no parâmetro selecionado.


Se essa pasta não for limpa, o testador não executará otimizações repetidas (com os mesmos dados inalterados), mas lerá

o opt-file já existente dessa pasta. Isso pode ser visto claramente quando se executa repetidamente a mesma otimização manualmente.

Pode-se observar que a otimização real é executada apenas na primeira vez e, em seguida, lê apenas o arquivo opt da pasta.

Essa leitura repetida não parece atualizar o conteúdo do cache, e é isso que está causando o erro no meu código.


Limpar essa pasta pode ajudar a resolver o erro. É claro que essa é uma solução ruim, e seria mais elegante poder restaurar os dados corretos no cache.

Mas não sei como fazer isso. Por enquanto, os dados da otimização real anterior estão pendurados no cache (não correspondem à releitura da pasta).

Infelizmente, essa pasta não pode ser limpa do script usando o FolderClean, porque isso é proibido na MQL5.

Ela está fora da "sandbox" e é preenchida apenas pelo Strategy Tester.


Talvez você deva criar algum complemento externo por meio do C++ e executá-lo a partir do script.


Atenciosamente, Alexander

 

Publiquei meu robô para otimização, pois o Nocturne está orientado em sua lista de parâmetros.

Mas para o MQL5\Experts\Examples\MACD\MACD Sample.mq5 ele precisa de muitas modificações.


A propósito, por que você precisa do parâmetro de entrada int inNum = 0?

Ou isso é apenas um atavismo?

 
fxsaber #:

Carregue o código para otimizar o MQL5\Experts\Examples\MACD\MACD Sample.mq5. Em seguida, você pode tentar reproduzi-lo. Não há quase nenhum trabalho construtivo agora.

Boa tarde!

Consegui resolver todos os meus problemas com a ajuda de Alexander Slavsky: https://www.mql5.com/pt/users/s22aa.

Ele me enviou o código para excluir o conteúdo do cache.

Não consegui limpar o cache diretamente, pois ele está fora da área restrita.

Talvez isso seja útil para alguém antes de executar o procedimento Run, para que os resultados de otimizações anteriores não interfiram nas novas.

Estou anexando esse script.

Suas bibliotecas e esse procedimento de limpeza garantiram que eu pudesse otimizar o robô de forma consistente.

Muito obrigado por esses códigos e por sua ajuda.

Atenciosamente, Alexander

Aleksandr Slavskii
Aleksandr Slavskii
  • 2024.05.27
  • www.mql5.com
Профиль трейдера
Arquivos anexados:
 
klycko otimizações repetidas (com os mesmos dados inalterados), mas as lê

o opt-file já existente nessa pasta. Isso pode ser visto claramente quando se executa repetidamente a mesma otimização manualmente.

Você pode ver que a otimização real é feita apenas na primeira vez e, em seguida, lê apenas o arquivo opt da pasta.

Essa leitura repetida não parece atualizar o conteúdo do cache, e é isso que causa o erro no meu código.

sinput uint Range = 2;

void OnTesterInit( void )
{
  ::MathSrand((int)::TimeLocal());

  const int Start = ::MathRand();
  const int Step = ::MathRand();

  const uint TmpRange = (::Range < 2) ? 2 : ::Range;

  ::ParameterSetRange("Range", true, TmpRange, Start, Step, Start + (TmpRange - 1) * Step);
}
 
klycko #:

código para excluir o conteúdo do cache.

No MTTester.mqh, há uma função muito exigida quando você faz muitas execuções individuais.

  static bool DeleteLastTST( void )
  {
    const string Path = ::TerminalInfoString(TERMINAL_DATA_PATH)+ "\\Tester\\cache\\";
    string FileNames[];

    const int Size = MTTESTER::GetFileNames(Path, "*.tst", FileNames);

    return(Size && kernel32::DeleteFileW(Path + FileNames[Size - 1]));
  }

Se você substituir tst por opt, ele excluirá o último arquivo opt. Parece redundante limpar toda a pasta Cache.

 
Obrigado!