While não executa nos backtests

 

Amigo,


Já estou no segundo robô e para aferir a pontuação mais lucrativa eu faço diversos backtests. Porém dentro do meu código tenho alguns whiles como nos exemplos abaixo :

        while ( v_bar > bars)
             { 
             bars = Bars(_Symbol, _Period,TimeCurrent()-86400,TimeCurrent());
             }

while ( v_time_waiting > TimeCurrent())
             { 
             if (v_time_waiting == TimeCurrent()+1 && v_count < 1){
               Print("Aguardando 1 Segundo da ordem enviada",TimeCurrent());
               v_count = 1;
                }
               if (v_time_waiting == TimeCurrent()+2 && v_count == 1){
               Print("Aguardando 2 Segundos da ordem enviada",TimeCurrent());
               v_count = 2;
                }
             }

Não conta real eles funcionam normalmente, porém no backtest ficam presos no loop infinito. Já mudei as configurações do testador de estratégias, mas não consigo fazer ele passar dentro do while corretamente.


Com isso meu resultado final fica distorcido no backtest.


Alguém pode me ajudar ?


Obrigado !

 
Carlos Martins:

Amigo,


Carlos, 

Esse trecho abaixo pode estar afetando o funcionamento do gerador de ticks do otimizador/testador,  pois depois das 18:00 (ou antes das 9:00) não existe TICKS portanto o TIME_CURRENT() não muda e EA fica em loop infinito ....

while ( v_bar > bars)
{ 
 bars = Bars(_Symbol, _Period,TimeCurrent()-86400,TimeCurrent());
}


Dica: Use a função indicada abaixo para identificar uma nova barra.

https://www.mql5.com/pt/code/768


Outro ponto questionável e o while abaixo , v_time_waiting está fixo. ( onde é alterado?).


while ( v_time_waiting > TimeCurrent()){


}
IsNewBar
IsNewBar
  • www.mql5.com
A classe СIsNewBar é necessária para que os Expert Advisors trabalhem de forma eficiente, fazendo os cálculos no momento em que uma nova barra aparece. Geralmente a função IsNewBar() é usada para essa finalidade, em vez de sua classe. Mas tal função contém uma variável estática e, portanto, não podemos usar várias chamadas desta função. Para...
 
Rogerio Giannetti Torres:

Carlos, 

Esse trecho abaixo pode estar afetando o funcionamento do gerador de ticks do otimizador/testador,  pois depois das 18:00 (ou antes das 9:00) não existe TICKS portanto o TIME_CURRENT() não muda e EA fica em loop infinito ....


Dica: Use a função indicada abaixo para identificar uma nova barra.

https://www.mql5.com/pt/code/768


Outro ponto questionável e o while abaixo , v_time_waiting está fixo. ( onde é alterado?).


Olá Rogerio,


Essa variável também é populado pelo TIME_CURRENT(), alguns pontos eu coloco +1, outros +2.... Existe alguma forma de fazer ela funcionar no testador ?