실시간 틱 - 페이지 5

 
Aleksey Mavrin :

틱은 동시에 하나 이상의 플래그를 가질 수 없습니까?

당신이 맞습니다, 수정

 //+------------------------------------------------------------------+
//|                                                   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;
bool is_first;
int t_cnt, result;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
{
  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 );
  }   
   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.ask): "" ); 
   } 
   else 
   { 
     res = res + (ask_tick? StringFormat ( " Ask=%G " ,tick.ask): "" ); 
     res = res + (bid_tick? StringFormat ( " Bid=%G " ,tick.ask): "" ); 
     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 (is_book == true ) MarketBookRelease ( Symbol ());
}
//+------------------------------------------------------------------+
//| BookEvent function                                               |
//+------------------------------------------------------------------+
//void OnTick()
void OnBookEvent ( const string &symbol)
{
   if ( Symbol () == symbol)
  {
     if (is_first == true )
    {
      result = CopyTicks ( Symbol (), ticks, COPY_TICKS_ALL , last_time, 0 );
       if (result > 0 )
      {
         Print ( "First packet of ticks:" );
        t_cnt = 0 ;
         for ( int i= 0 ; i<result; i++)
        {
           if (ticks[i].time_msc == ticks[ 0 ].time_msc) t_cnt++;
           Print (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 (GetTickDescription(ticks[i]));
          } 
           if (last_time == ulong (ticks[ 0 ].time_msc))
          {
            t_cnt += int (mem_cnt);
          }
           else last_time = ulong (ticks[ 0 ].time_msc + 1 );
        }
         else
        {
          t_cnt = 0 ;
          last_time++;
        }
      }
       else
      {
        t_cnt = 0 ;
        last_time++;
      }
    }
  }
}
//+------------------------------------------------------------------+
모든 틱을 수집하는 원리를 보여줬고 이 코드를 원하는 대로 사용할 수 있습니다(모든 플래그 검색).
 
Aleksey Mavrin :

그러나 이것은 모든 OnBookEvent 이벤트를 처리한다는 보장이 있다는 것을 의미합니까?

수단

 
prostotrader :

반복합니다

OnBookEvent()는 새 틱 패키지 가 도착했음을 보장합니다!

당신은 주식 주문이 있습니다.

OnTick은 또한 틱이 도착했음을 의미하며 CopyTicks를 사용하여 전체 패킷을 가져올 수 있습니다.

또한, 그들은 어디에서나 얻을 수 있습니다(심지어 차트 이벤트에서도). OnBookEvent에는 고유한 목적이 있으며 필요한 곳과 필요하지 않은 곳에서 찔러볼 필요가 전혀 없습니다.


단순 상인 :

도움말에서:

발행 속도 : 터미널은 빠른 액세스를 위해 각 기호에 대한 마지막 4096 틱을 캐시에 저장 합니다 .

인용 종료 ----

4K 마지막 틱이 충분하지 않다면 물론 주문서를 구독하십시오. 그러나 이것이 필요한 곳이 어디인지 모릅니다(첫 번째 실행 제외).

 
prostotrader :

수단

예, 틱 기록만 필요한 경우 이러한 이벤트의 대기열을 수집하고 모두 처리할 필요가 전혀 없습니다.

 
Andrey Khatimlianskii :

당신은 주식 주문이 있습니다.

OnTick은 또한 틱이 도착했음을 의미하며 CopyTicks를 사용하여 전체 패킷을 가져올 수 있습니다.

또한, 그들은 어디에서나 얻을 수 있습니다(심지어 차트 이벤트에서도). OnBookEvent에는 고유한 목적이 있으며 필요한 곳과 필요하지 않은 곳에서 찔러볼 필요가 전혀 없습니다.


4K 마지막 틱이 충분하지 않다면 물론 주문서를 구독하십시오. 그러나 이것이 필요한 곳이 어디인지 모릅니다(첫 번째 실행 제외).

안드레이!

주제는 "실시간 티키"

타이머나 다른 것에 의해 OnTick() 이벤트에 의해 틱이 수신될 수 있다는 사실을 100번 기록할 필요가 없습니다.

 
prostotrader :

안드레이!

주제는 "실시간 티키"

타이머나 다른 것에 의해 OnTick() 이벤트에 의해 틱이 수신될 수 있다는 사실을 100번 기록할 필요가 없습니다.

정확히! 그리고 OnBookEvent는 OnTimer와 동일한 주제와 관련이 있습니다.

 
Andrey Khatimlianskii :

정확히! 그리고 OnBookEvent는 OnTimer와 동일한 주제와 관련이 있습니다.

교환 상품에서 올해 출시

 //+------------------------------------------------------------------+
//|                                                   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;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
    is_book = MarketBookAdd ( Symbol ());
   
//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
//---
     if (is_book == true ) MarketBookRelease ( Symbol ());
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
     Print ( __FUNCTION__ + " Tick is done!" );
   
  }
//+------------------------------------------------------------------+
//| BookEvent function                                               |
//+------------------------------------------------------------------+
void OnBookEvent ( const string &symbol)
  {
     if ( Symbol () == symbol)
    {
       Print ( __FUNCTION__ + " Tick is done!" );
    }
   
  }
//+------------------------------------------------------------------+
 
prostotrader :

교환 상품에서 올해 출시

감사합니다. 작동 방식을 알고 있습니다.

귀하와 다른 거래 접근 방식이 있을 수 있다고 잠시 상상해 보십시오.

 
Andrey Khatimlianskii :

감사합니다. 작동 방식을 알고 있습니다.

귀하와 다른 거래 접근 방식이 있을 수 있다고 잠시 상상해 보십시오.

앤드류 ( 모든 존경심을 가지고 )

왜 "돌아가는"거야?

아니면 실시간으로 받는 것과 히스토리에서 받는 것의 차이를 모르시나요?

거래에 대한 다른 접근 방식은 어떻습니까?

누구나 자신이 적합하다고 생각하는 대로 로봇을 거래하고 작성합니다!

추가됨

실시간으로 틱을 받는 옵션이 마음 에 들지 않습니까?

따라서 버전을 게시 하십시오 !

다른 접근 방식을 살펴 보겠습니다 ...

 
prostotrader :

앤드류 ( 모든 존경심을 가지고 )

왜 "돌아가는"거야?

아니면 실시간으로 받는 것과 히스토리에서 받는 것의 차이를 모르시나요?

거래에 대한 다른 접근 방식은 어떻습니까?

누구나 자신이 적합하다고 생각하는 대로 로봇을 거래하고 작성합니다!

추가됨

실시간으로 틱을 받는 옵션이 마음 에 들지 않습니까?

따라서 버전을 게시 하십시오 !

다른 접근 방식을 살펴 보겠습니다 ...

코드에서 OnBookEvent를 OnTick으로 바꾸고 결과를 비교하십시오.