Tiki in Echtzeit - Seite 12

 
Sergey Chalyshev:

Ich möchte Sie daran erinnern, dass OnTick zwei unabhängige Threads, Information und Handel,COPY_TICKS_INFO und COPY_TICKS_ALL erhält und einer Vorverarbeitung unterzogen wird .

Diese Threads sind nicht miteinander synchronisiert, wenn Sie also OnBookEvent mit OnTick vergleichen, sollten SieTICKS_INFO nehmen.

Per Definition sollte OnBookEvent schneller sein, da es keine Vorverarbeitung durchläuft.

Mit den Tests lässt sich nicht zuverlässig feststellen, wer schneller ist, denn im Gegensatz zu Zecken kennen wir die Lagerzeit einer Zecke nicht.

Obwohl wir die Entwickler schon oft gebeten haben, STOCK TIME! ! !


p.s. Neben der Geschwindigkeit hat tumblr auch Vorteile gegenüber OnTick,

Wie bereits erwähnt, ist es nicht möglich, bessere Geld- und Briefkurse in OnTick zu erhalten,

undOnTick keine Daten von anderen Symbolen hat, ist es für Expert Advisors, die mehrere Symbole analysieren, nutzlos.


COPY_TICKS_ALL geändertinCOPY_TICKS_INFO

Ergebnis

2020.01.31 19:45:17.893 Ticks_test (GOLD-3.20,M1)       OnTick: 2020.01.31 19:45:11.360 Ask=1591.4 
2020.01.31 19:45:17.894 Ticks_test (GOLD-3.20,M1)       OnBookEvent: 2020.01.31 19:45:09.384 Ask=1591.3 
2020.01.31 19:45:17.973 Ticks_test (GOLD-3.20,M1)       OnTick: 2020.01.31 19:45:11.570 Ask=1591.1 
2020.01.31 19:45:17.973 Ticks_test (GOLD-3.20,M1)       OnBookEvent: 2020.01.31 19:45:09.384 Ask=1591.3 
2020.01.31 19:45:18.060 Ticks_test (GOLD-3.20,M1)       OnBookEvent: 2020.01.31 19:45:09.384 Ask=1591.3 
2020.01.31 19:45:18.077 Ticks_test (GOLD-3.20,M1)       OnTick: 2020.01.31 19:45:11.712 Bid=1591.4 
2020.01.31 19:45:18.077 Ticks_test (GOLD-3.20,M1)       OnTick: 2020.01.31 19:45:11.712 Bid=1591.4 
2020.01.31 19:45:18.078 Ticks_test (GOLD-3.20,M1)       OnBookEvent: 2020.01.31 19:45:09.384 Ask=1591.3 
2020.01.31 19:45:18.356 Ticks_test (GOLD-3.20,M1)       OnBookEvent: 2020.01.31 19:45:10.574 Ask=1591.2 
2020.01.31 19:45:18.356 Ticks_test (GOLD-3.20,M1)       OnBookEvent: 2020.01.31 19:45:10.742 Bid=1591.2 
2020.01.31 19:45:18.356 Ticks_test (GOLD-3.20,M1)       OnBookEvent: 2020.01.31 19:45:11.360 Ask=1591.4 
2020.01.31 19:45:18.356 Ticks_test (GOLD-3.20,M1)       OnBookEvent: 2020.01.31 19:45:11.570 Ask=1591.1 
2020.01.31 19:45:18.356 Ticks_test (GOLD-3.20,M1)       OnBookEvent: 2020.01.31 19:45:11.570 Ask=1591.4 
2020.01.31 19:45:18.356 Ticks_test (GOLD-3.20,M1)       OnBookEvent: 2020.01.31 19:45:11.712 Bid=1591.4 
2020.01.31 19:45:18.356 Ticks_test (GOLD-3.20,M1)       OnBookEvent: 2020.01.31 19:45:11.712 Bid=1591.4 
2020.01.31 19:45:18.356 Ticks_test (GOLD-3.20,M1)       OnBookEvent: 2020.01.31 19:45:12.14 Ask=1591.2 

