【これで差がつく!MT5のひと工夫】MQL5入門: OrderSend()関数

OrderSend()関数は、取引サーバにリクエストを送信し、取引操作を実行するために使用されます。

bool OrderSend()
MqlTradeRequest& request, // クエリ構造体
MqlTradeResult& result // 応答の構造体
);

パラメータ
request:クライアントの取引活動を記述した MqlTradeRequest タイプの構造体へのポインタ

result:取引が成功した場合の結果を記述したMqlTradeResult型の構造体へのポインタ(trueが返された場合)

戻り値
構造体の基本チェック(インデックスチェック)に成功した場合、true を返す。ただし、これは売買が成立したことを意味するものではありません。関数実行結果の詳細については、結果構造体のフィールドの解析が必要です

取引サーバーでは、取引依頼はいくつかの段階を経てチェックされます。まず、requestパラメータのすべての必須フィールドが正しく記入されているかどうかをチェックします。エラーがなければ、サーバーは注文を受理し、さらに処理を進めます。注文が取引サーバーに正常に受け入れられた場合、OrderSend()関数はtrueを返します。

取引サーバに送信する前に、requestをチェックすることをお勧めします。要求をチェックするには、OrderCheck()関数を使用します。これは、取引操作を実行するのに十分な資金があるかどうかをチェックし、取引要求のチェックの結果、多くの有用なパラメータを返します。

成行注文(MqlTradeRequest.action=TRADE_ACTION_DEAL)の場合、OrderSend()関数が成功しても、注文が執行された(適切な取引が行われた)ことにはならない。この場合、’true’ は、注文が取引システムに正常に配置され、さらに実行されることだけを意味します。取引サーバーは、OrderSend()呼び出しに対する応答を形成するときに、これらのデータを認識する場合、返された結果構造内の取引または注文フィールド値を埋めることができます。一般的に、注文に対応する取引実行のイベントは、OrderSend()呼び出しへの応答送信後に発生する可能性がある。したがって、どのような種類の取引依頼であっても、OrderSend()実行結果を受信した時点で、まず、取得した結果構造体中の retcode 取引サーバ応答コードと retcode_external 外部システム応答コード(必要な場合)を確認する必要がある。

OrderSend()関数によって送信されたサーバー上の取引要求の実行結果は、OnTradeTransactionハンドラによって追跡することができます。OnTradeTransaction ハンドラは、1つの取引要求を実行する際に複数回呼び出されることに注意する必要があります。

例えば、成行買い注文を送信すると、それが処理され、適切な買い注文が口座に作成され、その注文が執行されて未決済オープンのリストから削除され、注文履歴に追加され、適切な取引が履歴に追加され、新しいポジションが作成されるのです。OnTradeTransaction 関数は、これらの各イベントに対して呼び出されます。

ABOUTこの記事をかいた人

当サイトは、システムトレードに関する専門的な知識、技術、経験を皆様と共有することで、真剣なトレーダーの方々にインスピレーション(アイデアの源泉)の供給をいたします。トレーダーの競争力強化に焦点をあて、トレーディングシステムの構築を目的としてその普及に貢献します。 詳細は「概要とサービス内容」をご覧下さい。 ご要望はこちらで承ります。