História do Tick - página 16

 
Karputov Vladimir:

Aqui está o que foi pedido:

A transição após 24 horas está correta.
Método de teste: Com o terminal ligado, eu apaguei os arquivos de histórico de carrapatos. Em seguida, correu o roteiro duas vezes (já que não havia história, a primeira execução do roteiro inicializou a carga histórica).

Sim, obrigado, fez o mesmo - ajudou. No entanto, um comportamento muito estranho.
 

Mas o estranho comportamento não termina aí. Decidi comparar dois momentos de consulta da mesma história.

O primeiro momento foi ontem, quando escrevi sobre o erro de chegada de sexta-feira a segunda-feira:

Fórum sobre comércio, sistemas automatizados de comércio e testes de estratégia comercial

História do Tick

Tapochun, 2015.10.19 08:48

Um pouco mais tarde - o quadro é assim. ALL 3000 ticks mode:

2015.10.19 11:46:33.144 test_CopyTicks_1178 (GBPUSD,M5) OnStart: #2774 2015.10.16 23:59:05: spread = 0, ask = 0.00000, bid = 0.00000, last = 1.54356
2015.10.19 11:46:33.144 test_CopyTicks_1178 (GBPUSD,M5) OnStart: #2775 2015.10.16 23:59:05: spread = 72, ask = 1.54428, bid = 1.54356, last = 0.00000
2015.10.19 11:46:33.144 test_CopyTicks_1178 (GBPUSD,M5) OnStart: #2776 2015.10.16 23:59:06: spread = 0, ask = 0.00000, bid = 0.00000, last = 1.54356
2015.10.19 11:46:33.144 test_CopyTicks_1178 (GBPUSD,M5) OnStart: #2777 2015.10.16 23:59:06: spread = 75, ask = 1.54431, bid = 1.54356, last = 0.00000
2015.10.19 11:46:33.144 test_CopyTicks_1178 (GBPUSD,M5) OnStart: #2778 2015.10.16 23:59:07: spread = 0, ask = 0.00000, bid = 0.00000, last = 1.54357
2015.10.19 11:46:33.144 test_CopyTicks_1178 (GBPUSD,M5) OnStart: #2779 2015.10.16 23:59:07: spread = 74, ask = 1.54431, bid = 1.54357, last = 0.00000
2015.10.19 11:46:33.144 test_CopyTicks_1178 (GBPUSD,M5) OnStart: #2780 2015.10.16 23:59:10: spread = 0, ask = 0.00000, bid = 0.00000, last = 0.00000
2015.10.19 11:46:33.144 test_CopyTicks_1178 (GBPUSD,M5) OnStart: #2781 2015.10.19 09:44:41: spread = 18, ask = 1.54498, bid = 1.54480, last = 1.54480
2015.10.19 11:46:33.144 test_CopyTicks_1178 (GBPUSD,M5) OnStart: #2782 2015.10.19 09:44:41: spread = 19, ask = 1.54499, bid = 1.54480, last = 0.00000
2015.10.19 11:46:33.144 test_CopyTicks_1178 (GBPUSD,M5) OnStart: #2783 2015.10.19 09:44:42: spread = 19, ask = 1.54499, bid = 1.54480, last = 1.54480
2015.10.19 11:46:33.144 test_CopyTicks_1178 (GBPUSD,M5) OnStart: #2784 2015.10.19 09:44:42: spread = 18, ask = 1.54498, bid = 1.54480, last = 0.00000
2015.10.19 11:46:33.144 test_CopyTicks_1178 (GBPUSD,M5) OnStart: #2785 2015.10.19 09:44:42: spread = 18, ask = 1.54498, bid = 1.54480, last = 1.54480
2015.10.19 11:46:33.144 test_CopyTicks_1178 (GBPUSD,M5) OnStart: #2786 2015.10.19 09:44:42: spread = 19, ask = 1.54499, bid = 1.54480, last = 0.00000
2015.10.19 11:46:33.144 test_CopyTicks_1178 (GBPUSD,M5) OnStart: #2787 2015.10.19 09:44:42: spread = 19, ask = 1.54499, bid = 1.54480, last = 1.54480

Buraco na história. No modo INFO - similar.

Note os carrapatos que chegam às 9.44.41 em diante. Agora o histórico para o mesmo símbolo, ao mesmo tempo, na mesma modalidade (ALL) só foi solicitado hoje:

QK      0       13:04:51.698    test_CopyTicks_1178 (GBPUSD,M5) OnStart: #289463 2015.10.19 09:44:41: spread = 0, ask = 0.00000, bid = 0.00000, last = 1.54480
LN      0       13:04:51.698    test_CopyTicks_1178 (GBPUSD,M5) OnStart: #289464 2015.10.19 09:44:41: spread = 19, ask = 1.54499, bid = 1.54480, last = 0.00000
DO      0       13:04:51.698    test_CopyTicks_1178 (GBPUSD,M5) OnStart: #289465 2015.10.19 09:44:42: spread = 0, ask = 0.00000, bid = 0.00000, last = 1.54480
ES      0       13:04:51.698    test_CopyTicks_1178 (GBPUSD,M5) OnStart: #289466 2015.10.19 09:44:42: spread = 18, ask = 1.54498, bid = 1.54480, last = 0.00000
HR      0       13:04:51.698    test_CopyTicks_1178 (GBPUSD,M5) OnStart: #289467 2015.10.19 09:44:42: spread = 0, ask = 0.00000, bid = 0.00000, last = 1.54480
EG      0       13:04:51.698    test_CopyTicks_1178 (GBPUSD,M5) OnStart: #289468 2015.10.19 09:44:42: spread = 19, ask = 1.54499, bid = 1.54480, last = 0.00000
DI      0       13:04:51.698    test_CopyTicks_1178 (GBPUSD,M5) OnStart: #289469 2015.10.19 09:44:42: spread = 0, ask = 0.00000, bid = 0.00000, last = 1.54480
DH      0       13:04:51.698    test_CopyTicks_1178 (GBPUSD,M5) OnStart: #289470 2015.10.19 09:44:42: spread = 18, ask = 1.54498, bid = 1.54480, last = 0.00000
IM      0       13:04:51.698    test_CopyTicks_1178 (GBPUSD,M5) OnStart: #289471 2015.10.19 09:44:42: spread = 0, ask = 0.00000, bid = 0.00000, last = 1.54480

O método de entrega é diferente. E definitivamente faltam milissegundos.

E como analisar carrapatos nesta situação!

 
Renat Fatkhullin:

Isso é correto.

Eu tenho apontado exatamente - não há estrutura ou lógica no preenchimento dos carrapatos. Cada campo de preços é independente dos outros. O que vem do fornecedor é o que é traduzido.

Renat, acontece que os mesmos carrapatos podem vir de um fornecedor, dependendo do tempo do pedido e de diferentes maneiras!

O formato do histórico depende do servidor ao qual você está conectado?

 
Tapochun:

Prometeu-se que isto estará na próxima construção e tenho certeza de que terá suas fichas.

Seria bom se sem "chips", e normalmente ... e se cansasse desses gráficos que dizem 99% de qualidade de simulação ... e o verdadeiro nem sequer chega perto :) Para mim, em princípio, não deveria haver tal coisa, senão não é um testador, mas um brinquedo. E não se pode fazer muita papa com as estratégias de fechamento de bares.

 
Maxim Dmitrievsky:

Seria bom se não houvesse "truques" e estava tudo bem... mas estou cansado destes gráficos que dizem 99% de qualidade de modelagem... e não está nem perto da coisa real :) Para mim, em princípio, não deveria haver tal coisa, senão não é um testador, mas um brinquedo. E não se pode fazer muita papa com as estratégias de fechamento de bares.

Sem fichas, isso raramente acontece de uma só vez. Esta história de carrapatos é esperada há muito tempo, e queremos terminá-la o mais rápido possível. Quero que ele esteja pronto tanto no testador como na conta real. Infelizmente, não há muito feedback. Espero que o trabalho de atualização esteja progredindo.

 
Karputov Vladimir:

Favor especificar a bandeira de recebimento de COPY_TICKS_INFO (somente Bid and Ask) - Bid and Ask ainda pode ser com o valor "0" ou no modo COPY_TICKS_INFO - Bid and Ask não conterá zeros e o fluxo do tick será similar aodo terminal, na janela "Market Watch", aba "Ticks"?


Será resolvido na construção 1200:

MQL5: Formato ampliado da estrutura MqlTick. Agora, ele contém o tempo de chegada do tick em milissegundos, assim como bandeiras que permitem determinar qual parâmetro do tick mudou.
struct MqlTick
  {
   datetime     time;          // Время последнего обновления цен
   double       bid;           // Текущая цена Bid
   double       ask;           // Текущая цена Ask
   double       last;          // Текущая цена последней сделки (Last)
   ulong        volume;        // Объем для текущей цены Last
   long         time_msc;      // Время последнего обновления цен в миллисекундах
   uint         flags;         // Флаги тиков
  };
Cada tick tem sempre todos os parâmetros preenchidos, independentemente de os dados terem mudado desde o tick anterior. Isto permite que você tenha sempre um status atualizado de preços em qualquer momento sem ter que pesquisar o histórico de tick para valores anteriores. Por exemplo, com um tique só o preço de compra pode ter mudado, mas a estrutura conterá outros parâmetros além do novo preço: preço de compra anterior, volume, etc. Para descobrir quais dados exatamente mudaram com o tique atual, analise suas bandeiras:

  • TICK_FLAG_BID - tic-tac mudou o preço de oferta
  • TICK_FLAG_ASK - o tick alterou o preço pedido
  • TICK_FLAG_LAST - preço alterado do último negócio
  • TICK_FLAG_VOLUME - O volume do tic mudou
  • TICK_FLAG_BUY - Ocorreu um carrapato como resultado de um negócio de compra
  • TICK_FLAG_SELL - o tick ocorreu como resultado de um negócio de venda

A estrutura MqlTick é usada em dois métodos:

  • CopyTicks - o método não suporta o formato da estrutura antiga. Arquivos EX5 compilados anteriormente que usam o antigo formato de tick retornarão o erro 4006 (ERR_MQL_INVALID_ARRAY) ao chamar a função CopyTicks.
  • SymbolInfoTick - método que suporta tanto o formato da estrutura antiga como o da nova.
 

Portanto:

MetaTrader 5 x64 build 1192 started (MetaQuotes Software Corp.)
...
authorized on MetaQuotes-Demo through Access Point Asia (ping: 556.27 ms)

e a estrutura atualizada do MqlTick:

Estrutura MqlTick atualizada

 
Karputov Vladimir:

Portanto:

e estrutura MqlTick atualizada :


E como acompanhar adequadamente a chegada de um novo tick no terminal? Por exemplo, no testador.

"Função OnTick() não é um manipulador de cada tick, ele notifica um Consultor Especialista sobre mudanças no mercado. As mudanças podem ser em lote: vários ticks podem chegar ao terminal simultaneamente, mas a função OnTick() será chamada apenas uma vez para notificar o Expert Advisor sobre a última condição do mercado".

 
Maxim Dmitrievsky:

Qual é a maneira correta de acompanhar a chegada de um novo tick no terminal? Por exemplo, no testador.

"A função OnTick() não é um manipulador de cada tick, ela notifica o Consultor Especialista sobre as mudanças no mercado. As mudanças podem ser em lote: o terminal pode receber vários ticks ao mesmo tempo, mas a função OnTick() será chamada apenas uma vez para informar o Expert Advisor sobre a última condição do mercado".

Se você quiser rastrear cada tic tac, deve fazê-lo no indicador. Um indicador, ao contrário de um EA, lida com cada carrapato.

Acrescentado: agora também é possível analisar todas as carrapatas na EA - somente é necessário entrar em verificações (por exemplo, para analisar o pedido do CopyTicks com profundidade de 5 carrapatas).

 

Construir 1192. Windows 10 x32.

Preliminarmente, a pasta do histórico de tick do servidor MetaQuotes-Demo foi completamente apagada. Usando indicador

//+------------------------------------------------------------------+
//|                                                         test.mq5 |
//|                        Copyright 2015, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property indicator_chart_window
#property indicator_plots 0
//--- input parameter
input int   InpShowTicks=500;    // клубина истории тиков
//--- parameters
MqlTick     arr_mql_tick[];      // массив структур хранящий тики
bool        bingo=false;         // false - скачано тиков меньше запрошенного
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit()
  {
   Comment("");
   ResetLastError();
//--- новый размер массива структур тиков
   if(ArrayResize(arr_mql_tick,InpShowTicks)==-1)
     {
      Print("Error OnInit #1",GetLastError());
      return(INIT_FAILED);
     }
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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[])
  {
   static int count;
   string text="";
   if(bingo)
      return(rates_total);
   int copied=CopyTicks(_Symbol,arr_mql_tick,COPY_TICKS_INFO,0,InpShowTicks);
   if(copied==InpShowTicks)
      bingo=true;
   text="Запрошено "+IntegerToString(InpShowTicks)+" тиков, скачано "+IntegerToString(copied);
   Comment(text);
   count++;
   return(rates_total);
  }
//+------------------------------------------------------------------+

Verifiquei o download de carrapatos. Para alguns instrumentos, 500 ticks são baixados no primeiro ou segundo tick e eles não baixam mais de 200 Kb (eu simplesmente arrasto e solto ferramentas do Market Watch em um gráfico).

Mas em alguns instrumentos acontecem milagres: a história dos carrapatos não quer me dar 500 carrapatos necessários, mas o terminal descarrega cerca de 20 Mb de história (história por 10 e 9 meses).

Arquivos anexados:
test.mq5  3 kb