Ajuste Indice.

 
Boa tarde.

Não estou encontrado na documentação do mql5 a forma de ler a tabela de negociação, nela contem todos negócios realizado no dia dos ativos, desta forma ficaria fácil criar o Ajuste. Alguém poderia me ajudar?
 
Daniel Cousseau:
Boa tarde.

Não estou encontrado na documentação do mql5 a forma de ler a tabela de negociação, nela contem todos negócios realizado no dia dos ativos, desta forma ficaria fácil criar o Ajuste. Alguém poderia me ajudar?
Use as funções CopyTicks() ou CopyTicksRange() passando o parâmetro flags = COPY_TICKS_TRADE e você receberá uma lista de todos os negócios realizados, com data/hora (precisão de milésimo de segundo), preço e volume de cada negócio.
Documentação sobre MQL5: Séries Temporais e Acesso a Indicadores / CopyTicksRange
Documentação sobre MQL5: Séries Temporais e Acesso a Indicadores / CopyTicksRange
  • www.mql5.com
, a indexação é realizada do passado para o presente, ou seja, o tick com índice 0 é o mais antigo na matriz. Para analisar o tick, é necessário verificar o campo [out] Matriz estática ou dinâmica MqlTick para recebimento de ticks. Se na matriz estática não caberem todos os ticks do intervalo solicitado, serão obtidos tantos ticks quanto...
 
Trader_Patinhas:
Use as funções CopyTicks() ou CopyTicksRange() passando o parâmetro flags = COPY_TICKS_TRADE e você receberá uma lista de todos os negócios realizados, com data/hora (precisão de milésimo de segundo), preço e volume de cada negócio.

Velho, obrigado.. vou fazer.. Abração

 
Trader_Patinhas:
Use as funções CopyTicks() ou CopyTicksRange() passando o parâmetro flags = COPY_TICKS_TRADE e você receberá uma lista de todos os negócios realizados, com data/hora (precisão de milésimo de segundo), preço e volume de cada negócio.

Pessoal,

Vocês conseguiram fazer o ajuste?

Eu tentei fazer com o CopyTicksRange, porém notei que algo de estranho acontece com a propriedade volume... ela sempre vem com o valor 4... não sei o porque...


O resultado do algoritmo, será o valor: 5175.839357264844693418 , enquanto de acordo com a página da b3 deveria ser:  5.176,0630

Suspeito que o problema é porque o volume está sempre retornando o valor 4 no lugar de retornar o volume negociado.

Alguém sabe o porque? ou qual seria a solução para o cálculo do ajuste?


      datetime start_date = D'2020-07-21 15:50';

      datetime end_date = D'2020-07-21 16:00';

      MqlTick ticks[];

      int result = CopyTicksRange(Symbol(), ticks, COPY_TICKS_TRADE, start_date*1000, end_date*1000);

      int array_size = ArraySize(ticks);

            

      double tmp_sum_volume = 0;

      double tmp_sum_product = 0;

      for(int j=0; j<array_size; j++) { 

        double j_volume = ticks[j].volume; //Não sei pq, mas o volume esta vindo sempre como 4

        double j_volume_real = ticks[j].volume_real;  //Não sei pq, mas o volume esta vindo sempre como 4

        

        tmp_sum_product += (j_last * j_volume);

        tmp_sum_volume += j_volume;

      }

      double tmp_result1 = tmp_sum_product / tmp_sum_volume;

Razão: