실시간 틱 - 페이지 12

 
Sergey Chalyshev :

정보 및 거래라는 두 개의 독립적인 스트림인 COPY_TICKS_INFO 및 COPY_TICKS_ALL이 OnTick에 도착하여 사전 처리를 거칩니다.

이러한 스레드는 서로 동기화되지 않으므로 OnBookEvent 와 OnTick을 비교하면 TICKS_INFO를 가져와야 합니다.

OnBookEvent는 정의상 더 빨라야 합니다. 전처리를 하지 않습니다.

테스트로 누가 더 빠른지 확실하게 판별하는 것은 불가능합니다. 우리는 틱과 달리 오더북의 시장 시간을 모릅니다.

개발자에게 여러 번 요청했지만 ADD GLASS TIME! ! !


ps 속도 외에도 유리에는 OnTick에 비해 다른 장점이 있습니다.

이미 언급했듯이 OnTick 에서 최상의 Bid 및 Ask 가격을 얻는 것은 불가능합니다.

다른 기호의 데이터는 OnTick 에 오지 않으므로 Expert Advisors가 여러 도구를 분석하는 데 쓸모가 없습니다.


COPY_TICKS_ALL을 COPY_TICKS_INFO 로 대체

결과

 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 

노란색으로 표시 - 동일한 틱!

아마도 코드에 여전히 부정확성이 있습니까? ...
 

잠시 동안 당신은 이해하고 싶은 욕망이 있는 것 같았고 그것은 자존심을 진정시키는 데 도움이 될 것입니다.
아니, 그냥 보였다.

일반적으로 문제가 해결되고 누구나 귀하와 fxsaber 및 내 코드를 보고 결론을 내릴 수 있습니다.
나는 당신과의 대화를 중단합니다. 큰 비명만이 당신에게서 나오고 당신의 두뇌는 정보를 수신하는 데 전혀 작동하지 않습니다.

FORTS와 함께 행운을 빕니다.

 
Sergey Chalyshev :

정보 및 거래라는 두 개의 독립적인 스트림인 COPY_TICKS_INFO 및 COPY_TICKS_ALL이 OnTick에 도착하여 사전 처리를 거칩니다.

이러한 스레드는 서로 동기화되지 않으므로 OnBookEvent 와 OnTick을 비교하면 TICKS_INFO를 가져와야 합니다.

Sergey, 우리는 On-functions를 진입점으로 사용합니다.

문제는 어떤 진입점이 먼저 올 것인지였습니다(마지막 틱에 대해 똑같이 정확한 정보를 제공하면서).

내 Expert Advisor 를 실행하고 로그를 보십시오. 이벤트 시간(ms 단위)과 마지막으로 알려진 틱 시간(ms 포함)이 로그에 표시됩니다.

"누가 먼저 왔는지"에 대한 몇 가지 개별 틱을 분석하기만 하면 됩니다.


세르게이 찰리셰프 :

OnBookEvent는 정의상 더 빨라야 합니다. 전처리를 하지 않습니다.

나는 OnTik이 그것을 통과한다고 생각하지 않습니다. 테스트 결과 이를 확인했으며 지연이 없습니다.


세르게이 찰리셰프 :

이미 언급했듯이 OnTick에서 최상의 Bid 및 Ask 가격을 얻는 것은 불가능합니다.

아마도 CopyTicks의 도움으로.

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

내 Expert Advisor 를 실행하고 로그를 보십시오. 이벤트 시간(ms 단위)과 마지막으로 알려진 틱 시간(ms 포함)이 로그에 표시됩니다.

"누가 먼저 왔는지"에 대한 몇 가지 개별 틱을 분석하기만 하면 됩니다.

일반적인 상황은 OnBuk이 OnTick과 동시에 또는 1-2ms 후에 도착하는 경우입니다. 그러나 지연도 있습니다.


 

5시간 동안:

 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

2배 더 많은 OnBook 이벤트. 그들 모두가 페이로드를 운반하지 않는 것은 유감입니다(최고의 입찰/매도 및 라스트가 필요한 경우).

 
Andrey Khatimlianskii :

Sergey, 우리는 On-functions를 진입점으로 사용합니다.

문제는 어떤 진입점이 먼저 올 것인지였습니다(마지막 틱에 대해 동일한 정확한 정보를 제공하면서) .

내 Expert Advisor 를 실행하고 로그를 확인하십시오. 이벤트 시간(ms 단위)과 마지막으로 알려진 틱 시간(ms 포함)이 로그에 표시됩니다.

"누가 먼저 왔는지"에 대한 몇 가지 개별 틱을 분석하기만 하면 됩니다.

당신은 이것을 잘못하고 있습니다. 아마도 주문서 이벤트가 도착했지만 아직 틱 기록에 포함되지 않았을 것입니다. Bid Ask 가격을 비교할 필요가 있으며 틱의 역사를 탐구하지 마십시오.

나는 OnTik이 그것을 통과한다고 생각하지 않습니다. 테스트 결과 이를 확인했으며 지연이 없습니다.

히스토리를 입력하기 전에 틱을 처리하여 필요한 모든 차트, 지표 및 Expert Advisors에 배포해야 합니다. 그리고 MT5에서 이 모든 것은 순차적으로 수행됩니다(병렬화되지 않음).

아마도 CopyTicks의 도움으로.

아니요, CopyTicks로 최상의 가격을 얻는 것도 불가능하며 주문 비용이 가장 비싸다면 어떻게 될까요?
 

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

나는 그것을 다르게 얻는다:

틱 대 책

파란색 선은 OnBook ,

빨간색 OnCalculat = OnTick .

관심이 있는 경우 표시기 코드를 표시할 수 있습니다.

 
Sergey Chalyshev :

나는 그것을 다르게 얻는다:


파란색 선은 OnBook ,

레드 온틱 .

관심이 있는 경우 표시기 코드를 표시할 수 있습니다.

아니 세레자!

OnBookEvent() 및 OnTick() 모든 틱이 동일하다는 것을 인정해야 합니다 (코드에 버그가 있음).

그러나 다른 DOM 변경 사항 은 어떤 식으로든 OnTick()에 반영되지 않습니다.

이것은 FOREX 거래자에게 중요하지 않습니다.(위 메시지의 조심스러운 인용: " OnBook 이벤트가 2배 더 있습니다. 모든 이벤트가 페이로드를 운반하지 않는 것은 유감입니다(최고 입찰/매도 및 마지막이 필요한 경우)" . )

수정된 코드:

 //+------------------------------------------------------------------+
//|                                                   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 :

아니 세레자!

OnBookEvent() 및 OnTick() 모든 틱이 동일하다는 것을 인정해야 합니다 (코드에 버그가 있음).

그러나 다른 DOM 변경 사항 은 어떤 식으로든 OnTick()에 반영되지 않습니다.

이것은 FOREX 거래자에게 중요하지 않습니다.(위 메시지의 조심스러운 인용: " OnBook 이벤트가 2배 더 있습니다. 모든 이벤트가 페이로드를 운반하지 않는 것은 유감입니다(최고 입찰/매도 및 마지막이 필요한 경우)" . )

수정된 코드:

결과(조각)

히스토리의 틱은 물론 일치하지만 위의 그림에서 모든 정보 틱이 히스토리에 빠지거나 OnCalculat에서 건너뛰는 것은 아닙니다.

오류가 있는지 모르겠지만 이제 월요일에 알아낼 것입니다.

 
prostotrader :


아니면 실시간 대신

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

사용

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

현재 가격 을 즉시 얻을 수 있다면 왜 복사합니까?
이론적으로 내부의 CopyTicks에는 추가 매개변수 검사가 있어 함수 본문의 코드 길이를 늘립니다.
그리고 SymbolInfoTick에는 추가 매개변수가 없으며 이론상 이 함수의 구현에는 더 적은 코드가 포함되어야 합니다.
적은 코드 - 더 빠른 실행.

유일한 나쁜 점은 CopyTicks와 같은 SymbolInfoTick 기능에 대한 자세한 문서가 없고 작동 방식이 완전히 명확하지 않다는 것입니다.
캐시, 또는 즉시 원시를 제공합니다.