English Русский 中文 Español Deutsch 日本語 Português Français Italiano Türkçe
MQL5 쿡북: BookEvent 핸들링

MQL5 쿡북: BookEvent 핸들링

MetaTrader 5 | 12 10월 2021, 16:15
207 0
Denis Kirichenko
Denis Kirichenko

개요

잘 알려진 대로 MetaTrader5는 여러 시장을 지원하는 거래 플랫폼입니다. 외환 시장, 주식 시장, 선물 및 CFD에 대한 거래가 모두 지원되죠. 프리랜서 통계에 따르면 외환 상품 외 다른 상품에 대한 투자자 수도 늘고 있더군요.

본문을 통해 초보 MQL5 개발자들에게 BookEvent 핸들링을 소개할까 합니다. 해당 이벤트는 시장 심도와 관련되어 있습니다. 보통 주식 시장에서 이용되는 개념인데요. 하지만 외환 시장 투자자들도 시장 심도를 유용하게 사용할 수 있습니다. 브로커 계좌에는 유동성 공급자들이 제공하는 주문 관련 정보가 나타납니다. 애그리게이터 모델의 한계가 있긴 하지만요. 이런 계정들이 점점 더 인기를 얻고 있습니다.


1. BookEvent

관련 자료에 따르면, 해당 이벤트는 시장 심도 변화에 따라 발생합니다. 우선 BookEvent가 시장 심도 이벤트인 건 아시겠죠.

시장 심도란 가격, 거래량 및 거래 방향이 모두 다른 다수 개의 주문을 의미합니다. 시장 심도 가격은 시장의 가격과 가까우므로 최적의 가격이 되죠.

그림 1. MetaTrader5 시장 심도

그림 1. MetaTrader5 시장 심도

MetaTrader5에는 '시장 심도'라는 이름을 가진 '주문 목록'이 있습니다(그림 1). 시장 심도에 대한 상세한 정보는 클라이언트 터미널의 이용자 가이드를 참조하세요.

시장 심도에 대한 정보를 제공하는 MqlBookInfo 구조에 대해서도 알아보겠습니다.

struct MqlBookInfo
  {
   ENUM_BOOK_TYPE   type;       // order type from the ENUM_BOOK_TYPE enumeration
   double           price;      // price
   long             volume;     // volume
  };
-->

세 개의 필드를 포함되는데요. 주문 구조 프로세싱을 통해 주문 유형, 가격 및 거래량에 대한 정보를 얻을 수 있습니다.


2. BookEvent 이벤트 핸들러

이벤트 핸들링 함수인 OnBookEvent()는 한 개의 정수형 변수를 갖습니다. 문자열 매개 변수를 참조하죠.

void OnBookEvent (const string& symbol)
-->

문자열 매개 변수에는 시장 심도 이벤트가 발생하는 통화쌍 이름이 포함됩니다.

이벤트 핸들러 자체도 별도의 준비를 필요로 하는데요. EA가 시장 심도 이벤트를 핸들링하려면 EA에 탑재된 MarketBookAdd() 함수를 이용해 해당 이벤트를 구독해야 합니다. 보통 EA 초기화 블록에 포함되어 있죠. 해당 이벤트가 구독되지 않은 경우 EA는 이벤트를 무시하게 됩니다.

연습 삼아 구독 해제 기능을 개발해 보는 것도 좋습니다. 초기화 해제 시 MarketBookRelease() 함수를 호출하여 해당 데이터 수신 구독을 해제하게 됩니다.

데이터 수신 및 수신 해제 메커니즘은 타이머 생성 및 프로세스 과정과 비슷합니다.


3. BookEvent 핸들링 템플릿

OnBookEvent() 함수를 호출하는 간단한 EA 템플릿을 생성하고 BookEventProcessor1.mq5로 저장하겠습니다.

초기화 및 초기화 해제 핸들러 및 시장 심도 이벤트 핸들러 등 최소한의 핸들러만 포함됩니다.

시장 심도 이벤트 핸들러 자체는 매우 간단합니다.

//+------------------------------------------------------------------+
//| BookEvent function                                               |
//+------------------------------------------------------------------+
void OnBookEvent(const string &symbol)
  {
   Print("Book event for: "+symbol);
//--- select the symbol
   if(symbol==_Symbol)
     {
      //--- array of the DOM structures
      MqlBookInfo last_bookArray[];

      //--- get the book
      if(MarketBookGet(_Symbol,last_bookArray))
        {
         //--- process book data
         for(int idx=0;idx<ArraySize(last_bookArray);idx++)
           {
            MqlBookInfo curr_info=last_bookArray[idx];
            //--- print
            PrintFormat("Type: %s",EnumToString(curr_info.type));
            PrintFormat("Price: %0."+IntegerToString(_Digits)+"f",curr_info.price);
            PrintFormat("Volume: %d",curr_info.volume);
           }
        }
     }
  }
-->

해당 시장 심도 이벤트에 대한 금융 상품을 특정해야 하는데요. 구독 후에는 모든 통화쌍에 대한 이벤트가 나타나게 됩니다.

최근 소개된 빌드에는 시장 심도에 대해 조금 수정된 부분이 있는데요. 현재 버전(빌드 975)에서는 딱히 눈에 띄는 건 없네요. 핸들러는 지정된 통화쌍에 대해서만 호출됩니다. 이를 확인하기 위해 'Experts Log'에 정보를 입력하겠습니다.

탑재된 MarketBookGet() 함수를 이용해서 말이죠. 시장 심도에 대한 모든 정보를 반환하게 될 텐데요. 특히 특정 심볼에 대한 시장 심도 기록을 포함하는 MqlBookInfo와 구조 배열이 반환됩니다. 해당 배열은 브로커에 따라 그 크기가 다릅니다.

템플릿 덕에 Log에 배열 구조 값을 나타낼 수 있게 되죠.

해당 EA는 디버깅 모드에서 SBRF-12.14 선물에 대해 실행되었습니다. Experts Log의 기록 시퀀스는 다음과 같습니다.

EL      0       11:24:32.250    BookEventProcessor1 (SBRF-12.14,M1)     Book event for: SBRF-12.14
MF      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Type: BOOK_TYPE_SELL
KP      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Price: 7708
LJ      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Volume: 6
MP      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Type: BOOK_TYPE_SELL
HF      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Price: 7705
LP      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Volume: 6
MJ      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Type: BOOK_TYPE_SELL
GL      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Price: 7704
ON      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Volume: 3
MD      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Type: BOOK_TYPE_SELL
FR      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Price: 7703
PD      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Volume: 2
MN      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Type: BOOK_TYPE_SELL
DH      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Price: 7701
QQ      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Volume: 10
GH      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Type: BOOK_TYPE_SELL
QM      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Price: 7700
OK      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Volume: 1011
ER      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Type: BOOK_TYPE_SELL
KS      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Price: 7698
EE      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Volume: 50
OM      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Type: BOOK_TYPE_SELL
KI      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Price: 7696
IO      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Volume: 21
QG      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Type: BOOK_TYPE_SELL
LO      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Price: 7695
MK      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Volume: 1
QQ      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Type: BOOK_TYPE_SELL
KE      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Price: 7694
QQ      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Volume: 5
QK      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Type: BOOK_TYPE_SELL
PK      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Price: 7691
LO      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Volume: 2
QE      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Type: BOOK_TYPE_SELL
HQ      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Price: 7688
OE      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Volume: 106
MO      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Type: BOOK_TYPE_SELL
RG      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Price: 7686
IP      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Volume: 18
GI      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Type: BOOK_TYPE_SELL
FL      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Price: 7684
QI      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Volume: 3
GS      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Type: BOOK_TYPE_SELL
IR      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Price: 7681
LG      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Volume: 4
GM      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Type: BOOK_TYPE_SELL
JH      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Price: 7680
RM      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Volume: 2
GG      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Type: BOOK_TYPE_SELL
DN      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Price: 7679
HH      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Volume: 19
IQ      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Type: BOOK_TYPE_SELL
ED      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Price: 7678
EQ      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Volume: 1
IK      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Type: BOOK_TYPE_SELL
OJ      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Price: 7676
DO      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Volume: 2
IE      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Type: BOOK_TYPE_SELL
RP      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Price: 7675
EE      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Volume: 1
QR      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Type: BOOK_TYPE_BUY
LF      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Price: 7671
LP      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Volume: 40
QD      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Type: BOOK_TYPE_BUY
KL      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Price: 7670
QJ      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Volume: 21
QN      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Type: BOOK_TYPE_BUY
CR      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Price: 7669
RD      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Volume: 20
QP      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Type: BOOK_TYPE_BUY
DH      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Price: 7668
NN      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Volume: 17
QJ      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Type: BOOK_TYPE_BUY
QN      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Price: 7667
RK      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Volume: 2
OL      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Type: BOOK_TYPE_BUY
DE      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Price: 7666
MQ      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Volume: 151
QF      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Type: BOOK_TYPE_BUY
OJ      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Price: 7665
RO      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Volume: 2
OH      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Type: BOOK_TYPE_BUY
FQ      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Price: 7664
EF      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Volume: 49
OR      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Type: BOOK_TYPE_BUY
GG      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Price: 7663
OS      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Volume: 3
ED      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Type: BOOK_TYPE_BUY
JM      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Price: 7662
PI      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Volume: 4
CN      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Type: BOOK_TYPE_BUY
ES      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Price: 7661
LD      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Volume: 13
CP      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Type: BOOK_TYPE_BUY
FI      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Price: 7660
LM      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Volume: 2
IJ      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Type: BOOK_TYPE_BUY
NO      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Price: 7659
II      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Volume: 12
IL      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Type: BOOK_TYPE_BUY
ME      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Price: 7658
IP      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Volume: 3
GF      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Type: BOOK_TYPE_BUY
NK      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Price: 7657
FM      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Volume: 15
GH      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Type: BOOK_TYPE_BUY
MQ      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Price: 7656
DD      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Volume: 6
MS      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Type: BOOK_TYPE_BUY
NG      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Price: 7655
KR      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Volume: 9
KE      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Type: BOOK_TYPE_BUY
OM      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Price: 7654
IK      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Volume: 14
KO      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Type: BOOK_TYPE_BUY
NS      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Price: 7653
DF      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Volume: 534
MQ      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Type: BOOK_TYPE_BUY
OI      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Price: 7652
IO      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Volume: 25
-->

특정한 시간에 나타난 시장 심도의 모습이죠. 구조 배열의 첫 엘리먼트는 최고가에서 매도를 하는 주문입니다(7708 루블). 마지막 엘리먼트는 최저가에서 매수를 하는 주문이죠(7652 루블). 시장 심도 데이터는 위에서 아래로 배열에 읽혀집니다.

표 1에 해당 데이터를 모아놓았습니다.

표 1. SBRF-12.14 시장 심도

표 1. SBRF-12.14 시장 심도

상단의 붉게 표시된 부분은 매도 주문을 나타냅니다(SL). 하단의 초록색으로 표시된 부분은 매수 주문을 나타내죠(BL).

매도 주문 중에는 6번 주문이 1011 랏의 가장 큰 볼륨을 갖고 있네요. 가격은 7700 루블입니다. 매수 주문 중에는 39번 주문이 534 랏에 7653 루블로 가장 큰 볼륨을 갖습니다.

시장 심도 데이터를 분석하여 투자자는 투자 전략을 수립합니다. 가장 간단한 전략은 인접한 가격 레벨에서 큰 볼륨을 형성하는 주문을 모아 지지대와 저항대를 설정하는 겁니다. 이번에는 시장 심도 변화를 기록하는 인디케이터를 생성해 보겠습니다.


4. 시장 심도

시장 심도 데이터를 이용한 인디케이터는 아주 다양한데요. MetaTrader5 마켓에도 몇 가지 올라와 있습니다. 저는 IShift 인디케이터가 가장 마음에 들더라고요. 개발자인 Yury Kulikov는 아주 간략하면서도 유용한 도구를 만들어 냈습니다.

시장 심도 데이터를 이용하는 모든 프로그램은 EA 또는 인디케이터의 형식으로 나타납니다. 해당 MQL5 프로그램만이 BookEvent 이벤트 핸들러를 포함하기 때문이죠.

실시간 시장 심도 데이터를 보여주는 간단한 프로그램을 작성해 보겠습니다. 우선 표시할 데이터를 선택해야 합니다. 가로선이 거래량을 나타내는 패널 형태를 띌 겁니다. 바의 크기는 상대적일 거고요. 모든 주문의 최대 볼륨은 100%로 간주됩니다. 그림 2는 7507 루블에서 설정된 주문이 가장 큰 볼륨인 519 랏을 갖고 있음을 보여줍니다.

올바른 패널 초기화를 위해 정확한 시장 심도 또는 레벨 개수가 특정되어야 합니다('DOM depth' 변수). 브로커에 따라 해당 숫자가 상이합니다.

그림 2. 시장 심도 패널

그림 2. 시장 심도 패널

패널에 대한 프로그램 코드는 객체 지향 프로그래밍으로 작성됩니다. 패널 오퍼레이션에 필요한 클래스는 CBookBarsPanel.인데요.

//+------------------------------------------------------------------+
//| Book bars class                                                  |
//+------------------------------------------------------------------+
class CBookBarsPanel
  {
private:
   //--- Data members
   CArrayObj         m_obj_arr;
   uint              m_arr_size;
   //---
   uint              m_width;
   uint              m_height;

   //--- Methods
public:
   void              CBookBarsPanel(const uint _arr_size);
   void             ~CBookBarsPanel(void){};
   //---
   bool              Init(const uint _width,const uint _height);
   void              Deinit(void){this.m_obj_arr.Clear();};
   void              Refresh(const MqlBookInfo &_bookArray[]);
  };
-->

네 개의 데이터가 포함됩니다.

  • m_obj_arrCObject 형식의 객체 포인터에 대한 컨테이너입니다. 시장 심도 데이터 저장에 사용되죠. 후자의 경우 별도의 클래스가 생성될 겁니다.
  • m_arr_size는 시장 심도 레벨 개수를 나타냅니다.
  • m_widthm_height는 패널 차원을 픽셀 단위로 저장합니다.

메소드의 경우 기본 생성자 및 파괴자를 제외하고는 다음이 포함되어 있습니다.

  • 초기화 메소드
  • 초기화 해제 메소드
  • 업데이트 메소드

패널 내 각각의 열에 대해 별도의 CBookRecord 클래스를 생성해 가격, 가로 바, 볼륨을 특정하겠습니다.

세 개의 포인터를 포함합니다. 그 중 하나는 CChartObjectRectLabel형 객체(가로 바 사각형 라벨)에 대한 포인터이며 나머지 두 개는 CChartObjectLabel형 객체(가격 및 볼륨 텍스트 라벨)에 대한 포인터입니다.

//+------------------------------------------------------------------+
//| Book record class                                                |
//+------------------------------------------------------------------+
class CBookRecord : public CObject
  {
private:
   //--- Data members
   CChartObjectRectLabel *m_rect;
   CChartObjectLabel *m_price;
   CChartObjectLabel *m_vol;
   //---
   color             m_color;

   //--- Methods
public:
   void              CBookRecord(void);
   void             ~CBookRecord(void);
   bool              Create(const string _name,const color _color,const int _X,
                            const int _Y,const int _X_size,const int _Y_size);
   //--- data
   bool              DataSet(const long _vol,const double _pr,const uint _len);
   bool              DataGet(long &_vol,double &_pr) const;

private:
   string            StringVolumeFormat(const long _vol);
  };
-->

메소드에는 다음이 포함됩니다.

  • 기록 생성 메소드
  • 데이터 설정 메소드
  • 데이터 수신 메소드
  • 대수 포맷 메소드

결과적으로 EA용 BookEvent 핸들러와 인디케이터는 다음과 같이 나타납니다.

//+------------------------------------------------------------------+
//| BookEvent function                                               |
//+------------------------------------------------------------------+
void OnBookEvent(const string &symbol)
  {
//--- select the symbol
   if(symbol==_Symbol)
     {
      //--- array of the DOM structures
      MqlBookInfo last_bookArray[];

      //--- get the book
      if(MarketBookGet(_Symbol,last_bookArray))
         //--- refresh panel
         myPanel.Refresh(last_bookArray);
     }
  }
-->

BookEvent가 발생할 때마다 패널이 데이터를 업데이트합니다. 업데이트된 프로그램을 BookEventProcessor2.mq5에 저장하겠습니다.

위의 영상에서 EA가 잘 작동하는 걸 확인할 수 있죠.


결론

이번에는 터미널의 시장 심도 이벤트에 대해 다루었습니다. 해당 이벤트는 HTF의 핵심이기도 하죠. 투자자들 사이에서 HTF가 점점 인기를 얻고 있는데요.

MQL5를 이제 막 접하신 투자자들께 첨부된 시장 심도 이벤트 핸들링 예제가 도움이 되길 바랍니다. 소스 파일은 프로젝트 폴더에 넣기 편하게 되어 있습니다. 제 경우에는 \MQL5\Projects\BookEvent 폴더에 저장했죠.

MetaQuotes 소프트웨어 사를 통해 러시아어가 번역됨.
원본 기고글: https://www.mql5.com/ru/articles/1179

파일 첨부됨 |
BookEvent.zip (3.84 KB)
MQL4, MQL5로 프랙탈을 이용한 추세선 그리기 MQL4, MQL5로 프랙탈을 이용한 추세선 그리기
이번 글에서는 MQL4와 MQL5로 프랙탈 인디케이터를 기반으로 하는 자동 추세선 플로팅에 관한 내용을 다룹니다. 두 언어의 솔루션을 서로 비교할 수 있도록 작성되었습니다. 추세선은 가장 마지막으로 생성된 두 개의 프랙탈을 기반으로 플로팅됩니다.
일반 VPS보다 MetaTrader4, MetaTrader5 가상 호스팅이 더 나은 이유 일반 VPS보다 MetaTrader4, MetaTrader5 가상 호스팅이 더 나은 이유
가상 클라우드 호스팅 네트워크는 MetaTrader4와 MetaTrader5 전용으로 개발되었습니다. 네이티브 솔루션으로서 다양한 장점을 가지고 있죠. 24시간 무료 체험을 통해 가상 서버를 이용해 보세요.
리퀴드 차트 리퀴드 차트
매 시간별 2분과 5분을 기준으로 열리는 바가 있는 시간당 차트를 보고 싶진 않으신가요? 1분마다 바가 열리는 시간이 바뀌는 차트는 어떤 모양으로 나타날까요? 이런 차트를 이용하면 거래에 도움이 될까요? 아래에서 그 답을 알아보겠습니다.
랜덤 포레스트로 추세 예측하기 랜덤 포레스트로 추세 예측하기
본문은 Rattle 패키지를 이용한 외환 시장 내 롱 또는 숏 포지션 예측 패턴 자동 검색에 대해 다룹니다. 모든 투자자에게 도움이 될만 한 글입니다.