MQL5 쿡북: BookEvent 핸들링
개요
잘 알려진 대로 MetaTrader5는 여러 시장을 지원하는 거래 플랫폼입니다. 외환 시장, 주식 시장, 선물 및 CFD에 대한 거래가 모두 지원되죠. 프리랜서 통계에 따르면 외환 상품 외 다른 상품에 대한 투자자 수도 늘고 있더군요.
본문을 통해 초보 MQL5 개발자들에게 BookEvent 핸들링을 소개할까 합니다. 해당 이벤트는 시장 심도와 관련되어 있습니다. 보통 주식 시장에서 이용되는 개념인데요. 하지만 외환 시장 투자자들도 시장 심도를 유용하게 사용할 수 있습니다. 브로커 계좌에는 유동성 공급자들이 제공하는 주문 관련 정보가 나타납니다. 애그리게이터 모델의 한계가 있긴 하지만요. 이런 계정들이 점점 더 인기를 얻고 있습니다.
1. BookEvent
관련 자료에 따르면, 해당 이벤트는 시장 심도 변화에 따라 발생합니다. 우선 BookEvent가 시장 심도 이벤트인 건 아시겠죠.
시장 심도란 가격, 거래량 및 거래 방향이 모두 다른 다수 개의 주문을 의미합니다. 시장 심도 가격은 시장의 가격과 가까우므로 최적의 가격이 되죠.
그림 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 시장 심도
상단의 붉게 표시된 부분은 매도 주문을 나타냅니다(SL). 하단의 초록색으로 표시된 부분은 매수 주문을 나타내죠(BL).
매도 주문 중에는 6번 주문이 1011 랏의 가장 큰 볼륨을 갖고 있네요. 가격은 7700 루블입니다. 매수 주문 중에는 39번 주문이 534 랏에 7653 루블로 가장 큰 볼륨을 갖습니다.
시장 심도 데이터를 분석하여 투자자는 투자 전략을 수립합니다. 가장 간단한 전략은 인접한 가격 레벨에서 큰 볼륨을 형성하는 주문을 모아 지지대와 저항대를 설정하는 겁니다. 이번에는 시장 심도 변화를 기록하는 인디케이터를 생성해 보겠습니다.
4. 시장 심도
시장 심도 데이터를 이용한 인디케이터는 아주 다양한데요. MetaTrader5 마켓에도 몇 가지 올라와 있습니다. 저는 IShift 인디케이터가 가장 마음에 들더라고요. 개발자인 Yury Kulikov는 아주 간략하면서도 유용한 도구를 만들어 냈습니다.
시장 심도 데이터를 이용하는 모든 프로그램은 EA 또는 인디케이터의 형식으로 나타납니다. 해당 MQL5 프로그램만이 BookEvent 이벤트 핸들러를 포함하기 때문이죠.
실시간 시장 심도 데이터를 보여주는 간단한 프로그램을 작성해 보겠습니다. 우선 표시할 데이터를 선택해야 합니다. 가로선이 거래량을 나타내는 패널 형태를 띌 겁니다. 바의 크기는 상대적일 거고요. 모든 주문의 최대 볼륨은 100%로 간주됩니다. 그림 2는 7507 루블에서 설정된 주문이 가장 큰 볼륨인 519 랏을 갖고 있음을 보여줍니다.
올바른 패널 초기화를 위해 정확한 시장 심도 또는 레벨 개수가 특정되어야 합니다('DOM depth' 변수). 브로커에 따라 해당 숫자가 상이합니다.
그림 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_arr은 CObject 형식의 객체 포인터에 대한 컨테이너입니다. 시장 심도 데이터 저장에 사용되죠. 후자의 경우 별도의 클래스가 생성될 겁니다.
- m_arr_size는 시장 심도 레벨 개수를 나타냅니다.
- m_width와 m_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