Histórico de Ticks incompleto. CopyTicksRange.

 

Pessoal, por favor.

Estou encontrando várias falas no histórico de ticks quando rodo um teste. É perceptível no gráfico, quando a linha last trava num lugar e as barras continuam sendo formadas, e pelo meu código identifiquei alguns minutos que não existem nenhuma transação de trade, apenas bid/ask. Como meu EA trabalha com mini-índice futuro, me parece improvável não ter nenhuma negociação. Trabalho com a corretora Órama, e o suporte é sofrível. Não consegui até o momento uma resposta.

Isto está me dando um maior problema. Não sei se estou fazendo algo errado ou é um problema da base histórica.

Vcs tem tido algum problema neste sentido? Podem me ajudar? Segue o código e o print da tela que o gráfico trava a linha último preço (linha azul).

//+=========================================================================+
void Cpml68_Ticks::GetTickRealVolume(double &xTickRealVolumeCP,double &xTickRealVolumVD,datetime tick_atual_time)
  {
   int   ticksCount=0;
   MqlTick ticks_array[];
   string tick_flag="";
   xTickRealVolumeCP=0;
   xTickRealVolumVD=0;
   ulong dtini;
   datetime   data_posicao;
   int period_seconds=PeriodSeconds(_Period); // Number of seconds in current chart period
   data_posicao=tick_atual_time/period_seconds*period_seconds; // Time of bar opening on current chart
   dtini=(ulong)(data_posicao*1000);
   // Busca histórico de Ticks
   ticksCount=CopyTicksRange(_Symbol,ticks_array,COPY_TICKS_TRADE,dtini);
   // Loop do histórico
   for(int i=0;i<ticksCount;i++)
     {      
      tick_flag=GetTickStringFlag(ticks_array[i].flags);
      if(tick_flag=="TICK_FLAG_BUY")
         xTickRealVolumeCP+=ticks_array[i].volume_real;
      if(tick_flag=="TICK_FLAG_SELL")
         xTickRealVolumVD+=ticks_array[i].volume_real;
      if(tick_flag=="TICK_FLAG_BUY|TICK_FLAG_SELL")
        {
          xTickRealVolumeCP+=ticks_array[i].volume_real/2;
          xTickRealVolumVD+=ticks_array[i].volume_real/2;
        }
     }
  }

//+------------------------------------------------------------------+
string Cpml68_Ticks::GetTickStringFlag(const uint flag )
  {
        if((flag&TICK_FLAG_BUY)==TICK_FLAG_BUY && ( flag&TICK_FLAG_SELL)==TICK_FLAG_SELL) // 376 If the tick is of both directions
           return "TICK_FLAG_BUY|TICK_FLAG_SELL";
   if((flag&TICK_FLAG_BUY)==TICK_FLAG_BUY)   // In case of a buy tick
        return( "TICK_FLAG_BUY" );
   if((flag&TICK_FLAG_SELL)==TICK_FLAG_SELL) // In case of a sell tick
        return( "TICK_FLAG_SELL" );
   if((flag&TICK_FLAG_ASK)==TICK_FLAG_ASK) // In case of a sell tick
        return( "TICK_FLAG_ASK" );
   if((flag&TICK_FLAG_ASK)==TICK_FLAG_ASK) // In case of a sell tick
        return( "TICK_FLAG_ASK" );
   if((flag&TICK_FLAG_BID)==TICK_FLAG_BID) // In case of a sell tick
        return( "TICK_FLAG_BID" );      
   if((flag&TICK_FLAG_LAST)==TICK_FLAG_LAST) // In case of a sell tick
        return( "TICK_FLAG_LAST" );
   if((flag&TICK_FLAG_VOLUME)==TICK_FLAG_VOLUME) // In case of a sell tick
        return( "TICK_FLAG_VOLUME" );
   return( "WRONG_VALUE" );
  }
Arquivos anexados:
mlg_Grafico.png  30 kb
 

Já passei por isso. É falha no histórico da corretora! Geralmente quando ocorre falhas no servidor esses dados param de ser armazenados até o problema ser resolvido.

Entretanto, existe datas desse ano que ocorreu circuit break, março principalmente, essas datas é normal ter lacunas nos ticks.

Essas lacunas de circuit break é baixa liquidez, poucas transações.

Vc pode contornar isso da seguinte forma: baixar o histórico de todas as corretoras e começar a fazer um "merge" desses ticks via python.

Faça um script em python que identifica essas lacunas e busca em outra corretora os dados que falta.

Ou então, compre o histórico de alguém que já fez esse trabalho.

 
Hawllysson Gardel Queiroz Almeida:

Já passei por isso. É falha no histórico da corretora! Geralmente quando ocorre falhas no servidor esses dados param de ser armazenados até o problema ser resolvido.

Entretanto, existe datas desse ano que ocorreu circuit break, março principalmente, essas datas é normal ter lacunas nos ticks.

Essas lacunas de circuit break é baixa liquidez, poucas transações.

Vc pode contornar isso da seguinte forma: baixar o histórico de todas as corretoras e começar a fazer um "merge" desses ticks via python.

Faça um script em python que identifica essas lacunas e busca em outra corretora os dados que falta.

Ou então, compre o histórico de alguém que já fez esse trabalho.

Nossa Hawllysson, para mim agora está complicado estes contornos. O Python está na minha lista para aprender. Mas agradeço seu retorno, pelo menos fico mais tranquilo que não é algo que esteja fazendo errado.

Valeu.

Hawllysson Gardel Queiroz Almeida
Hawllysson Gardel Queiroz Almeida
  • www.mql5.com
Produto publicado O indicador Volume HeatMap mostra visualmente a INTENSIDADE do volume levando em conta o conceito de desvio padrão. Finalidade do Indicador: Volumes altos são comuns onde há um forte consenso de que os preços irão aumentar. Um aumento no volume ocorre com frequência no início de uma nova tendência de alta no preço de um ativo...