Teste o novo compilador MQL5 para plataformas x64 - cálculos 2 a 10 vezes mais rápidos! - página 14

 

Hoje eu queria testar a aceleração dos cálculos no meu Expert Advisor em antecipação à supervelocidade (eu até usei uma CPU mais rápida) e... Por alguma razão, o Expert Advisor otimizado estava funcionando no testador três vezes mais lentamente. Isso nunca aconteceu com você? Assim que eu localizar e reproduzir o problema, postarei o código. Não há chamadas de sistema lá, apenas operações com um monte de arrays e operações aritméticas básicas.

Além disso, aqui estão alguns pedidos:

1. Podemos acrescentar a possibilidade de lançar o roteiro do editor sem depuração, ou seja, como se fosse feito a partir do Navegador. Este tipo de lançamento está presente em qualquer ambiente de desenvolvimento. Eu estava pensando em sugerir Ctrl + F5, como no sys, mas a combinação já foi tomada por você :)

2. Adicionar invocando o console de vento stdout do script, para evitar mudar para o terminal toda vez que quiser ver o resultado do script. Embora, como eu entendo, você pode tentar chamá-lo usando WinAPI.

3. Adicione pelo menos alguns ajustes de otimização genética. Por exemplo, o número de combinações pode ser de 1e35 e 10k passes nem sempre é suficiente (o otimizador nem sequer gera novos passes após 10k), você entende que 20-30k seria suficiente, mas você não pode afiná-lo. Por outro lado, quando você corrige alguns parâmetros e deixa alguns para mais afinações e estudos de distribuição... Assim, quando o número de combinações é pequeno, por exemplo, 50k, o otimizador para GA oferece apenas 2k runs - e isto também não é suficiente para esta tarefa em particular - para estudar melhor o comportamento da função sobre estes parâmetros. Ou seja, é estúpido passar por todos os 50k, enquanto a GA gera apenas 2k runs e não dá uma imagem suficiente. Espero que você entenda do que estou falando.

 
Renat Fatkhullin:

Com certeza, as melhorias estão por vir.

Alguém já testou a depuração na história no testador de estratégia?

Acho que muitos adorariam testá-lo, mas a dificuldade e a realidade é que você geralmente testa onde você escreve o código e pretende negociar. Há muito poucos corretores que oferecem o MT5, o que retardará o teste de todas as novas características pelos comerciantes e inevitavelmente retardará o desenvolvimento do MT5. Portanto, talvez faça sentido procurar alguma solução não trivial que resolva este problema e aumente a motivação para usar o MT5.
 
Renat Fatkhullin:

Com certeza, as melhorias estão por vir.

Alguém já testou a depuração na história no testador de estratégia?

Algo que eu estou fazendo errado. Meu visualizador abre de forma simples e funciona como sempre. O breakpoint está certo na primeira declaração no OnInit() - mas não funciona.
 
Renat Fatkhullin:

Com certeza, as melhorias estão por vir.

Alguém já testou a depuração na história no testador de estratégia?

Também seria bom poder selecionar "encontrar usos" no menu de contexto.

Eu sei que é um pouco fora de tópico, mas não preciso escrever nenhuma mudança, mas é bom para os desenvolvedores ter tais coisas.

Eu verifiquei Moving Average, MACD Sample no novo compilador, mas não encontrei nenhuma diferença. Vou tentar no meu EAs.

 

Ainda não depurei totalmente e encontrei o bug (muito diferente), mas até agora encontrei os seguintes problemas com Optimize=1. Deixe-me dizer-lhe imediatamente que meu consultor especializado tem cerca de 100 parâmetros de entrada, e funciona muito com arrays. Além disso, ele não negocia, apenas realiza cálculos.

Vou descrever a ordem de minhas ações:

1. Eu lanço o terminal, seleciono "Otimização = Desabilitado" no testador e dou um conjunto mestre de parâmetros de entrada. O testador dá o resultado correto.

2. Escolho "Otimização = Rápido (algoritmo genético)", lanço-o - o testador nem sequer gera o primeiro passo. Os agentes (processadores) não respondem. No início pensei que poderia haver alguns erros de cálculo com conjuntos de parâmetros ruins e o testador apenas morre.

3. Novamente seleciono "Otimização = Deficiente" e novamente dou o conjunto de referência. Agora o testador não apresenta nenhum resultado.

4. eu abro o código EA no editor, pressione F5 para gerar um código não otimizado. No testador, eu o analiso novamente no conjunto de referência - voilá, há um resultado. Bem, algo está com falhas dentro do Expert Advisor devido à otimização.

Adicionei uma função que registra os parâmetros de entrada do Expert Advisor em um arquivo. Assim, no passo 2 (a otimização está em execução e os passos do testador quase não são gerados), valores aleatórios estavam aparecendo para alguns parâmetros que não são fornecidos porque o parâmetro ou é imutável ou o valor está fora da faixa definida. Por exemplo, eu tinha um parâmetro definido para 80 e era invariante. No registro foi ajustado para 0,01355835795402527 (?). O outro foi ajustado para 0 e registrado como 4,940656458412465e-324; ambos os parâmetros eram o dobro. Mas depois descobri que também havia valores totalmente inapropriados para int.

Em segundo lugar, cortei o código "desnecessário" do Expert Advisor para deixar apenas aquele código que também causa um erro. Mesmo assim, acabou sendo bastante. Além disso, a função de registro estava emitindo o valor de TODOS os parâmetros. Entretanto, quando removi a maioria dos parâmetros (e eles se tornaram menos de 64 ou 80), o testador não morreu. Dito isto, também encontrei uma estranha conexão entre o erro e minha função de registro. Quando é comentado (ou seja, todos os parâmetros NÃO são utilizados no código), o testador morre. Quando ele registra, o testador morre. Muito estranho.

E terceiro. Notei que os cálculos paralelos não resultam em um aumento linear na velocidade geral das corridas. Por exemplo, estou anexando os arquivos: um script e um Expert Advisor com o mesmo código. Este é um verdadeiro pedaço de código, recortado do meu consultor especializado, mas as matrizes são renomeadas. Quando Optimize=1, meu script funciona em 156 ms, ou seja, talvez 6 corridas por segundo. (Sem otimizar, leva 3 vezes mais tempo). Eu tenho 8 fios, ou seja, teoricamente 48 corridas por segundo são possíveis. Ao rodar o Expert Advisor no testador (fazer slow Optimize, ativar o parâmetro dummy, por exemplo, para 2000 corridas) eu só consegui um pouco mais de 4 corridas por segundo, ou seja, ainda mais lento do que em um único núcleo! Embora houvesse, honestamente, 8 processos pendurados no gerenciador de tarefas. Por que isto é assim? Processos múltiplos bloqueando o acesso à memória? Inicialização longa de matrizes? (É verdade que as matrizes não são grandes lá).

Quando realizamos um único teste no testador, Imprimir: 156 ms. Ou seja, tudo parece ser normal com o Consultor Especialista.

A propósito, alguma vez haverá indicadores na MQL? :) Porque eu tive que fazer arrays-copies.

Arquivos anexados:
 
xfo:

Por alguma razão, o especialista com otimização trabalhou 3 vezes mais lentamente no testador.

Agora entendo porque está ficando mais lento - apenas um agente (aleatório) funciona, os outros falham e assim constantemente uma tentativa a cada poucos segundos. Nada está claro no registro do testador. Pelo que entendi, se o agente mais recente também falhar, então o que escrevi anteriormente acontece: os passos do testador não são gerados de forma alguma.

Build 1117 não resolveu todos os problemas descritos acima (incluindo a matriz estrutural).

 

Atualizado para 1117 hoje, mas depurando os dados históricos - ainda não está em andamento.

Eu pego ExpertMACD.mt5, coloco um ponto de parada bem na entrada da função Init, começo a depuração dos dados históricos (pressione o botão), a janela do editor se fecha, as configurações do testador de estratégia se abrem. Eu defino o período de tempo (para 2015, dias, todos os tiquetaques), visualização - a caixa de seleção está ligada, eu aperto o botão Start e a visualização começa. O ponto de parada não funcionou.

O que eu estou fazendo de errado ?

 
George Merts:

Atualizado para 1117 hoje, mas depurando os dados históricos - ainda não está em andamento.

Pego o ExpertMACD.mt5, coloco um ponto de parada bem na entrada da função Init, começo a depuração dos dados históricos (pressione o botão), a janela do editor se fecha, as configurações do testador de estratégia se abrem. Eu defino o período de tempo (para 2015, diários, todos os tiquetaques), visualização - a caixa de seleção está ligada, eu aperto o botão Start e a visualização começa. O ponto de parada não funcionou.

O que eu estou fazendo de errado ?

Preciso abrir uma conta demo noMetaQuotes-Demo, então

Meu MACD Sample.mq5 em uma conta demo moex o símbolo USDRUB_TOM não funciona (ele começa a funcionar primeiro, depois pára após alguns passos) e um simples backtest também não funciona.

Mas a Moving Average.mq5 em uma conta demo moex USDRUB_TOM funciona bem (e o backtest simples também funciona).

Na conta demo demoforex o símbolo EURUSD funciona bem (assim como o simples backtest) MACD Sample.mq5 e Moving Average.mq5

Gravou um vídeo de depuração no MACD Sample.mq5 símbolo EURUSD na conta demoforex. (também funciona bem no dia-a-dia)

Arquivos anexados:
capture-mt5-1.zip  5457 kb
 
xfo:

Ainda não depurei totalmente e encontrei o bug (de formas muito diferentes), mas até agora encontrei os seguintes problemas com Optimize=1. Deixe-me dizer-lhe imediatamente que meu consultor especializado tem cerca de 100 parâmetros de entrada, e funciona muito com arrays. Além disso, ele não negocia, mas apenas faz cálculos.

........................

.......................

A propósito, alguma vez haverá indicadores na MQL? :) Porque eu tive que fazer arrays-copies.

Olá, eu gostaria de ser mais específico.

1. Seu Consultor Especialista fez cálculos, mas não negociou. O que e como o Expert Advisor exibe? O que você espera do Consultor Especialista ao executá-lo no testador de estratégia? Que dados você espera obter durante os testes com otimização? Não encontramos nenhum erro durante os testes do Expert Advisor anexo. Os erros que você descreve estão relacionados a ela?

2. Passo a passo o que você faz e o que você espera, por favor, anexe o código que você usa.

3. Você pode anexar os logs de teste com e sem otimização?

4. Sua versão terminal, OS?

 

Eduard Vavrin, o arquivo anexo não está relacionado com os erros descritos. Deixe-me tentar preparar o código que leva ao erro e enviá-lo a você. Leva tempo e até agora este código contém muito da fonte do Expert Advisor.

Em relação ao arquivo que anexei: dizia-se que uma única execução da EA anexada leva 156 ms, ou seja, 1/6 de um segundo. Podemos supor que em 8 fios conseguiríamos 48 corridas por segundo. Na realidade, o multi-runner (há o parâmetro dummy, modo de otimização lenta) rende apenas 4-5 corridas por segundo em 8 fios. A pergunta era: por que a velocidade está caindo? Na aba Agentes posso ver que todos os fios estão correndo e cada linha gasta mais de 1 segundo para uma corrida. O que o Expert Advisor retorna rand() é apenas um carrapato para ver que funcionou.

Razão: