Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
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.
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.
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
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?
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
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.
#property tester_no_cache
inFakeRange
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.
Se você substituir tst por opt, ele excluirá o último arquivo opt. Parece redundante limpar toda a pasta Cache.