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

- www.mql5.com
2. 참고서에는 OrderSend() 함수에 대해 "기본 구조 확인에 성공하면 true가 반환된다"고 명시되어 있습니다. 이를 통해 요청이 올바른지 확인한 후 즉시 참이 반환된다는 결론을 내릴 수 있습니다.
그러나 조금 아래에 "주문이 거래 서버에서 성공적으로 수락되면 OrderSend() 함수는 참을 반환합니다"라는 메모가 추가되었습니다. 이 메모는 서버가 주문을 수락한 후에만 참이 반환된다는 것을 의미합니다.
한편, 요청이 올바른지 이미 확인되었지만 브로커가 아직 수락하지 않은 상황이 있을 수 있습니다. 따라서 OrderSend() 함수가 참을 반환하는 시점이 언제인지, 즉 요청의 정확성을 확인한 직후인지 아니면 서버가 주문을 수락한 후에만 참을 반환하는지 명확히 알려주시기 바랍니다.

- www.mql5.com
문서에 따르면 초기 확인은 터미널에서 수행된다고 합니다. 주문 확인() 역시 터미널에서 작동하며 서버로 전송되는 것은 없습니다.
기사에는 "요청을 보낸 후 서버에 도착하여 초기 확인을 거칩니다"라고 나와 있습니다.
또한 기사에서 "1차 처리"라는 문구가 OrderCheck() 함수에 대한 참조로 제공된다는 사실에 혼란스러웠기 때문에 다시 생각하지 않고 이 참조를 액면 그대로 받아들였습니다.
2.
한편, 요청이 올바른지 이미 확인되었지만 브로커가 아직 수락하지 않은 상황이 있을 수 있습니다. 따라서 OrderSend() 함수가 참을 반환하는 정확한 시점이 언제인지, 즉 요청의 정확성을 확인한 직후인지 아니면 서버가 주문을 수락한 후에만 반환하는지 명확히 알려주세요.
올바른 요청이 서버에 의해 수락되고 응답은 MqlTradeResult 구조의 리코드 필드( https://www.mql5.com/ko/docs/constants/errorswarnings/enum_trade_return_codes)에 있는 터미널로 전송됩니다.
코드 | 식별자 | 설명 |
10008 | TRADE_RETCODE_PLACED | 주문 완료 |

- www.mql5.com
서버에서 올바른 요청을 수락하면 MqlTradeResult 구조의 리코드 필드( https://www.mql5.com/ko/docs/constants/errorswarnings/enum_trade_return_codes)에 있는 터미널로 응답이 전송됩니다.
코드 | 식별자 | 설명 |
10008 | TRADE_RETCODE_PLACED | 주문이 체결됨 |
또한 기사에서 "초기 처리"라는 문구를 OrderCheck() 함수에 대한 참조로 제시하고 있다는 사실에 혼란스러웠고, 뒤늦게나마 그 참조를 액면 그대로 받아들였습니다.
새로운 기고글 MetaTrader 5에서의 거래 이벤트 가 게재되었습니다:
거래 계정의 현재 상태를 모니터링한다는 것은 오픈 포지션과 주문을 통제한다는 것을 의미합니다. 거래 신호가 진정한 거래가 되기 전, 이는 거래 서버로의 요청으로써 클라이언트 터미널에서 전송되어야 하며, 이 때 거래 서버는 처리 대기 중인 주문 대기열에 배치될 것입니다. 거래 서버에 의한 수락하거나, 만료 시 삭제하거나, 거래 기준으로 거래를 수행하는 등과 관련된 이러한 모든 조치에는 거래 이벤트가 뒤따르게 되고, 이 때 거래 서버는 터미널에 이런 사항에 대해 알려주게 됩니다.
여러 이벤트의 또 다른 예는 단일 반대 오퍼에서 필요한 거래량 얻을 수 없는 경우 단일 주문을 기준으로 여러 거래를 수행하는 것입니다. 거래 서버는 각 이벤트에 대한 메시지를 생성하여 클라이언트 터미널로 보냅니다. 그런 고로 이는 겉보기에 하나로 보이는 이벤트에 대해서 OnTrade() 함수를 여러 번 호출 할 수 있는 것입니다. 다음은 MetaTrader 5 플랫폼의 거래 하위 시스템에서 주문 처리 절차의 간단한 예입니다.
예를 들면 다음과 같습니다. EURUSD 10 랏을 매수하기위한 보류 주문이 실행되기를 기다리는 동안 1, 4, 5 랏 매도에 대한 반대 오퍼가 나타납니다. 이 세 가지 요청은 동시에 10개의 랏이라는 필요 거래량을 제공하게 되므로 주문체결정책이 부분적으로 거래 작업을 수행 할 수있는 경우 하나씩 실행됩니다.
4개의 주문을 실행한 결과 서버는 기존의 반대 요청을 기반으로 1, 4, 5 랏의 3건의 거래를 수행하게 됩니다. 이 경우 얼마나 많은 거래 이벤트가 생성됩니까? 첫 번째 반대 요청은 1 랏의 거래로 이어질 것입니다. 이것이 첫 번째 거래 이벤트입니다 (1 랏 거래). 그러나 10 랏 구매를 위한 대기 주문도 변경되었습니다. 즉, 이제 EURUSD 9 랏을 매수하는 주문이 되는 것입니다. 보류중인 주문의 거래량 변경이 두 번째 거래 이벤트 (보류중인 주문의 거래량 변경)입니다.
작성자: MetaQuotes