Lentidão no Backtest

 

Olá, o meu backtest está muito lento e o problema são os CopyBuffer dos indicadores. Eu consegui resolver o problema da lentidão adicionando uma função que só executa a leitura após uma nova vela. Porém, o problema é que isso interfere no operacional das minhas estratégias. Por exemplo: o meu EA executa uma compra no fechamento da vela[1].close da Banda de Bollinger + o Cruzamento de Média. Eu adicionando a função de nova vela o EA executa atrasado a ordem de compra e isso modifica demais o resultado final no backtest.

Obs.: A função NovaVela() está interferindo no operacional porque a Banda de Bollinger tem um TimeFrame diferente do Cruzamento de Média.


Como eu consigo resolver esse problema sem interferir no operacional das minhas estratégias?


Obs.: Em OnTick() ficou assim:


         if(BufferIndicadores())                  //------ Essa função que insere os CopyBuffer dos indicadores

         {

          if(ChecaPosicao())                    // ---- Checa se há posição em aberto

           {

            if( !LogicaOperacional() )          // ---- Executa minha lógica operacional

             {

              Print("Lógica operacional não realizada com sucesso!");

             }

           }

         }


Um pedaço da minha função BufferIndicadores()

bool BufferIndicadores()
  {

   int barras = 5;
   
   int ind1 = (Indicador1==CruzamentoMedia || Indicador2==CruzamentoMedia || Indicador3==CruzamentoMedia) ? CopyBuffer(ma1_handler,0,0,barsToCopy,ma1_buffer) : barras;
   int ind2= (Indicador1==CruzamentoMedia || Indicador2==CruzamentoMedia || Indicador3==CruzamentoMedia) ? CopyBuffer(ma2_handler,0,0,barsToCopy,ma2_buffer) : barras;

 return(true);
}
 
Rafael Magalhães:

Olá, o meu backtest está muito lento e o problema são os CopyBuffer dos indicadores. Eu consegui resolver o problema da lentidão adicionando uma função que só executa a leitura após uma nova vela. Porém, o problema é que isso interfere no operacional das minhas estratégias. Por exemplo: o meu EA executa uma compra no fechamento da vela[1].close da Banda de Bollinger + o Cruzamento de Média. Eu adicionando a função de nova vela o EA executa atrasado a ordem de compra e isso modifica demais o resultado final no backtest.

Obs.: A função NovaVela() está interferindo no operacional porque a Banda de Bollinger tem um TimeFrame diferente do Cruzamento de Média.


Como eu consigo resolver esse problema sem interferir no operacional das minhas estratégias?


Obs.: Em OnTick() ficou assim:


Um pedaço da minha função BufferIndicadores()

Você é bem confuso para relatar um problema...

1- Você cita que NovaVela() é quem está causando problemas e não vemos o código dessa função...

2- Como você sabe que o culpado da queda de performance são os CopyBuffers() ?

3- Se você realmente só executa operações em Velas Novas, por quê está executando checagens a cada OnTick()?

Razão: