기고글 토론 "MQL5 쿡북: BookEvent 핸들링"

 

새로운 기고글 MQL5 쿡북: BookEvent 핸들링 가 게재되었습니다:

이번 글은 시장 심도 이벤트와 그 원리 및 프로세스를 다룹니다. 시장 심도를 다루는 MQL 프로그램을 예로 들겠습니다. 해당 프로그램은 객체 지향 접근법을 적용해 작성되었습니다. 핸들링 결과는 화면에 패널 및 시장 심도 레벨로 표시됩니다.

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

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


1. BookEvent

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

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

그림 1. MetaTrader5 시장 심도

그림 1. MetaTrader5 시장 심도

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

작성자: Denis Kirichenko

 

이 글을 작성해 주셔서 감사합니다.

오류에 대해 조금만 설명하겠습니다:

Все программы, работающие по данным стакана, по форме будут являться советниками, ведь обработчик события BookEvent есть только в советниках. Правда, можно сделать связку "советник-индикатор", где истинный индикатор сможет принимать данные от советника и обрабатывать состояние стакана.

이는 사실이 아니며 인디케이터는 OnBookEvent도 처리할 수 있습니다.

 

angevoyageur:

오류에 대해 조금 설명해드리겠습니다:

이는 사실이 아니며 인디케이터가 OnBookEvent도 처리할 수 있습니다.

알랭, 메시지 주셔서 감사합니다. 네, 맞습니다, 제가 틀렸습니다. 인디케이터에서도 작동합니다... 저는 인디케이터를 만들 때 핸들러 목록에 의존했는데, 그 중에는 OnBookEvent()가 없었습니다.

그리고 가장 중요한 것은 문서에 이렇게 나와 있다는 것입니다:

OnBookEvent() 함수는 BookEvent 이벤트의 핸들러입니다. BookEvent 이벤트는 심리지수 상태가 변경될 때만전문가용 어드바이저에 대해 생성됩니다.


 
denkir :

알랭, 메시지 고마워요. 네, 맞아요, 제가 틀렸습니다. 인디케이터에서도 작동합니다... 인디케이터를 만들 때 핸들러 목록에 의존했는데, 그 중에는 OnBookEvent()가 없었습니다.

그리고 가장 중요한 것은 문서에서 말하는 것입니다:

맞습니다, 설명서를 수정해야 합니다. 그것에 대해 서비스 데스크에 글을 쓰나요?
 
angevoyageur:
네, 문서를 수정해야 합니다. 이에 대한 ServiceDesk를 작성하고 있나요?
아니요, 아직 작성하지 않았습니다... 작성하고 문서 자료를 변경하겠습니다...
 

참고로 이 문서에는 약간의 오류가 있습니다:

All programs working with Depth of Market data will have a form of an Expert Advisor, as only Expert Advisors feature the event handler of BookEvent. There is a possibility, however, to write an "Expert-Indicator" pair , where the indicator can receive data from the EA and process the Depth of Market state.

인디케이터도 BookEvent를 처리할 수 있다는 것은 사실이 아닙니다. 이 오류는 문서의 오류에 따른 것으로 곧 수정될 예정입니다. 문서 작성자와 ServiceDesk에 연락을 취했습니다.

 

안녕하세요, 기사 주셔서 감사합니다, 매우 유용합니다!

그런 질문, BookEvent 이벤트를 처리하고 핸들러가 삭제하고 주문을하면이 이벤트가 다시 시작된다고 가정 해 보겠습니다..... 그런 다음 주문 마감 (주문 삭제) 및 새 BookEvent 이벤트가 다시 형성되는 순간 내 초기 절차가 중단됩니까? 코드 실행이 끝까지 도달하지 않는다는 것을 알았 기 때문에.... 모든 것이 실행되는 것은 아닙니다 ... 나는 내가 아이디어를 명확하게 만들었 으면 좋겠다 ))

 
thejobber:

안녕하세요, 기사 주셔서 감사합니다, 매우 유용합니다!

그런 질문, BookEvent 이벤트를 처리하고 핸들러가 삭제하고 주문을하면이 이벤트가 다시 시작된다고 가정 해 보겠습니다..... 그런 다음 주문 마감 (주문 삭제) 및 새 BookEvent 이벤트가 다시 형성되는 순간 내 초기 절차가 중단됩니까? 코드 실행이 끝까지 도달하지 않는다는 것을 알았 기 때문에.... 모든 것이 실행되는 것은 아닙니다 ... 나는 나 자신을 분명히 했기를 바랍니다 ))

의견 주셔서 감사합니다!

아니요, 하나의 이벤트가 처리되는 동안 새 이벤트가 생성 될 때 프로그램 제어가 자동으로 다른 핸들러로 전송되지 않습니다 ... Print() 함수로 확인할 수 있습니다 (그리고 일시 중지 Sleep()을 추가하는 것이 좋습니다).

"이벤트 큐"와 같은 개념이 있습니다.

문서에 따르면:

프로그램은 실행 중인 그래프에서만 이벤트를 수신합니다. 모든 이벤트는 수신 순서대로 차례로 처리됩니다. 큐에 이미 NewTick 이벤트가 있거나 이 이벤트가 처리 중인 상태인 경우, 새 NewTick 이벤트는 mql5-program 큐에 넣지 않습니다. 마찬가지로 mql5-program 큐에 이미 ChartEvent 이벤트가 있거나 이 이벤트가 처리 중인 경우 이 유형의 새 이벤트는 큐에 넣지 않습니다. 타이머 이벤트도 같은 방식으로 처리됩니다. 타이머 이벤트가 큐에 있거나 이미 처리 중인 경우 새 타이머 이벤트는 큐에 추가되지 않습니다.

이벤트 큐의 크기는 제한되어 있지만 충분하므로 올바르게 작성된 프로그램에서는 큐 오버플로가 발생할 가능성이 거의 없습니다. 큐가 오버플로되면 새 이벤트는 큐에 대기하지 않고 버려집니다.

 

이벤트 큐의 크기는 제한적이지만 충분하므로 올바르게 작성된 프로그램에서는 큐 오버플로가 발생할 가능성이 낮습니다. 큐가 오버플로되면 새 이벤트는 대기열에 추가되지 않고 버려집니다.

그래서 제 두려움은 결국 근거 없는 것이 아닙니다)) 스택에 항상 최고의 가격을 유지하기 위해 USD\rub 선물용 스프레더를 작성했습니다.... 그러면 베팅이 초당 여러 번 업데이트되기 때문에 확실히 대기열이 넘칠 것이며, 이것은 내가 거기에 무언가를 넣었다는 사실없이 삭제됩니다. 그리고 나와 함께라면 확실히 제 시간에 없을 것입니다..... 그리고 이것은 단지 데모 일뿐입니다 ... 그리고 실제 시장에는 미친 내기가 있습니다)))

내 생각을 올바른 방향으로 이끌어 주셔서 감사합니다.)

 

안녕하세요. 매우 유익한 기사입니다. 다음과 같은 질문이 있습니다.

상품에서 체결된 거래를 체결된 주문 유형(시장가/제한가)에 따라 필터링하는 작업이 있습니다.

이 작업을 해결하기 위해 온북이벤트 이벤트와 온틱 이벤트를 연결하려면 어떻게 해야 하나요? 즉, 거래에 어떤 유형의 주문이 포함되었는지 어떻게 확인할 수 있나요? 제가 알기로는 이 작업은 OnBookEvent만으로는 해결할 수 없습니다.

 

Rubick:

...이 문제를 해결하기 위해 온북이벤트 이벤트와 온틱 이벤트를 연결하는 방법, 즉 거래에 어떤 유형의 주문이 포함되었는지 확인하는 방법은 무엇인가요? 내가 아는 한, 그러한 작업은 OnBookEvent를 통해서만 해결할 수 없습니다.

아마도 당신은 유리가 아니라 시장 운영의 핸들러가 필요할 것입니다.