English

MQL5の書き方(for MQL4デザイナー)

 

2024.11

林貴晴/AMSER Inc.

高速非同期発注

EA(Expert Advisor)の運用において、発注処理の高速化は収益性に直結する重要な要素です。特に短期間に連続して発注する場合、初回の注文から次の注文までのタイムラグがトレードの成果に影響を及ぼします。MetaTrader 4(MT4)では、OrderSend()関数を用いて発注を行いますが、この関数は同期処理であるため、サーバー応答を待つ間、プログラムが停止するという問題点があります。

MetaTrader 5(MT5)では、注文処理の仕組みが進化し、OrderSend()が部分的に非同期化されることで、サーバー応答待ちの時間が短縮されました。さらに、完全非同期で処理できるOrderSendAsync()関数が導入され、高頻度取引においてより効率的かつ高速な注文処理が実現されています。

 

それぞれの発注の流れ

MT4のOrderSend()関数では、サーバーに注文リクエストを送信した後、サーバー側で約定処理が行われます。サーバーが約定処理を終了すると、その結果をMT4に送信しますが、MT4が応答を受け取るまでプログラムは停止します。この仕組みにより、発注から約定確認までの間に大きな時間的ロスが発生します。

MT5のOrderSend()関数では、サーバーが注文リクエストを受信した時点で、その受信確認をMT5に返します。この間プログラムは一時的に停止しますが、約定処理はサーバー側で非同期的に進行するため、停止時間はMT4と比較して大幅に短縮されています。

MT5のOrderSendAsync()関数では、注文リクエストを送信するとサーバー応答を待たずにプログラムが継続します。この仕組みにより、連続発注が必要なシナリオでは最も高速な処理が可能です。ただし、約定結果が即時に返されないため、注文の状況を追跡するにはOnTradeTransaction()イベントハンドラを使用してモニタリングを行う必要があります。

機能・特徴 MT4
OrderSend()
MT5
OrderSend()
MT5
OrderSendAsync()
処理方法 完全同期 部分的非同期 完全非同期
サーバーの応答 リクエスト受付後、約定処理を実行し約定結果を返す リクエスト受領確認を返し、その後約定処理を実行 応答なし
プログラムの停止 約定結果が返るまで停止 リクエスト受領確認が返るまで停止 停止しない

 

取引結果構造体(MqlTradeResult)に格納される内容

OrderSend()関数、OrderSendAsync()関数共に、取引リクエスト構造体(MqlTradeRequest)を用いて発注リクエストを行い、その処理結果は取引リクエスト結果構造体(MqlTradeResult)に格納されます。それぞれの関数を使用した直後にMqlTradeResultに格納される情報は以下の通りです。

フィールド名 OrderSend() OrderSendAsync() 説明
retcode × 取引サーバーが返すリターンコード
deal × × 約定チケット番号(注文が約定された場合のみ格納)。約定後に取得可能
order × サーバーが注文を受け付けた場合に発行される注文チケット番号
volume × × 約定されたボリューム(ロット数)。約定後に取得可能
bid × × 現在のマーケットBID価格。発注直後には格納されない
ask × × 現在のマーケットASK価格。発注直後には格納されない
comment × 操作に対するブローカーコメント(任意)
request_id × 取引リクエストに対して端末側で設定される一意の識別子
retcode_external × × 外部取引システムのリターンコード。通常のMT5注文では使用されない

MT5のOrderSendAsync()を使用することで、MT4やMT5のOrderSend()に比べて、より高速な注文処理が可能です。ただし、証券会社が設定している最大同時リクエスト数を超える場合、注文が拒否される可能性があるため注意が必要です。
OrderSendAsync()関数を用いた非同期処理は、連続発注を行うEAの処理時間を短縮し、トレード効率を向上させます。
EAの特性やトレード戦略に応じて、OrderSend()とOrderSendAsync()を使い分けることで、高速な注文処理とシステムリソースの効率的な活用が期待できます。

 

執筆者紹介
林貴晴

林 貴晴(AMSER株式会社代表取締役)

内資系薬品会社で約10年勤務の後、
外資系製薬会社(現IQVIA及びGSK)で合計約10年を勤務
その後EA AMSERを開発し、その成績を評価され、株式会社ゴゴジャンの部長として抜擢。
現在はAMSER株式会社代表取締役。