Indicador congelando meu metatrader durante os horários de pico de negociação

 

Amigos, criei um indicador personalizado com uma cesta de símbolos para dar um sinal de alta ou baixa para um índice.

O indicador funciona bem e não congela durante horários de negociação de baixo volume.

Mas para horários de negociação de alto volume o indicador fica muito pesado com os cálculos e congela toda a minha plataforma MetaTrader 5.

Eu estaria disposto a sacrificar alguns cálculos, por exemplo, chamando a função OnCalculate apenas 5 vezes por minuto, em vez do que ela faz nativamente, que é ser chamada a cada tique.

Como posso diminuir a frequência de chamada da função OnCalculation?

 
douglas14Amigos, criei um indicador personalizado com uma cesta de símbolos para dar um sinal de alta ou baixa para um índice. O indicador funciona bem e não congela durante horários de negociação de baixo volume. Mas para horários de negociação de alto volume o indicador fica muito pesado com os cálculos e congela toda a minha plataforma MetaTrader 5. Eu estaria disposto a sacrificar alguns cálculos, por exemplo, chamando a função OnCalculate apenas 5 vezes por minuto, em vez do que ela faz nativamente, que é ser chamada a cada tique. Como posso diminuir a frequência de chamada da função OnCalculation?

Um exemplo para testar:

   static datetime prev_time = 0;
   datetime curr_time = TimeCurrent();

   if((prev_time + 12) < curr_time)
     {
      prev_time = curr_time;
     }
   else
     {
      return(rates_total);
     }

// seu código . . .
 
douglas14:

Amigos, criei um indicador personalizado com uma cesta de símbolos para dar um sinal de alta ou baixa para um índice.

O indicador funciona bem e não congela durante horários de negociação de baixo volume.

Mas para horários de negociação de alto volume o indicador fica muito pesado com os cálculos e congela toda a minha plataforma MetaTrader 5.

Eu estaria disposto a sacrificar alguns cálculos, por exemplo, chamando a função OnCalculate apenas 5 vezes por minuto, em vez do que ela faz nativamente, que é ser chamada a cada tique.

Como posso diminuir a frequência de chamada da função OnCalculation?

Tem a função OnTimer também que pode ser configurada em milisegundos ou em segundos a chamada. Mas voce pode ter que editar mais seu código do que o que o Vinicius sugeriu.
 
Vinicius Pereira De Oliveira #:

Um exemplo para testar:

Obrigado amigo, sua sugestao me deu outra ideia, parece estar funcionando, fiz o seguinte: coloquei um limitador de tempo comparando o segundo logo no inicio da onCalculate:

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
   if(prev_calculated>rates_total-10)
      if(segundo(TimeCurrent())!=15||segundo(TimeCurrent())!=30||segundo(TimeCurrent())!=45)
         return rates_total;