Gelbe Markierung - gleiche Zecke!

Wahrscheinlich gibt es doch eine Ungenauigkeit im Code...?
 

Eine Sekunde lang schien es, als wollten Sie die Dinge in Ordnung bringen, um Ihren Stolz zu zügeln.
Nein, es schien nur so.

Im Allgemeinen ist die Frage gelöst, und jeder kann sich Ihre, fxsabers und meine Codes ansehen und Schlussfolgerungen ziehen.
Mit Ihnen stelle ich den Dialog ein, es kommt nichts außer lautem Geschrei von Ihnen, und auf den Empfang der Information arbeitet Ihr Gehirn überhaupt nicht.

Viel Glück bei FORTS.

 
Sergey Chalyshev:

Ich möchte Sie daran erinnern, dass OnTick zwei unabhängige Threads, Information und Handel,COPY_TICKS_INFO und COPY_TICKS_ALL erhält und einer Vorverarbeitung unterzogen wird .

Diese Threads sind nicht miteinander synchronisiert, wenn Sie also OnBookEvent mit OnTick vergleichen, sollten SieTICKS_INFO nehmen.

Sergei, wir verwenden On-Funktionen einfach als Einstiegspunkt.

Die Frage war, welcher Einstiegspunkt zuerst kommen würde (und dabei die gleichen korrekten Informationen über den letzten Tick liefert).

Führen Sie meinen EA aus, und sehen Sie sich das Protokoll an. Der Zeitpunkt des Ereignisses (auf ms genau) und der Zeitpunkt des letzten bekannten Ticks (ebenfalls mit ms) werden im Protokoll ausgegeben.

Analysieren Sie einfach ein paar einzelne Häkchen, um festzustellen, "wer am frühesten dran ist".


Sergey Chalyshev:

OnBookEvent sollte per Definition schneller sein, da es keine Vorverarbeitung durchlaufen muss.

Ich glaube nicht, dass OnTick das tut. Und die Tests bestätigen es, es gibt keine Verzögerung.


Sergey Chalyshev:

Wie bereits gesagt, ist es unmöglich, einen besseren Bid- und Ask-Preis in OnTick zu erhalten.

Möglicherweise mit CopyTicks.

Тики в реальном времени
Тики в реальном времени
  • 2020.01.31
  • www.mql5.com
Всем доброго времени суток. Появилась необходимость протестировать торговый алгоритм на реальных тиках брокера "Открытие...
 
Andrey Khatimlianskii:

Führen Sie meinen EA aus, und sehen Sie sich das Protokoll an. Der Zeitpunkt des Ereignisses (auf ms genau) und der Zeitpunkt des letzten bekannten Ticks (ebenfalls auf ms genau) werden in das Protokoll ausgegeben.

Analysieren Sie einfach ein paar einzelne Häkchen, um festzustellen, "wer am frühesten dran ist".

Eine häufige Situation ist, wenn OnBook zur gleichen Zeit wie OnTick oder 1-2ms später kommt. Aber es gibt auch Verzögerungen:


 

In 5 Stunden:

2020.01.31 20:45:48.214 TestTicks (GOLD-3.20,M15)       63906 USE_BOOK events received
2020.01.31 20:45:52.782 TestTicks (GOLD-3.20,M15)       31199 USE_TICK events received

Doppelt so viele OnBook-Veranstaltungen. Schade, dass nicht alle von ihnen eine nützliche Last tragen (wenn bestes Gebot/Briefkurs und Flipper benötigt werden).

 
Andrey Khatimlianskii:

Sergey, wir verwenden die On-Funktionen einfach als Einstiegspunkt.

Die Frage war, welcher Einstiegspunkt zuerst kommen würde (und dabei die gleichen korrekten Informationen über den letzten Tick liefert).

Führen Sie meinen EA aus, und sehen Sie sich das Protokoll an. Der Zeitpunkt des Ereignisses (auf ms genau) und der Zeitpunkt des letzten bekannten Ticks (ebenfalls mit ms) werden im Protokoll ausgegeben.

Analysieren Sie einfach ein paar einzelne Häkchen, um festzustellen, wer der Früheste ist.

Sie machen es falsch. Vielleicht ist das Tumblr-Ereignis bereits eingetroffen, hat es aber noch nicht in die Zeckengeschichte geschafft. Sie sollten die Geld-Brief-Kurse vergleichen und nicht die Tick-Historie untersuchen.

Ich glaube nicht, dass OnTick sie besteht. Und die Tests bestätigen es, es gibt keine Verzögerung.

Vor der Eingabe in die Historie werden die Ticks notwendigerweise verarbeitet und auch an alle notwendigen Charts, Indikatoren und Expert Advisors verteilt. Und all dies geschieht in MT5 sequentiell (nicht parallel).

Vielleicht mit Hilfe von CopyTicks.

Nein, mitCopyTicks ist es auch unmöglich, den besten Preis zu bekommen, und was ist, wenn Ihre Bestellung am besten dasteht.
 

Просто проанализируйте несколько отдельных тиков на предмет "кто раньше".

Ich habe eine andere Art, Dinge zu tun:

Zecke vs. Buch

blaue Linien sind OnBook,

Die roten sind OnCalculat = OnTick.

Wenn Sie interessiert sind, kann ich Ihnen den Code zeigen

 
Sergey Chalyshev :

Ich verstehe das anders:


blaue Linien sind OnBook ,

roter OnTick .

Bei Interesse kann ich den Kennzeichencode zeigen

Nein Serezha!

Es muss zugegeben werden, dass OnBookEvent() und OnTick() alle Ticks gleich sind (ich hatte einen Fehler im Code),

aber andere DOM-Änderungen werden in OnTick() in keiner Weise widergespiegelt

Dies ist für FOREX-Händler nicht wichtig.(Vorsichtiges Zitat aus der obigen Meldung: „ Es gibt 2-mal mehr OnBook-Ereignisse. . )

Korrigierter Code:

 //+------------------------------------------------------------------+
//|                                                   Ticks_test.mq5 |
//|                                      Copyright 2019 prostotrader |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019 prostotrader"
#property link        "https://www.mql5.com"
#property version    "1.00"
//---
bool is_book;
MqlTick ticks[];
ulong last_time, mem_cnt, tot_cnt;
bool is_first;
int t_cnt, result;
enum ENUM_BOOK_OR_TICK
{
        USE_BOOK,       // Use OnBookEvent
        USE_TICK         // Use OnTick
};

input ENUM_BOOK_OR_TICK Mode = USE_BOOK;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
{
  tot_cnt = 0 ;
   if (Mode == USE_BOOK) is_book = MarketBookAdd ( Symbol ());
  result = CopyTicks ( Symbol (), ticks, COPY_TICKS_ALL , 0 , 1 );
   if (result > 0 )
  {
    last_time = ulong (ticks[ 0 ].time_msc); //запоминаем время последнего известного тика
    is_first = true ;
  }
   else
  {
    is_first = false ;
     Alert ( "No start time!" );
     return ( INIT_FAILED );
  } 
   ArraySetAsSeries (ticks, true );  
   return ( INIT_SUCCEEDED );
}
//+------------------------------------------------------------------+ 
//| возвращает строковое описание тика                               | 
//+------------------------------------------------------------------+ 
string GetTickDescription( MqlTick &tick) 
  { 
   string res = string (tick.time) + "." +   string (tick.time_msc% 1000 ); 
// 
   bool buy_tick = ((tick.flags& TICK_FLAG_BUY )== TICK_FLAG_BUY ); 
   bool sell_tick = ((tick.flags& TICK_FLAG_SELL )== TICK_FLAG_SELL ); 
   bool ask_tick = ((tick.flags& TICK_FLAG_ASK )== TICK_FLAG_ASK ); 
   bool bid_tick = ((tick.flags& TICK_FLAG_BID )== TICK_FLAG_BID ); 
   bool last_tick = ((tick.flags& TICK_FLAG_LAST )== TICK_FLAG_LAST ); 
   bool volume_tick = ((tick.flags& TICK_FLAG_VOLUME )== TICK_FLAG_VOLUME ); 
// 
   if ((buy_tick== true ) || (sell_tick == true )) 
   { 
     res = res + (buy_tick? StringFormat ( " Buy Tick: Last=%G Volume=%d " ,tick.last,tick.volume): "" ); 
     res = res + (sell_tick? StringFormat ( " Sell Tick: Last=%G Volume=%d " ,tick.last,tick.volume): "" ); 
     res = res + (ask_tick? StringFormat ( " Ask=%G " ,tick.ask): "" ); 
     res = res + (bid_tick? StringFormat ( " Bid=%G " ,tick.bid): "" ); 
   } 
   else 
   { 
     res = res + (ask_tick? StringFormat ( " Ask=%G " ,tick.ask): "" ); 
     res = res + (bid_tick? StringFormat ( " Bid=%G " ,tick.bid): "" ); 
     res = res + (last_tick? StringFormat ( " Last=%G " ,tick.last): "" ); 
     res = res + (volume_tick? StringFormat ( " Volume=%d " ,tick.volume): "" ); 
   } 
   return res; 
  } 
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
{
   if (Mode == USE_BOOK)
  {
     Print ( "USE_BOOK ticks received: " , tot_cnt);
     if (is_book == true ) MarketBookRelease ( Symbol ());
  }
   else
  {
     Print ( "USE_TICK ticks received: " , tot_cnt);
  }  
}
//+------------------------------------------------------------------+
//| BookEvent function                                               |
//+------------------------------------------------------------------+
void OnBookEvent ( const string &symbol)
{
   if ( Mode != USE_BOOK || symbol != Symbol () ) return ;
  tot_cnt++;
   if (is_first == true )
  {
    result = CopyTicks ( Symbol (), ticks, COPY_TICKS_ALL , last_time, 0 ); //копируем все вновь пришедшие тики от последнего известного времени
     if (result > 0 )
    {
      t_cnt = 0 ;
       for ( int i= 0 ; i<result; i++)
      {
         if (ticks[i].time_msc == ticks[ 0 ].time_msc) t_cnt++;             //Считаем кол-во тиков с одинаковым временем
         Print ( __FUNCTION__ , ": " ,GetTickDescription(ticks[i]));
      }
      is_first = false ;
      last_time = ulong (ticks[ 0 ].time_msc);                             //Запоминаем время последнего тика
    } 
  }
   else
  {
    result = CopyTicks ( Symbol (), ticks, COPY_TICKS_ALL , last_time, 0 ); //забираем тики из последнего (посчитанного пакета тикив и считываем тики из нового пакета)
     if (result > 0 )
    {
       if (result > t_cnt)
      {
        mem_cnt = t_cnt;
        t_cnt = 0 ;
         for ( int i= 0 ; i<(result - int (mem_cnt)); i++)
        {
           if (ticks[i].time_msc == ticks[ 0 ].time_msc) t_cnt++;           //Считаем кол-во тиков с одинаковым временем
           Print ( __FUNCTION__ , ": " ,GetTickDescription(ticks[i]));
        } 
         if (last_time == ulong (ticks[ 0 ].time_msc))
        {
          t_cnt += int (mem_cnt);
        }
         else last_time = ulong (ticks[ 0 ].time_msc);
      }
       else
      {
         Print ( __FUNCTION__ , ": Pending order!" );                           //Изменения стакана (добавлен/удален отложенный ордер)
      }
    }
     else
    {
       Print ( __FUNCTION__ , ": Pending order!" );                             //Изменения стакана (добавлен/удален отложенный ордер)
    }
  }
}
//+------------------------------------------------------------------+
//| OnTick function                                                  |
//+------------------------------------------------------------------+
void OnTick ()
{
   if ( Mode != USE_TICK ) return ;
  tot_cnt++;
   if (is_first == true )
  {
    result = CopyTicks ( Symbol (), ticks, COPY_TICKS_ALL , last_time, 0 ); //копируем все вновь пришедшие тики от последнего известного времени
     if (result > 0 )
    {
      t_cnt = 0 ;
       for ( int i= 0 ; i<result; i++)
      {
         if (ticks[i].time_msc == ticks[ 0 ].time_msc) t_cnt++;             //Считаем кол-во тиков с одинаковым временем
         Print ( __FUNCTION__ , ": " ,GetTickDescription(ticks[i]));
      }
      is_first = false ;
      last_time = ulong (ticks[ 0 ].time_msc);                             //Запоминаем время последнего тика
    } 
  }
   else
  {
    result = CopyTicks ( Symbol (), ticks, COPY_TICKS_ALL , last_time, 0 ); //забираем тики из последнего (посчитанного пакета тикив и считываем тики из нового пакета)
     if (result > 0 )
    {
       if (result > t_cnt)
      {
        mem_cnt = t_cnt;
        t_cnt = 0 ;
         for ( int i= 0 ; i<(result - int (mem_cnt)); i++)
        {
           if (ticks[i].time_msc == ticks[ 0 ].time_msc) t_cnt++;           //Считаем кол-во тиков с одинаковым временем
           Print ( __FUNCTION__ , ": " ,GetTickDescription(ticks[i]));
        } 
         if (last_time == ulong (ticks[ 0 ].time_msc))
        {
          t_cnt += int (mem_cnt);
        }
         else last_time = ulong (ticks[ 0 ].time_msc);
      }
       else
      {
         Print ( __FUNCTION__ , ": Pending order!" );                           //Изменения стакана (добавлен/удален отложенный ордер)
      }
    }
     else
    {
       Print ( __FUNCTION__ , ": Pending order!" );                           //Изменения стакана (добавлен/удален отложенный ордер)
    }
  }
}
//+------------------------------------------------------------------+
Результат (фрагмент)
 2020.01 . 31 23 : 35 : 24.092 Ticks_test (GOLD- 3.20 ,M1)       OnTick : 2020.01 . 31 23 : 35 : 17.571 Bid= 1593.7 
2020.01 . 31 23 : 35 : 24.093 Ticks_test (GOLD- 3.20 ,M1)       OnBookEvent : 2020.01 . 31 23 : 35 : 17.571 Bid= 1593.7 
2020.01 . 31 23 : 35 : 24.144 Ticks_test (GOLD- 3.20 ,M1)       OnBookEvent : Pending order!
2020.01 . 31 23 : 35 : 24.163 Ticks_test (GOLD- 3.20 ,M1)       OnBookEvent : Pending order!
2020.01 . 31 23 : 35 : 24.844 Ticks_test (GOLD- 3.20 ,M1)       OnBookEvent : Pending order!
2020.01 . 31 23 : 35 : 24.851 Ticks_test (GOLD- 3.20 ,M1)       OnBookEvent : Pending order!
2020.01 . 31 23 : 35 : 24.865 Ticks_test (GOLD- 3.20 ,M1)       OnBookEvent : Pending order!
2020.01 . 31 23 : 35 : 25.215 Ticks_test (GOLD- 3.20 ,M1)       OnBookEvent : Pending order!
2020.01 . 31 23 : 35 : 25.222 Ticks_test (GOLD- 3.20 ,M1)       OnBookEvent : Pending order!
2020.01 . 31 23 : 35 : 25.241 Ticks_test (GOLD- 3.20 ,M1)       OnBookEvent : Pending order!
2020.01 . 31 23 : 35 : 25.254 Ticks_test (GOLD- 3.20 ,M1)       OnBookEvent : Pending order!
2020.01 . 31 23 : 35 : 25.286 Ticks_test (GOLD- 3.20 ,M1)       OnBookEvent : Pending order!
2020.01 . 31 23 : 35 : 25.462 Ticks_test (GOLD- 3.20 ,M1)       OnBookEvent : Pending order!
2020.01 . 31 23 : 35 : 25.474 Ticks_test (GOLD- 3.20 ,M1)       OnBookEvent : Pending order!
2020.01 . 31 23 : 35 : 25.482 Ticks_test (GOLD- 3.20 ,M1)       OnBookEvent : Pending order!
2020.01 . 31 23 : 35 : 25.503 Ticks_test (GOLD- 3.20 ,M1)       OnBookEvent : Pending order!
2020.01 . 31 23 : 35 : 25.545 Ticks_test (GOLD- 3.20 ,M1)       OnBookEvent : Pending order!
2020.01 . 31 23 : 35 : 25.995 Ticks_test (GOLD- 3.20 ,M1)       OnBookEvent : Pending order!
2020.01 . 31 23 : 35 : 26.003 Ticks_test (GOLD- 3.20 ,M1)       OnTick : 2020.01 . 31 23 : 35 : 19.483 Buy Tick: Last= 1593.8 Volume= 1 
2020.01 . 31 23 : 35 : 26.003 Ticks_test (GOLD- 3.20 ,M1)       OnTick : 2020.01 . 31 23 : 35 : 19.483 Buy Tick: Last= 1593.8 Volume= 1 
2020.01 . 31 23 : 35 : 26.003 Ticks_test (GOLD- 3.20 ,M1)       OnTick : 2020.01 . 31 23 : 35 : 19.483 Buy Tick: Last= 1593.8 Volume= 1 
2020.01 . 31 23 : 35 : 26.003 Ticks_test (GOLD- 3.20 ,M1)       OnTick : 2020.01 . 31 23 : 35 : 19.483 Buy Tick: Last= 1593.8 Volume= 1 
2020.01 . 31 23 : 35 : 26.003 Ticks_test (GOLD- 3.20 ,M1)       OnTick : 2020.01 . 31 23 : 35 : 19.483 Buy Tick: Last= 1593.8 Volume= 1 
2020.01 . 31 23 : 35 : 26.003 Ticks_test (GOLD- 3.20 ,M1)       OnTick : 2020.01 . 31 23 : 35 : 19.483 Buy Tick: Last= 1593.8 Volume= 1 
2020.01 . 31 23 : 35 : 26.003 Ticks_test (GOLD- 3.20 ,M1)       OnTick : 2020.01 . 31 23 : 35 : 19.483 Buy Tick: Last= 1593.8 Volume= 1 
2020.01 . 31 23 : 35 : 26.004 Ticks_test (GOLD- 3.20 ,M1)       OnBookEvent : 2020.01 . 31 23 : 35 : 19.483 Buy Tick: Last= 1593.8 Volume= 1 
2020.01 . 31 23 : 35 : 26.004 Ticks_test (GOLD- 3.20 ,M1)       OnBookEvent : 2020.01 . 31 23 : 35 : 19.483 Buy Tick: Last= 1593.8 Volume= 1 
2020.01 . 31 23 : 35 : 26.004 Ticks_test (GOLD- 3.20 ,M1)       OnBookEvent : 2020.01 . 31 23 : 35 : 19.483 Buy Tick: Last= 1593.8 Volume= 1 
2020.01 . 31 23 : 35 : 26.004 Ticks_test (GOLD- 3.20 ,M1)       OnBookEvent : 2020.01 . 31 23 : 35 : 19.483 Buy Tick: Last= 1593.8 Volume= 1 
2020.01 . 31 23 : 35 : 26.004 Ticks_test (GOLD- 3.20 ,M1)       OnBookEvent : 2020.01 . 31 23 : 35 : 19.483 Buy Tick: Last= 1593.8 Volume= 1 
2020.01 . 31 23 : 35 : 26.004 Ticks_test (GOLD- 3.20 ,M1)       OnBookEvent : 2020.01 . 31 23 : 35 : 19.483 Buy Tick: Last= 1593.8 Volume= 1 
2020.01 . 31 23 : 35 : 26.004 Ticks_test (GOLD- 3.20 ,M1)       OnBookEvent : 2020.01 . 31 23 : 35 : 19.483 Buy Tick: Last= 1593.8 Volume= 1 
2020.01 . 31 23 : 35 : 26.011 Ticks_test (GOLD- 3.20 ,M1)       OnTick : 2020.01 . 31 23 : 35 : 19.484 Ask= 1593.9   Bid= 1593.8 
2020.01 . 31 23 : 35 : 26.012 Ticks_test (GOLD- 3.20 ,M1)       OnBookEvent : 2020.01 . 31 23 : 35 : 19.484 Ask= 1593.9   Bid= 1593.8 
2020.01 . 31 23 : 35 : 26.061 Ticks_test (GOLD- 3.20 ,M1)       OnBookEvent : Pending order!
2020.01 . 31 23 : 35 : 26.075 Ticks_test (GOLD- 3.20 ,M1)       OnBookEvent : Pending order!
2020.01 . 31 23 : 35 : 26.142 Ticks_test (GOLD- 3.20 ,M1)       OnBookEvent : Pending order!
2020.01 . 31 23 : 35 : 26.155 Ticks_test (GOLD- 3.20 ,M1)       OnBookEvent : Pending order!
2020.01 . 31 23 : 35 : 26.162 Ticks_test (GOLD- 3.20 ,M1)       OnBookEvent : Pending order!
2020.01 . 31 23 : 35 : 26.191 Ticks_test (GOLD- 3.20 ,M1)       OnBookEvent : Pending order!
2020.01 . 31 23 : 35 : 26.213 Ticks_test (GOLD- 3.20 ,M1)       OnBookEvent : Pending order!
2020.01 . 31 23 : 35 : 27.293 Ticks_test (GOLD- 3.20 ,M1)       OnBookEvent : Pending order!
2020.01 . 31 23 : 35 : 27.345 Ticks_test (GOLD- 3.20 ,M1)       OnBookEvent : Pending order!
2020.01 . 31 23 : 35 : 27.936 Ticks_test (GOLD- 3.20 ,M1)       OnBookEvent : Pending order!
2020.01 . 31 23 : 35 : 27.943 Ticks_test (GOLD- 3.20 ,M1)       OnBookEvent : Pending order!
2020.01 . 31 23 : 35 : 28.166 Ticks_test (GOLD- 3.20 ,M1)       OnBookEvent : Pending order!
2020.01 . 31 23 : 35 : 28.172 Ticks_test (GOLD- 3.20 ,M1)       OnTick : 2020.01 . 31 23 : 35 : 21.657 Ask= 1594.1   Bid= 1593.9 
2020.01 . 31 23 : 35 : 28.172 Ticks_test (GOLD- 3.20 ,M1)       OnTick : 2020.01 . 31 23 : 35 : 21.650 Buy Tick: Last= 1593.9 Volume= 1 
2020.01 . 31 23 : 35 : 28.172 Ticks_test (GOLD- 3.20 ,M1)       OnTick : 2020.01 . 31 23 : 35 : 21.650 Buy Tick: Last= 1593.9 Volume= 1 
2020.01 . 31 23 : 35 : 28.172 Ticks_test (GOLD- 3.20 ,M1)       OnTick : 2020.01 . 31 23 : 35 : 21.650 Buy Tick: Last= 1593.9 Volume= 1 
2020.01 . 31 23 : 35 : 28.172 Ticks_test (GOLD- 3.20 ,M1)       OnTick : 2020.01 . 31 23 : 35 : 21.650 Buy Tick: Last= 1593.9 Volume= 1 
2020.01 . 31 23 : 35 : 28.172 Ticks_test (GOLD- 3.20 ,M1)       OnTick : 2020.01 . 31 23 : 35 : 21.650 Buy Tick: Last= 1593.9 Volume= 1 
2020.01 . 31 23 : 35 : 28.173 Ticks_test (GOLD- 3.20 ,M1)       OnBookEvent : 2020.01 . 31 23 : 35 : 21.657 Ask= 1594.1   Bid= 1593.9 
2020.01 . 31 23 : 35 : 28.173 Ticks_test (GOLD- 3.20 ,M1)       OnBookEvent : 2020.01 . 31 23 : 35 : 21.650 Buy Tick: Last= 1593.9 Volume= 1 
2020.01 . 31 23 : 35 : 28.173 Ticks_test (GOLD- 3.20 ,M1)       OnBookEvent : 2020.01 . 31 23 : 35 : 21.650 Buy Tick: Last= 1593.9 Volume= 1 
2020.01 . 31 23 : 35 : 28.173 Ticks_test (GOLD- 3.20 ,M1)       OnBookEvent : 2020.01 . 31 23 : 35 : 21.650 Buy Tick: Last= 1593.9 Volume= 1 
2020.01 . 31 23 : 35 : 28.173 Ticks_test (GOLD- 3.20 ,M1)       OnBookEvent : 2020.01 . 31 23 : 35 : 21.650 Buy Tick: Last= 1593.9 Volume= 1 
2020.01 . 31 23 : 35 : 28.173 Ticks_test (GOLD- 3.20 ,M1)       OnBookEvent : 2020.01 . 31 23 : 35 : 21.650 Buy Tick: Last= 1593.9 Volume= 1 
2020.01 . 31 23 : 35 : 28.191 Ticks_test (GOLD- 3.20 ,M1)       OnTick : 2020.01 . 31 23 : 35 : 21.661 Ask= 1594 
2020.01 . 31 23 : 35 : 28.192 Ticks_test (GOLD- 3.20 ,M1)       OnBookEvent : 2020.01 . 31 23 : 35 : 21.661 Ask= 1594 
2020.01 . 31 23 : 35 : 28.255 Ticks_test (GOLD- 3.20 ,M1)       OnBookEvent : Pending order!
2020.01 . 31 23 : 35 : 29.516 Ticks_test (GOLD- 3.20 ,M1)       USE_BOOK ticks received: 153
2020.01 . 31 23 : 35 : 29.892 Ticks_test (GOLD- 3.20 ,M1)       OnTick : 2020.01 . 31 23 : 35 : 23.367 Ask= 1594.1 
2020.01 . 31 23 : 35 : 31.660 Ticks_test (GOLD- 3.20 ,M1)       USE_TICK ticks received: 27
 
prostotrader:

Nein, Serjosch!

Ich muss zugeben, dass OnBookEvent() und OnTick() alle Ticks zusammenfallen (ich hatte einen Fehler im Code),

aber andere Änderungen im Glas werden in OnTick() nicht berücksichtigt

Für FOREX-Leute spielt das keine Rolle.(Vorsichtiges Zitat aus obigem Beitrag: "2 mal mehr OnTick-Ereignisse. Schade, dass nicht alle von ihnen eine nützliche Last tragen (wenn Sie bestes Gebot/Briefkurs und Flipper brauchen)".)

Korrigierter Code:

Ergebnis (Schnipsel).

Die Ticks in der Historie werden natürlich übereinstimmen, aber in der obigen Abbildung zeigt sich, dass nicht alle Info-Ticks in die Historie gelangen oder in OnCalculat übersprungen werden.

Ich weiß nicht, ob es einen Fehler gibt, ich werde versuchen, ihn am Montag zu beheben.

 
prostotrader:


Oder vielleicht für die Echtzeit, anstelle von

MqlTick ticks[];
result = CopyTicks(Symbol(), ticks, COPY_TICKS_ALL, 0, 1);

verwenden.

MqlTick ticks[1];
bool success = SymbolInfoTick(_Symbol, ticks); //Возвращает текущие цены.

Warum kopieren, wenn Sie sofort den aktuellen Preis erhalten können?
Theoretisch hat CopyTicks in seinen Eingeweiden zusätzliche Parameterprüfungen, wodurch die Länge des Codes im Funktionskörper erhöht wird.
Aber SymbolInfoTick hat keine zusätzlichen Parameter, und theoretisch sollte die Implementierung dieser Funktion weniger Code enthalten.
Weniger Code bedeutet schnellere Ausführung.

Der einzige Wermutstropfen ist, dass die Funktion SymbolInfoTick ähnlich wie CopyTicks keine ausführliche Dokumentation hat und es nicht ganz klar ist, wie sie funktioniert.
Werden die Daten zwischengespeichert, oder werden die Rohdaten sofort wiedergegeben?

Grund der Beschwerde: