기고글 토론 "MetaTrader 5에서의 거래 이벤트"

 

새로운 기고글 MetaTrader 5에서의 거래 이벤트 가 게재되었습니다:

거래 계정의 현재 상태를 모니터링한다는 것은 오픈 포지션과 주문을 통제한다는 것을 의미합니다. 거래 신호가 진정한 거래가 되기 전, 이는 거래 서버로의 요청으로써 클라이언트 터미널에서 전송되어야 하며, 이 때 거래 서버는 처리 대기 중인 주문 대기열에 배치될 것입니다. 거래 서버에 의한 수락하거나, 만료 시 삭제하거나, 거래 기준으로 거래를 수행하는 등과 관련된 이러한 모든 조치에는 거래 이벤트가 뒤따르게 되고, 이 때 거래 서버는 터미널에 이런 사항에 대해 알려주게 됩니다.

여러 이벤트의 또 다른 예는 단일 반대 오퍼에서 필요한 거래량 얻을 수 없는 경우 단일 주문을 기준으로 여러 거래를 수행하는 것입니다. 거래 서버는 각 이벤트에 대한 메시지를 생성하여 클라이언트 터미널로 보냅니다. 그런 고로 이는 겉보기에 하나로 보이는 이벤트에 대해서 OnTrade() 함수를 여러 번 호출 할 수 있는 것입니다. 다음은 MetaTrader 5 플랫폼의 거래 하위 시스템에서 주문 처리 절차의 간단한 예입니다.

예를 들면 다음과 같습니다. EURUSD 10 랏을 매수하기위한 보류 주문이 실행되기를 기다리는 동안 1, 4, 5 랏 매도에 대한 반대 오퍼가 나타납니다. 이 세 가지 요청은 동시에 10개의 랏이라는 필요 거래량을 제공하게 되므로 주문체결정책이 부분적으로 거래 작업을 수행 할 수있는 경우 하나씩 실행됩니다.

4개의 주문을 실행한 결과 서버는 기존의 반대 요청을 기반으로 1, 4, 5 랏의 3건의 거래를 수행하게 됩니다. 이 경우 얼마나 많은 거래 이벤트가 생성됩니까? 첫 번째 반대 요청은 1 랏의 거래로 이어질 것입니다. 이것이 첫 번째 거래 이벤트입니다 (1 랏 거래). 그러나 10 랏 구매를 위한 대기 주문도 변경되었습니다. 즉, 이제 EURUSD 9 랏을 매수하는 주문이 되는 것입니다. 보류중인 주문의 거래량 변경이 두 번째 거래 이벤트 (보류중인 주문의 거래량 변경)입니다.

거래 이벤트 생성

작성자: MetaQuotes

 

몇 가지 사항을 명확히 하고자 합니다.

1. 이 글은 주문 확인() 함수가 요청의 1차 확인을 위한 것이며, 주문 확인() 함수를 통한 1차 확인은 터미널이 아닌 서버 측에서 직접 수행한다는 것을 암시하고 있습니다. 이것이 맞나요?

Документация по MQL5: Торговые функции / OrderCheck
Документация по MQL5: Торговые функции / OrderCheck
  • www.mql5.com
Торговые функции / OrderCheck - Документация по MQL5
 

2. 참고서에는 OrderSend() 함수에 대해 "기본 구조 확인에 성공하면 true가 반환된다"고 명시되어 있습니다. 이를 통해 요청이 올바른지 확인한 후 즉시 참이 반환된다는 결론을 내릴 수 있습니다.

그러나 조금 아래에 "주문이 거래 서버에서 성공적으로 수락되면 OrderSend() 함수는 참을 반환합니다"라는 메모가 추가되었습니다. 이 메모는 서버가 주문을 수락한 후에만 참이 반환된다는 것을 의미합니다.

한편, 요청이 올바른지 이미 확인되었지만 브로커가 아직 수락하지 않은 상황이 있을 수 있습니다. 따라서 OrderSend() 함수가 참을 반환하는 시점이 언제인지, 즉 요청의 정확성을 확인한 직후인지 아니면 서버가 주문을 수락한 후에만 참을 반환하는지 명확히 알려주시기 바랍니다.

Документация по MQL5: Торговые функции / OrderSend
Документация по MQL5: Торговые функции / OrderSend
  • www.mql5.com
Торговые функции / OrderSend - Документация по MQL5
 
Yedelkin:

몇 가지 사항을 명확히 하고자 합니다.

1. 이 글에서는 주문 확인() 함수가 요청의 1차 확인을 위한 것이며, 주문 확인() 함수를 통한 1차 확인은 터미널이 아닌 서버(서버 측)에서 직접 수행한다고 되어 있습니다. 맞는 말인가요?

제가 알기로는 클라이언트 터미널 측에서 처리가 수행되는 것으로 알고 있습니다.

이는 다음 게시물에서도 확인됩니다.

 

3. 기사에는 "거래 서버에 접수된 요청은 주문의 형태로 저장되며, 시장가로 대기 중이거나 즉시 체결될 수 있다"고 명시되어 있습니다.

아시다시피 즉시 체결은 세 가지 시장가 주문 체결 모드 중 하나입니다. 그렇다면 시장가 체결과 요청 체결 모드에서 시장가 주문은 어떻게 될까요? "거래 서버에 접수된 요청은 주문으로 저장되며, 이는 대기 주문 또는 시장가 즉시 체결 주문이 될 수 있다"고 일반화할 수 있을까요?

 
Interesting:

제가 알기로는 클라이언트 터미널 측에서 처리가 수행됩니다.

이는 다음 게시물에서도 확인됩니다.

공식 답변을 기다리는 것이 좋겠습니다. 언제나 그렇듯이 추가 정보를 제공해 주셔서 감사합니다. 저도 그렇게 생각했습니다.

부록. 이 질문에서 무엇이 저를 혼란스럽게 했는지 깨달았습니다. 이 글에서 "기본 처리"라는 문구는 OrderCheck() 함수에 대한 참조로 제공되며, 저는 이 참조를 액면 그대로 받아들였습니다.

 
Yedelkin:

몇 가지 사항을 명확히 하고자 합니다.

1. 이 글에서는 주문 확인() 함수가 요청의 1차 확인을 위한 것이며, 주문 확인() 함수를 통한 1차 확인은 터미널이 아닌 서버(서버 측)에서 직접 수행한다고 되어 있습니다. 이것이 맞나요?

문서에 따르면 1차 내부 검사는 터미널에서 수행된다고 나와 있습니다. 주문 확인()은 터미널에서도 작동하며 서버로 전송되는 것은 없습니다.
 
Rosh:
문서에 따르면 초기 확인은 터미널에서 수행된다고 합니다. 주문 확인() 역시 터미널에서 작동하며 서버로 전송되는 것은 없습니다.

기사에는 "요청을 보낸 후 서버에 도착하여 초기 확인을 거칩니다"라고 나와 있습니다.

또한 기사에서 "1차 처리"라는 문구가 OrderCheck() 함수에 대한 참조로 제공된다는 사실에 혼란스러웠기 때문에 다시 생각하지 않고 이 참조를 액면 그대로 받아들였습니다.

 
Yedelkin:

2.

한편, 요청이 올바른지 이미 확인되었지만 브로커가 아직 수락하지 않은 상황이 있을 수 있습니다. 따라서 OrderSend() 함수가 참을 반환하는 정확한 시점이 언제인지, 즉 요청의 정확성을 확인한 직후인지 아니면 서버가 주문을 수락한 후에만 반환하는지 명확히 알려주세요.

올바른 요청이 서버에 의해 수락되고 응답은 MqlTradeResult 구조의 리코드 필드( https://www.mql5.com/ko/docs/constants/errorswarnings/enum_trade_return_codes)에 있는 터미널로 전송됩니다.

코드

식별자

설명

10008

TRADE_RETCODE_PLACED

주문 완료

Документация по MQL5: Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений / Коды возврата торгового сервера
Документация по MQL5: Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений / Коды возврата торгового сервера
  • www.mql5.com
Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений / Коды возврата торгового сервера - Документация по MQL5
 
Rosh:

서버에서 올바른 요청을 수락하면 MqlTradeResult 구조의 리코드 필드( https://www.mql5.com/ko/docs/constants/errorswarnings/enum_trade_return_codes)에 있는 터미널로 응답이 전송됩니다.

코드

식별자

설명

10008

TRADE_RETCODE_PLACED

주문이 체결됨

서버가 주문을 수락(체결) 한 후에만 OrderSend() 함수가 참을 반환한다는 말씀이신가요?
 
Yedelkin:


또한 기사에서 "초기 처리"라는 문구를 OrderCheck() 함수에 대한 참조로 제시하고 있다는 사실에 혼란스러웠고, 뒤늦게나마 그 참조를 액면 그대로 받아들였습니다.

저도 혼란스러웠습니다. 그래서 "1차 확인" 조합에서 해당 참조를 삭제했습니다.