[CopyTicks] Dados replicados e outros ausentes

 

Olá,

estava efetuando alguns testes no WIN usando o CopyTicks copiando apenas um único tick a cada chamada do OnCalculate, como filtro coloquei que imprimisse apenas as agressões de compra/venda que possuam volume reais maiores que 100. Como resultados observei que alguns dados são replicados e outros não são obtidos. Segue abaixo um print que mostra os dados que foram replicados e o que não foi copiado, a comparação foi feita tendo por base o book do MT5, em vermelho está a informação que foi replicada e em azul o que não foi copiado. Segue também o trecho de código. Se alguém puder me ajudar a pelo menos entender o que está acontecendo ou se é algum problema da função CopyTicks fico muito grato.


Trecho do código:

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const int begin,
                const double &price[])
  {
//---   
   MqlTick tick[];
   int copied = CopyTicks(_Symbol,tick,COPY_TICKS_ALL,0,1);

   if(copied>0)
     {
      if(((tick[0].flags&TICK_FLAG_BUY)>0 || (tick[0].flags&TICK_FLAG_SELL)>0) && tick[0].volume_real>100)
        {
         Print(tick[0].volume_real," | ",MillisecondsToTimeMsc(tick[0].time_msc));
        }
     }

//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
//| Converte de milissegundos para horário com milissegundos no      |
//| formato string                                                   |
//+------------------------------------------------------------------+
string   MillisecondsToTimeMsc(ulong msc)
  {
   string time_msc = TimeToString((datetime)(msc/1000),TIME_DATE|TIME_MINUTES|TIME_SECONDS)+"."+DoubleToString(MathMod(msc,1000),0);

   return time_msc;
  }
Razão: