Работа с тиками в MT5

 

Разбираясь с тонкостями поступления тиков в терминале, при обработке события OnTick() обратил внимание на то, что:

1. событие OnTick() может вызываться без появления нового тика (то есть появляется абсолютно идентичная предыдущей запись),

2. если в тике произошло изменение цены bid или ask, тик приходит дважды, сначала с флагами TICK_FLAG_LAST, TICK_FLAG_VOLUME, а потом с флагами соответственно TICK_FLAG_BID или TICK_FLAG_ASK. Время поступления тика совпадает до миллисекунды (ну, может отличаться на 1 миллисекунду).

 Ниже приведен код и содержание лога:

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   int received = CopyTicks(Symbol1, LastTicksArray, COPY_TICKS_ALL, 0, 5);
   if(received == -1)
     {
      ResetLastError();
      Print("Ticks are not available, error = ", GetLastError());
     }
   else
      {
       printf(" ");
       for(int t = 0; t < 5; t++)
         {
          string flags;
          flags += (LastTicksArray[t].flags & TICK_FLAG_BID)    == TICK_FLAG_BID    ? "TICK_FLAG_BID, "    : " ,";
          flags += (LastTicksArray[t].flags & TICK_FLAG_ASK)    == TICK_FLAG_ASK    ? "TICK_FLAG_ASK, "    : " ,";
          flags += (LastTicksArray[t].flags & TICK_FLAG_LAST)   == TICK_FLAG_LAST   ? "TICK_FLAG_LAST, "   : " ,";
          flags += (LastTicksArray[t].flags & TICK_FLAG_VOLUME) == TICK_FLAG_VOLUME ? "TICK_FLAG_VOLUME, " : " ,";
          flags += (LastTicksArray[t].flags & TICK_FLAG_BUY)    == TICK_FLAG_BUY    ? "TICK_FLAG_BUY, "    : " ,";
          flags += (LastTicksArray[t].flags & TICK_FLAG_SELL)   == TICK_FLAG_SELL   ? "TICK_FLAG_SELL, "   : " ,";
          PrintFormat("Last tick time = %lld, Bid = %.5f, Ask = %.5f, Tick flag = %s", LastTicksArray[t].time_msc, LastTicksArray[t].bid, LastTicksArray[t].ask, flags);
         }
      }
  }

Функция копирует пять последних поступивших тиков в массив и выводит в лог скопированную группу из пяти тиков с указанием времени поступления тика (в мс), цены bid и ask, а также флагов тика.

В логе ниже тики сгруппированы группами по пять. Каждая группа - это поступление нового события OnTick().

Видно, что некоторые группы ничем не отличаются (кроме времени записи в логе - первый столбец), однако если в группе есть тик с изменением цен, он приходит два раза (с тем же временем в мс), первый раз с флагами LAST/VOLUME, второй раз с флагом BID или ASK. 

Запись лога (желтым выделены изменившиеся цены, красным - совпадающее время тиков, зеленым - мои комментарии, вставленные мной позже):

Time     Last tick time (ms)                             Bid             Ask             TICK_FLAG_BID   TICK_FLAG_ASK     TICK_FLAG_LAST   TICK_FLAG_VOLUME
                                                        
2016.12.29 22:42:25.765 Last tick time = 1483054941883   Bid = 0.85524   Ask = 0.85540                   TICK_FLAG_ASK            
2016.12.29 22:42:25.765 Last tick time = 1483054942394   Bid = 0.85524   Ask = 0.85540                                     TICK_FLAG_LAST   TICK_FLAG_VOLUME
2016.12.29 22:42:25.765 Last tick time = 1483054946079   Bid = 0.85524   Ask = 0.85540                                     TICK_FLAG_LAST   TICK_FLAG_VOLUME
2016.12.29 22:42:25.765 Last tick time = 1483054947647   Bid = 0.85524   Ask = 0.85540                                     TICK_FLAG_LAST   TICK_FLAG_VOLUME
2016.12.29 22:42:25.765 Last tick time = 1483054947647   Bid = 0.85522   Ask = 0.85540   TICK_FLAG_BID                  
через 15 мс новое событие OnTick() записывает ту же самую последовательность из пяти тиков без каких-то изменений                                                     
2016.12.29 22:42:26.780 Last tick time = 1483054941883   Bid = 0.85524   Ask = 0.85540                   TICK_FLAG_ASK            
2016.12.29 22:42:26.780 Last tick time = 1483054942394   Bid = 0.85524   Ask = 0.85540                                     TICK_FLAG_LAST   TICK_FLAG_VOLUME
2016.12.29 22:42:26.780 Last tick time = 1483054946079   Bid = 0.85524   Ask = 0.85540                                     TICK_FLAG_LAST   TICK_FLAG_VOLUME
2016.12.29 22:42:26.780 Last tick time = 1483054947647   Bid = 0.85524   Ask = 0.85540                                     TICK_FLAG_LAST   TICK_FLAG_VOLUME
2016.12.29 22:42:26.780 Last tick time = 1483054947647   Bid = 0.85522   Ask = 0.85540   TICK_FLAG_BID                  
Через 68 мс еще раз та же последовательность                                                        
2016.12.29 22:42:26.848 Last tick time = 1483054941883   Bid = 0.85524   Ask = 0.85540                   TICK_FLAG_ASK            
2016.12.29 22:42:26.848 Last tick time = 1483054942394   Bid = 0.85524   Ask = 0.85540                                     TICK_FLAG_LAST   TICK_FLAG_VOLUME
2016.12.29 22:42:26.848 Last tick time = 1483054946079   Bid = 0.85524   Ask = 0.85540                                     TICK_FLAG_LAST   TICK_FLAG_VOLUME
2016.12.29 22:42:26.848 Last tick time = 1483054947647   Bid = 0.85524   Ask = 0.85540                                     TICK_FLAG_LAST   TICK_FLAG_VOLUME
2016.12.29 22:42:26.848 Last tick time = 1483054947647   Bid = 0.85522   Ask = 0.85540   TICK_FLAG_BID                  
Видно, что каждому изменению bid или ask предшествует тик с тем же временем поступления и флагами LAST / VOLUME                                                        
2016.12.29 22:42:28.068 Last tick time = 1483054947647   Bid = 0.85522   Ask = 0.85540   TICK_FLAG_BID                  
2016.12.29 22:42:28.068 Last tick time = 1483054949817   Bid = 0.85522   Ask = 0.85540                                     TICK_FLAG_LAST   TICK_FLAG_VOLUME
2016.12.29 22:42:28.068 Last tick time = 1483054949817   Bid = 0.85521   Ask = 0.85541   TICK_FLAG_BID   TICK_FLAG_ASK          
2016.12.29 22:42:28.068 Last tick time = 1483054950187   Bid = 0.85521   Ask = 0.85541                                     TICK_FLAG_LAST   TICK_FLAG_VOLUME
2016.12.29 22:42:28.068 Last tick time = 1483054950187   Bid = 0.85523   Ask = 0.85540   TICK_FLAG_BID   TICK_FLAG_ASK          
                                                        
2016.12.29 22:42:29.924 Last tick time = 1483054950353   Bid = 0.85522   Ask = 0.85540   TICK_FLAG_BID                  
2016.12.29 22:42:29.924 Last tick time = 1483054951017   Bid = 0.85522   Ask = 0.85540                                     TICK_FLAG_LAST   TICK_FLAG_VOLUME
2016.12.29 22:42:29.924 Last tick time = 1483054951017   Bid = 0.85523   Ask = 0.85540   TICK_FLAG_BID                  
2016.12.29 22:42:29.924 Last tick time = 1483054951120   Bid = 0.85523   Ask = 0.85540                                     TICK_FLAG_LAST   TICK_FLAG_VOLUME
2016.12.29 22:42:29.924 Last tick time = 1483054951120   Bid = 0.85522   Ask = 0.85540   TICK_FLAG_BID                  
                                                        
2016.12.29 22:42:33.632 Last tick time = 1483054952798   Bid = 0.85524   Ask = 0.85541                   TICK_FLAG_ASK            
2016.12.29 22:42:33.632 Last tick time = 1483054953143   Bid = 0.85524   Ask = 0.85541                                     TICK_FLAG_LAST   TICK_FLAG_VOLUME
2016.12.29 22:42:33.632 Last tick time = 1483054953144   Bid = 0.85525   Ask = 0.85541   TICK_FLAG_BID                  
2016.12.29 22:42:33.632 Last tick time = 1483054955026   Bid = 0.85525   Ask = 0.85541                                     TICK_FLAG_LAST   TICK_FLAG_VOLUME
2016.12.29 22:42:33.632 Last tick time = 1483054955026   Bid = 0.85525   Ask = 0.85542                   TICK_FLAG_ASK            
И снова последовательность полностью повторилась.                                                        
2016.12.29 22:42:33.734 Last tick time = 1483054952798   Bid = 0.85524   Ask = 0.85541                   TICK_FLAG_ASK            
2016.12.29 22:42:33.734 Last tick time = 1483054953143   Bid = 0.85524   Ask = 0.85541                                     TICK_FLAG_LAST   TICK_FLAG_VOLUME
2016.12.29 22:42:33.734 Last tick time = 1483054953144   Bid = 0.85525   Ask = 0.85541   TICK_FLAG_BID                  
2016.12.29 22:42:33.734 Last tick time = 1483054955026   Bid = 0.85525   Ask = 0.85541                                     TICK_FLAG_LAST   TICK_FLAG_VOLUME
2016.12.29 22:42:33.734 Last tick time = 1483054955026   Bid = 0.85525   Ask = 0.85542                   TICK_FLAG_ASK            
                                                        
2016.12.29 22:42:35.461 Last tick time = 1483054952798   Bid = 0.85524   Ask = 0.85541                   TICK_FLAG_ASK            
2016.12.29 22:42:35.461 Last tick time = 1483054953143   Bid = 0.85524   Ask = 0.85541                                     TICK_FLAG_LAST   TICK_FLAG_VOLUME
2016.12.29 22:42:35.461 Last tick time = 1483054953144   Bid = 0.85525   Ask = 0.85541   TICK_FLAG_BID                  
2016.12.29 22:42:35.461 Last tick time = 1483054955026   Bid = 0.85525   Ask = 0.85541                                     TICK_FLAG_LAST   TICK_FLAG_VOLUME
2016.12.29 22:42:35.461 Last tick time = 1483054955026   Bid = 0.85525   Ask = 0.85542                   TICK_FLAG_ASK            
                                                        
2016.12.29 22:42:39.853 Last tick time = 1483054953144   Bid = 0.85525   Ask = 0.85541   TICK_FLAG_BID                  
2016.12.29 22:42:39.853 Last tick time = 1483054955026   Bid = 0.85525   Ask = 0.85541                                     TICK_FLAG_LAST   TICK_FLAG_VOLUME
2016.12.29 22:42:39.853 Last tick time = 1483054955026   Bid = 0.85525   Ask = 0.85542                   TICK_FLAG_ASK            
2016.12.29 22:42:39.853 Last tick time = 1483054959766   Bid = 0.85525   Ask = 0.85542                                     TICK_FLAG_LAST   TICK_FLAG_VOLUME
2016.12.29 22:42:39.853 Last tick time = 1483054959766   Bid = 0.85524   Ask = 0.85541   TICK_FLAG_BID   TICK_FLAG_ASK          
повторный приход последовательности                                                        
2016.12.29 22:42:40.354 Last tick time = 1483054953144   Bid = 0.85525   Ask = 0.85541   TICK_FLAG_BID                  
2016.12.29 22:42:40.354 Last tick time = 1483054955026   Bid = 0.85525   Ask = 0.85541                                     TICK_FLAG_LAST   TICK_FLAG_VOLUME
2016.12.29 22:42:40.354 Last tick time = 1483054955026   Bid = 0.85525   Ask = 0.85542                   TICK_FLAG_ASK            
2016.12.29 22:42:40.354 Last tick time = 1483054959766   Bid = 0.85525   Ask = 0.85542                                     TICK_FLAG_LAST   TICK_FLAG_VOLUME
2016.12.29 22:42:40.354 Last tick time = 1483054959766   Bid = 0.85524   Ask = 0.85541   TICK_FLAG_BID   TICK_FLAG_ASK          
повторный приход последовательности                                                        
2016.12.29 22:42:40.462 Last tick time = 1483054953144   Bid = 0.85525   Ask = 0.85541   TICK_FLAG_BID                  
2016.12.29 22:42:40.462 Last tick time = 1483054955026   Bid = 0.85525   Ask = 0.85541                                     TICK_FLAG_LAST   TICK_FLAG_VOLUME
2016.12.29 22:42:40.462 Last tick time = 1483054955026   Bid = 0.85525   Ask = 0.85542                   TICK_FLAG_ASK            
2016.12.29 22:42:40.462 Last tick time = 1483054959766   Bid = 0.85525   Ask = 0.85542                                     TICK_FLAG_LAST   TICK_FLAG_VOLUME
2016.12.29 22:42:40.462 Last tick time = 1483054959766   Bid = 0.85524   Ask = 0.85541   TICK_FLAG_BID   TICK_FLAG_ASK          
повторный приход последовательности                                                        
2016.12.29 22:42:40.613 Last tick time = 1483054953144   Bid = 0.85525   Ask = 0.85541   TICK_FLAG_BID                  
2016.12.29 22:42:40.613 Last tick time = 1483054955026   Bid = 0.85525   Ask = 0.85541                                     TICK_FLAG_LAST   TICK_FLAG_VOLUME
2016.12.29 22:42:40.613 Last tick time = 1483054955026   Bid = 0.85525   Ask = 0.85542                   TICK_FLAG_ASK            
2016.12.29 22:42:40.613 Last tick time = 1483054959766   Bid = 0.85525   Ask = 0.85542                                     TICK_FLAG_LAST   TICK_FLAG_VOLUME
2016.12.29 22:42:40.613 Last tick time = 1483054959766   Bid = 0.85524   Ask = 0.85541   TICK_FLAG_BID   TICK_FLAG_ASK          
                                                        
2016.12.29 22:42:47.082 Last tick time = 1483054963870   Bid = 0.85526   Ask = 0.85543                                     TICK_FLAG_LAST   TICK_FLAG_VOLUME
2016.12.29 22:42:47.082 Last tick time = 1483054963870   Bid = 0.85525   Ask = 0.85543   TICK_FLAG_BID                  
2016.12.29 22:42:47.082 Last tick time = 1483054965046   Bid = 0.85525   Ask = 0.85543                                     TICK_FLAG_LAST   TICK_FLAG_VOLUME
2016.12.29 22:42:47.082 Last tick time = 1483054965088   Bid = 0.85525   Ask = 0.85543                                     TICK_FLAG_LAST   TICK_FLAG_VOLUME
2016.12.29 22:42:47.082 Last tick time = 1483054965088   Bid = 0.85526   Ask = 0.85543   TICK_FLAG_BID                  

Кто-то разбирался с этой фантасмагорией? Что здесь реальные тики, а что фейки? Какие тики учитывать при расчете средних и скользящих значений, а какие нет?
 

 
первый раз вижу тики с одинаковым временем  миллисек  (хотя с тики давно не просматривал и как только появился OnTick() глюков хватало со временем и флагами ) , весьма интересно ! а на демке или реале,срочный рынок или форекс  ? возможно билд или поставщик тиков косячит . время будет проверю у себя.
 
Oleg Shenker:

Кто-то разбирался с этой фантасмагорией? Что здесь реальные тики, а что фейки? Какие тики учитывать при расчете средних и скользящих значений, а какие нет? 

В OnTick ту же EMA рассчитывать ни в коем случае нельзя. Используйте CopyTicks, сделав семафор на появление нового тика.
 
fxsaber:
В OnTick ту же EMA рассчитывать ни в коем случае нельзя. Используйте CopyTicks, сделав семафор на появление нового тика.

Нашел случайно инфу в тему https://www.mql5.com/ru/forum/23/page18

fxsaber, это я не вам, понятное дело, а для ТС почитать. 

Смотрите пункт 10 по билду 1035 

--------

MQL5: Добавлена функция работы с тиковой историей CopyTicks. Функция позволяет получить массив тиков, накопленных терминалом за текущую рабочую сессию. Глубина получаемых тиков ограничена последними 2 000.

Новая функция расширяет возможности написания скальперских торговых роботов. Функция OnTick не является обработчиком каждого тика, она уведомляет эксперта об изменениях на рынке. Изменения могут быть пакетными: в терминал может одновременно прийти несколько тиков, но функция OnTick будет вызвана лишь один раз для уведомления эксперта о последнем состоянии рынка. Функция CopyTicks позволяет получать и анализировать все пришедшие тики. 

Список изменений в билдах MetaTrader 5 Client Terminal
Список изменений в билдах MetaTrader 5 Client Terminal
  • www.mql5.com
Автоматическое обновление доступно через систему LiveUpdate:.
 
dimka8:
первый раз вижу тики с одинаковым временем  миллисек  (хотя с тики давно не просматривал и как только появился OnTick() глюков хватало со временем и флагами ) , весьма интересно ! а на демке или реале,срочный рынок или форекс  ? возможно билд или поставщик тиков косячит . время будет проверю у себя.

На демке, естественно. На форекс. EURGBP.Я же говорю, разбираюсь с тем, как работают тики. Пытался сделать индикатор, считающий накопленный объем, столкнулся с тем, что приходят по несколько тиков с одним временем.

Но MQ ни за что не признается, что это приходят одни и те же тики, просто с разными флагами. Просто не пишут они флаги BID/ASK вместе с флагами VOLUME/ASK. Присылают еще один тик. То есть, событие OnTick вызвано два раза одним и тем же тиком. 

 
Alexey Volchanskiy:

Нашел случайно инфу в тему https://www.mql5.com/ru/forum/23/page18

fxsaber, это я не вам, понятное дело, а для ТС почитать. 

Смотрите пункт 10 по билду 1035 

--------

MQL5: Добавлена функция работы с тиковой историей CopyTicks. Функция позволяет получить массив тиков, накопленных терминалом за текущую рабочую сессию. Глубина получаемых тиков ограничена последними 2 000.

Новая функция расширяет возможности написания скальперских торговых роботов. Функция OnTick не является обработчиком каждого тика, она уведомляет эксперта об изменениях на рынке. Изменения могут быть пакетными: в терминал может одновременно прийти несколько тиков, но функция OnTick будет вызвана лишь один раз для уведомления эксперта о последнем состоянии рынка. Функция CopyTicks позволяет получать и анализировать все пришедшие тики. 

То же самое сказано в документации, в описании функции CopyTicks. Пакет тиков объясняет, почему загрузка одного последнего тика приводит к исчезновению ряда тиков, которые видны при пакетной загрузке. То есть, если я делаю CopyTicks(_Symbol, LastTickArray, COPY_TICK_ALL, 0, 1), то я вижу лишь часть тиков, которые я увижу, использовав функцию  CopyTicks(_Symbol, LastTickArray, COPY_TICK_ALL, 0, 5).

Лог ниже заполнялся последними тиками, копируемыми функцией  CopyTicks(_Symbol, LastTickArray, COPY_TICK_ALL, 0, 1). То есть, по одному последнему тику с каждым приходом события OnTick().

Log-Date/Time           Tick    Last tick time (ms)     Bid     Ask      TICK_FLAG_BID   TICK_FLAG_ASK   TICK_FLAG_LAST  TICK_FLAG_VOLUME
                        Number  
2016.12.30 22:35:26.238 1       1,483,140,926,005       0.85342 0.85372                  TICK_FLAG_ASK          
2016.12.30 22:35:43.253 1       1,483,140,940,986       0.85333 0.85365                  TICK_FLAG_ASK          
2016.12.30 22:35:43.294 1       1,483,140,940,986       0.85333 0.85365                  TICK_FLAG_ASK          
2016.12.30 22:35:43.386 1       1,483,140,940,986       0.85333 0.85365                  TICK_FLAG_ASK          
2016.12.30 22:35:43.599 1       1,483,140,946,198       0.85324 0.85360  TICK_FLAG_BID                  

У выделенных тиков, очевидно, изменились и цена bid и цена ask. Однако, в первом случае стоит только флаг TICK_FLAG_ASK, а во тором случае только флаг TICK_FLAG_BID. Невольно задумаешься - какая-то путаница с флагами. Ан нет. Просто в последовательности пропущены тики.

Попробуем теперь загружать тики функцией CopyTicks(_Symbol, LastTickArray, COPY_TICK_ALL, 0, 4), то есть четыре последних тиков с каждым запуском хендлера события OnTick().

(серым цветом выделена новая последовательность из четырех тиков от другой, то есть - новое событие OnTick()) 

Log-Date/time           Tick    Last tick time (ms)     Bid     Ask      TICK_FLAG_BID   TICK_FLAG_ASK   TICK_FLAG_LAST  TICK_FLAG_VOLUME
                        Number
2016.12.30 22:57:39.425 1       1,483,142,260,517       0.72004 0.72059                                  TICK_FLAG_LAST  TICK_FLAG_VOLUME
2016.12.30 22:57:39.425 2       1,483,142,260,767       0.72004 0.72059                                  TICK_FLAG_LAST  TICK_FLAG_VOLUME
2016.12.30 22:57:39.425 3       1,483,142,261,023       0.72004 0.72059                                  TICK_FLAG_LAST  TICK_FLAG_VOLUME
2016.12.30 22:57:39.425 4       1,483,142,262,029       0.72006 0.72062  TICK_FLAG_BID   TICK_FLAG_ASK                                             
2016.12.30 22:57:39.684 1       1,483,142,261,023       0.72004 0.72059                                  TICK_FLAG_LAST  TICK_FLAG_VOLUME
2016.12.30 22:57:39.684 2       1,483,142,262,029       0.72006 0.72062  TICK_FLAG_BID   TICK_FLAG_ASK                                   
2016.12.30 22:57:39.684 3       1,483,142,262,283       0.72006 0.72062                                  TICK_FLAG_LAST  TICK_FLAG_VOLUME

2016.12.30 22:57:39.684 4       1,483,142,262,284       0.72006 0.72059                  TICK_FLAG_ASK                                   

Видно, что теперь путаницы с флагами нет. Флаги точно указывают, изменилась ли цена bid, цена ask или обе сразу.

Понятно, что если бы эти тики копировались по одному, то в логе присутствовали бы только тики номер 4.

То, есть при ближайшем рассмотрении действительно становится понятно, что тики приходят пакетами, и при копировании по одному, в лог будет попадать только последний. Тут вопросов нет.

Но вот какой вопрос остается.

Последовательность скопированных тиков может полностью повторяться в нескольких последовательно пришедших событиях OnTick(). То есть, нового тика может не быть вовсе, а событие OnTick() будет запущено, как в примере на самом верху, который я воспроизвел ниже.

Пожалуйста, три раза распечатана одна и та же последовательность тиков. То есть, функция CopyTicks() не скопировала ни одного нового тика. 

Log Time                Last tick time (ms)              Bid             Ask             TICK_FLAG_BID   TICK_FLAG_ASK          TICK_FLAG_LAST   TICK_FLAG_VOLUME
                                                        
2016.12.29 22:42:25.765 Last tick time = 1483054941883   Bid = 0.85524   Ask = 0.85540                   TICK_FLAG_ASK            
2016.12.29 22:42:25.765 Last tick time = 1483054942394   Bid = 0.85524   Ask = 0.85540                                          TICK_FLAG_LAST   TICK_FLAG_VOLUME
2016.12.29 22:42:25.765 Last tick time = 1483054946079   Bid = 0.85524   Ask = 0.85540                                          TICK_FLAG_LAST   TICK_FLAG_VOLUME
2016.12.29 22:42:25.765 Last tick time = 1483054947647   Bid = 0.85524   Ask = 0.85540                                          TICK_FLAG_LAST   TICK_FLAG_VOLUME
2016.12.29 22:42:25.765 Last tick time = 1483054947647   Bid = 0.85522   Ask = 0.85540   TICK_FLAG_BID                  
                                                
2016.12.29 22:42:26.780 Last tick time = 1483054941883   Bid = 0.85524   Ask = 0.85540                   TICK_FLAG_ASK            
2016.12.29 22:42:26.780 Last tick time = 1483054942394   Bid = 0.85524   Ask = 0.85540                                          TICK_FLAG_LAST   TICK_FLAG_VOLUME
2016.12.29 22:42:26.780 Last tick time = 1483054946079   Bid = 0.85524   Ask = 0.85540                                          TICK_FLAG_LAST   TICK_FLAG_VOLUME
2016.12.29 22:42:26.780 Last tick time = 1483054947647   Bid = 0.85524   Ask = 0.85540                                          TICK_FLAG_LAST   TICK_FLAG_VOLUME
2016.12.29 22:42:26.780 Last tick time = 1483054947647   Bid = 0.85522   Ask = 0.85540   TICK_FLAG_BID                  
                                                      
2016.12.29 22:42:26.848 Last tick time = 1483054941883   Bid = 0.85524   Ask = 0.85540                   TICK_FLAG_ASK            
2016.12.29 22:42:26.848 Last tick time = 1483054942394   Bid = 0.85524   Ask = 0.85540                                          TICK_FLAG_LAST   TICK_FLAG_VOLUME
2016.12.29 22:42:26.848 Last tick time = 1483054946079   Bid = 0.85524   Ask = 0.85540                                          TICK_FLAG_LAST   TICK_FLAG_VOLUME
2016.12.29 22:42:26.848 Last tick time = 1483054947647   Bid = 0.85524   Ask = 0.85540                                          TICK_FLAG_LAST   TICK_FLAG_VOLUME
2016.12.29 22:42:26.848 Last tick time = 1483054947647   Bid = 0.85522   Ask = 0.85540   TICK_FLAG_BID                  


 


 


 

 
Oleg Shenker:

Но вот какой вопрос остается.

Не увидел вопроса.
 
fxsaber:
Не увидел вопроса.
Вопрос-проблема. Как или почему событие OnTick() вызывается без прихода нового тика.
 
Oleg Shenker:
Вопрос-проблема. Как или почему событие OnTick() вызывается без прихода нового тика.

SymbolInfoTick и CopyTicks, вызванные в самом начале OnTick могут отставать и опережать тик очередного пакета, который инициировал событие Tick.

Т.е. OnTick вызывается по приходу нового тика, но в том же CopyTicks может не быть этой инфы еще. Или же в нем может быть инфа даже о тиках, которые появились позже. 

 
fxsaber:

SymbolInfoTick и CopyTicks, вызванные в самом начале OnTick могут отставать и опережать тик очередного пакета, который инициировал событие Tick.

Т.е. OnTick вызывается по приходу нового тика, но в том же CopyTicks может не быть этой инфы еще. Или же в нем может быть инфа даже о тиках, которые появились позже. 

Как вы себе это представляете? Тик пришел, событие вызвано, а инфы еще нет? Тогда что пришло?
 
Oleg Shenker:
Как вы себе это представляете? Тик пришел, событие вызвано, а инфы еще нет? Тогда что пришло?
CopyTicks даже переписывается задним числом (несколько мс назад) на бирже. Это все очень подробно обсуждалось в соответствующей ветке. Бага в этом нет.