MQL5注文関数・取引構造体辞典|OrderSend・MqlTradeRequest・MqlTradeResultの基本
MQL5でEAの注文処理を作る場合、まず理解しておきたいのが、OrderSend、OrderCheck、MqlTradeRequest、MqlTradeResult、MqlTradeCheckResultの関係です。
MQL5では、注文内容を構造体へ入れて取引サーバーへ送信し、その結果をretcode、order、deal、commentなどで確認します。MQL4のOrderSend感覚だけで扱うと、注文送信、注文受付、約定、決済、履歴反映を混同しやすくなります。
この記事では、MQL5の注文関数と取引構造体を、EA開発や不具合調査で確認しやすい辞典形式で整理します。公式リファレンスの代わりに丸暗記するためではなく、どの関数・構造体を、どの場面で使い、どの戻り値とログを確認するかを整理するための記事です。
注意:この記事はMQL5開発・EA動作確認・不具合調査のための技術解説です。特定の売買判断、推奨エントリー、推奨ロット、推奨銘柄、利益保証、勝率保証、損失回避保証を行うものではありません。実運用前には、必ずデモ環境や検証環境で動作を確認してください。
MQL5の注文処理は「関数」と「構造体」で分けて理解する
MQL5の注文処理は、単にOrderSendを呼び出すだけではありません。注文内容をMqlTradeRequestへまとめ、必要に応じてOrderCheckで事前確認し、OrderSendでサーバーへ送信し、MqlTradeResultで結果を確認します。
特にEA開発では、発注条件が成立したこと、注文リクエストを送信したこと、取引サーバーに受け付けられたこと、約定したこと、ポジションや履歴へ反映されたことを分けてログ化することが重要です。
| 段階 | 使うもの | 役割 | 確認すること |
|---|---|---|---|
| 1 | MqlTradeRequest | 注文内容を入れる構造体 | 銘柄、ロット、注文種別、価格、SL、TP、deviation、magic、comment |
| 2 | OrderCheck | 注文前チェック | 証拠金、余剰証拠金、check.retcode、check.comment |
| 3 | MqlTradeCheckResult | OrderCheckの結果を受け取る構造体 | retcode、margin、margin_free、margin_level、comment |
| 4 | OrderSend | 取引サーバーへリクエストを送信する関数 | 関数戻り値、GetLastError、result.retcode |
| 5 | MqlTradeResult | OrderSendの結果を受け取る構造体 | retcode、order、deal、price、volume、comment |
| 6 | Position / History | 注文後の現在状態・履歴を確認する領域 | PositionSelect、HistorySelect、deal、order、profit、magic |
OrderSend
OrderSendは、MqlTradeRequestで作成した注文リクエストを取引サーバーへ送信する関数です。
OrderSendの戻り値がtrueでも、必ずしも期待どおりの約定が完了したとは限りません。MqlTradeResult.retcode、order、deal、commentを確認し、必要に応じてPositionやHistoryも確認します。
| 項目 | 内容 |
|---|---|
| 主な用途 | 新規成行注文、指値・逆指値注文、決済、SL/TP変更、注文取消など |
| 主な確認値 | OrderSend戻り値、GetLastError、result.retcode、result.order、result.deal、result.comment |
| よくある失敗 | ロット不正、証拠金不足、SL/TP距離不正、価格不正、filling方式不一致、取引時間外 |
| 確認ログ | ORDER_SEND、ORDER_RESULT、TRADE_RESULT、RETCODE_CHECK、Journalログ |
OrderSendで確認すること
| 確認対象 | 確認内容 | 理由 |
|---|---|---|
| request.action | TRADE_ACTION_DEAL、TRADE_ACTION_PENDING、TRADE_ACTION_SLTPなど | 実行したい処理種別と一致しているか確認するため |
| request.symbol | 対象銘柄 | チャート銘柄、発注対象、suffix違いを確認するため |
| request.volume | 発注ロット | 最小ロット、最大ロット、lot stepに合っているか確認するため |
| request.type | BUY / SELL / pending種別 | 方向や注文種別の誤りを防ぐため |
| request.price | 発注価格 | 成行、指値、逆指値で必要な価格の意味が異なるため |
| request.sl / request.tp | SL / TP価格 | StopsLevel、FreezeLevel、価格方向の確認に必要なため |
| request.type_filling | 約定方式 | 銘柄仕様と合っていないとINVALID_FILLになりやすいため |
| result.retcode | 取引サーバー側の結果コード | 注文拒否、約定、保留、価格変更などを確認するため |
OrderCheck
OrderCheckは、OrderSendの前に注文内容をチェックするための関数です。証拠金、余剰証拠金、注文条件の妥当性を確認できます。
OrderCheckは、すべての失敗を完全に防ぐものではありません。OrderCheckで問題がなくても、OrderSend時点の価格変動、取引時間、サーバー応答、filling方式、外部環境によって失敗する場合があります。
| 項目 | 内容 |
|---|---|
| 主な用途 | 発注前の証拠金確認、ロット確認、リスク確認、事前validation |
| 主な確認値 | check.retcode、check.margin、check.margin_free、check.margin_level、check.comment |
| よくある失敗 | 証拠金不足、volume不正、価格不正、SL/TP不正 |
| 確認ログ | ORDER_CHECK、MARGIN_CHECK、LOT_CHECK、REQUEST_VALIDATE |
OrderCheckを使う場面
| 場面 | 確認内容 | 補足 |
|---|---|---|
| ロット計算後 | 必要証拠金、余剰証拠金、volumeの妥当性 | ロット正規化後に確認します。 |
| 成行発注前 | 現在価格、証拠金、取引可能状態 | 価格変動があるため、OrderSend直前にもtick確認が必要です。 |
| pending order前 | 注文価格、StopsLevel、注文種別 | BUY LIMIT / SELL LIMIT / BUY STOP / SELL STOPの価格方向に注意します。 |
| SL/TP設定前 | StopsLevel、FreezeLevel、価格方向 | SL/TP変更はPositionModifyやTRADE_ACTION_SLTPとも関係します。 |
MqlTradeRequest
MqlTradeRequestは、注文内容を格納する構造体です。OrderSendやOrderCheckへ渡す前に、必要なフィールドへ値を設定します。
requestの内容が不十分、または銘柄仕様に合っていない場合、OrderCheckやOrderSendで失敗します。EA開発では、requestを作成した時点で主要項目をログに残すと、原因調査がしやすくなります。
| フィールド | 用途 | 確認ポイント |
|---|---|---|
| action | 取引操作の種類 | 新規注文、pending、SL/TP変更、注文削除などの処理種別を指定します。 |
| symbol | 対象銘柄 | チャート銘柄と同じか、suffixや別銘柄指定がないか確認します。 |
| volume | ロット数 | SYMBOL_VOLUME_MIN、SYMBOL_VOLUME_STEP、SYMBOL_VOLUME_MAXに合わせます。 |
| type | 注文種別 | ORDER_TYPE_BUY、ORDER_TYPE_SELL、pending order種別などを指定します。 |
| price | 注文価格 | 成行、指値、逆指値で意味が異なります。 |
| sl | 損切り価格 | BUYとSELLで価格方向が異なります。 |
| tp | 利確価格 | StopsLevel未満にならないよう確認します。 |
| deviation | 許容価格差 | 成行注文時の価格変動許容に関係します。 |
| type_filling | 約定方式 | 銘柄のSYMBOL_FILLING_MODEと整合させます。 |
| magic | EA識別番号 | EA別、ロジック別、チャート別の識別に使います。 |
| comment | 注文コメント | 履歴確認やサポート時の補助になります。ただし長すぎる文字列は避けます。 |
MqlTradeResult
MqlTradeResultは、OrderSendの結果を受け取る構造体です。注文が成功したか、拒否されたか、どのticketが発行されたかを確認するために使います。
OrderSendの戻り値だけで判断せず、MqlTradeResultの各値を確認します。特にretcode、order、deal、commentは重要です。
| フィールド | 用途 | 確認ポイント |
|---|---|---|
| retcode | 取引サーバー側の結果コード | TRADE_RETCODE_DONE、INVALID_VOLUME、NO_MONEYなどを確認します。 |
| deal | 約定ticket | 成行で約定した場合などに確認します。pendingでは0の場合があります。 |
| order | 注文ticket | pending orderや注文受付の追跡に使います。 |
| volume | 約定数量 | 部分約定や想定ロットとの差を確認します。 |
| price | 約定価格または処理価格 | リクエスト価格との差、price changedの確認に使います。 |
| comment | サーバーコメント | 拒否理由や補足情報が入る場合があります。 |
MqlTradeCheckResult
MqlTradeCheckResultは、OrderCheckの結果を受け取る構造体です。発注前の余剰証拠金、必要証拠金、チェック結果を確認できます。
| フィールド | 用途 | 確認ポイント |
|---|---|---|
| retcode | OrderCheckの結果コード | 発注条件が通るかどうかを確認します。 |
| balance | 残高 | 発注前の口座状態確認に使います。 |
| equity | 有効証拠金 | 含み損益込みの口座状態を確認します。 |
| margin | 必要証拠金 | 発注に必要な証拠金を確認します。 |
| margin_free | 余剰証拠金 | 発注後の余剰証拠金を確認します。 |
| margin_level | 証拠金維持率 | リスク管理や発注制限の確認に使います。 |
| comment | チェック結果コメント | 失敗理由や補足情報を確認します。 |
TRADE_RETCODE
TRADE_RETCODEは、取引サーバー側の処理結果を示すコードです。注文関連の不具合調査では、GetLastErrorだけでなくTRADE_RETCODEを確認する必要があります。
| retcode例 | 意味の目安 | よくある原因 | 確認すること |
|---|---|---|---|
| TRADE_RETCODE_DONE | 処理完了 | 正常処理 | deal、order、Position、Historyを確認します。 |
| TRADE_RETCODE_PLACED | 注文配置 | pending orderなど | order ticketと注文状態を確認します。 |
| TRADE_RETCODE_REJECT | 拒否 | サーバー側拒否、条件不備 | Journalログ、request内容、取引条件を確認します。 |
| TRADE_RETCODE_INVALID_VOLUME | ロット不正 | 最小ロット未満、step不一致、最大ロット超過 | SYMBOL_VOLUME_MIN、SYMBOL_VOLUME_STEP、SYMBOL_VOLUME_MAXを確認します。 |
| TRADE_RETCODE_INVALID_PRICE | 価格不正 | 価格更新不足、Bid/Ask違い、桁数不一致 | SymbolInfoTick、Digits、NormalizeDoubleを確認します。 |
| TRADE_RETCODE_INVALID_STOPS | SL/TP不正 | StopsLevel未満、価格方向不正、FreezeLevel制限 | SYMBOL_TRADE_STOPS_LEVEL、SYMBOL_TRADE_FREEZE_LEVEL、Bid/Askを確認します。 |
| TRADE_RETCODE_NO_MONEY | 証拠金不足 | ロット過大、余剰証拠金不足 | OrderCheck、OrderCalcMargin、AccountInfoDoubleを確認します。 |
| TRADE_RETCODE_MARKET_CLOSED | 市場休場 | 取引時間外、休場、銘柄停止 | 取引時間、SYMBOL_TRADE_MODE、Journalログを確認します。 |
| TRADE_RETCODE_TRADE_DISABLED | 取引不可 | EA取引不可、銘柄取引不可、口座制限 | AutoTrading、MQLInfoInteger、TerminalInfoInteger、銘柄仕様を確認します。 |
| TRADE_RETCODE_INVALID_FILL | filling方式不一致 | type_fillingが銘柄に合っていない | SYMBOL_FILLING_MODE、request.type_filling、CTrade.SetTypeFillingを確認します。 |
| TRADE_RETCODE_PRICE_CHANGED | 価格変動 | 発注時と約定時の価格差 | deviation、最新tick、約定環境を確認します。 |
| TRADE_RETCODE_TOO_MANY_REQUESTS | リクエスト過多 | 短時間に注文や変更を連続送信 | 送信間隔、重複発注ガード、OnTick処理を確認します。 |
注文失敗時に見るログ
注文失敗時は、EA内部ログとMT5端末側ログを分けて確認します。EA側ではrequestとresult、端末側ではJournalログ、取引サーバー側の応答を確認します。
| ログ名 | 目的 | 出すタイミング | 含めたい項目 |
|---|---|---|---|
| ORDER_CHECK | OrderCheck結果確認 | OrderSend前 | check.retcode、margin、margin_free、margin_level、comment |
| ORDER_SEND | 送信request確認 | OrderSend直前 | symbol、action、type、volume、price、sl、tp、magic |
| ORDER_RESULT | OrderSend結果確認 | OrderSend直後 | send_return、last_error、retcode、order、deal、comment |
| EXEC_BLOCK | EA側で発注を止めた理由 | OrderSend前にブロックした時 | spread、session、risk、auth、external control、duplicate block |
| SYMBOL_SPEC | 銘柄仕様確認 | OnInitまたは発注前 | digits、point、volume_min、volume_step、stops_level、filling_mode |
| POSITION_SNAPSHOT | 発注後の保有状態確認 | OrderSend後、OnTradeTransaction後 | ticket、symbol、type、volume、price_open、sl、tp、profit、magic |
| HISTORY_AUDIT | 約定・決済履歴確認 | 取引後、日次集計時 | deal、order、DEAL_ENTRY、DEAL_TYPE、profit、commission、swap |
EAが注文しない時に確認すること
EAが注文しない場合、注文関数の失敗だけが原因とは限りません。OrderSendへ到達する前に、EA側の条件で発注を止めている場合があります。
| 確認項目 | 内容 | 見るべきログ |
|---|---|---|
| シグナル成立 | エントリー条件が成立しているか | SIGNAL、ENTRY_SIGNAL、SCORE、GATE |
| スプレッド制限 | 現在スプレッドが上限内か | SPREAD_CHECK、EXEC_BLOCK |
| 取引時間制限 | EA側の取引時間、ブローカー取引時間が合っているか | SESSION_CHECK、MARKET_CLOSED、Journalログ |
| ロット条件 | 最小ロット、最大ロット、stepに合っているか | LOT_CHECK、SYMBOL_SPEC |
| 証拠金 | 必要証拠金と余剰証拠金に問題がないか | MARGIN_CHECK、OrderCheck |
| SL/TP距離 | StopsLevel、FreezeLevelに抵触していないか | STOPS_CHECK、TRADE_RETCODE_INVALID_STOPS |
| filling方式 | 銘柄仕様とtype_fillingが一致しているか | FILLING_CHECK、TRADE_RETCODE_INVALID_FILL |
| 重複発注ガード | 同一バー、同一方向、同一Magicの重複を止めていないか | DUPLICATE_BLOCK、ENTRY_BLOCK |
| 外部制御・認証 | 外部制御や認証で新規Entryが止まっていないか | AUTH_STATE、EXTCTRL_STATE、ENTRY_PERMISSION |
EA利用者向けの確認ポイント
EAがエントリーしない場合でも、必ずしも不具合とは限りません。EA側のフィルター、スプレッド制限、取引時間制限、証拠金不足、銘柄仕様、ブローカー側の取引制限で発注を止めている場合があります。
| 確認すること | 内容 | 開発者へ伝えるとよい情報 |
|---|---|---|
| EA名・バージョン | 設置しているEA名と版 | 対象ファイルと仕様を特定するため |
| 銘柄・時間足 | チャート左上のsymbol、M1/M5/M15など | 銘柄仕様、価格取得、時間足条件に関係します。 |
| setファイル | 読み込んだ設定ファイル | ロット、フィルター、時間設定、通知設定の再現に必要です。 |
| Expertsログ | EA内部ログ | OrderCheck、OrderSend、EXEC_BLOCK、retcode確認に使います。 |
| Journalログ | MT5端末側ログ | 取引サーバー側の拒否、接続、取引時間の確認に使います。 |
| 取引タブ・履歴タブ | 注文、ポジション、履歴の表示 | order、deal、positionの状態確認に使います。 |
| スクリーンショット | チャート、設定、ログ、取引タブ | 表示状態とログを照合するために役立ちます。 |
MQL5開発者向けの実装確認ポイント
MQL5開発では、signal、execution、risk、exit、auth、external control、notificationを分けて扱うと、注文失敗時の原因を追いやすくなります。
| 責務 | 主な確認内容 | 注文処理との関係 | 確認ログ |
|---|---|---|---|
| signal | 売買条件、インジケーター条件、価格条件 | 注文を出す前の条件成立を確認します。 | SIGNAL、GATE、SCORE、ENTRY_SIGNAL |
| risk | ロット、証拠金、スプレッド、最大ポジション | OrderSend前に発注可能か確認します。 | LOT_CHECK、MARGIN_CHECK、SPREAD_CHECK |
| execution | MqlTradeRequest、OrderCheck、OrderSend、MqlTradeResult | 実際の注文送信と結果確認を担当します。 | ORDER_CHECK、ORDER_SEND、ORDER_RESULT |
| exit | 決済、SL/TP変更、トレーリング | ポジション管理と決済リクエストを扱います。 | EXIT_CHECK、POSITION_CLOSE、SLTP_MODIFY |
| auth | 利用許可、ライセンス、口座認証 | 新規注文を許可するかを決める場合があります。 | AUTH_STATE、AUTH_RESULT |
| external control | 外部シート、外部API、稼働ON/OFF | 新規Entry停止や方向制御に関係します。 | EXTCTRL_STATE、ENTRY_PERMISSION |
| notification | Discord通知、ログ通知、外部通知 | 注文成否とは別責務として扱います。 | NOTIFY_SEND、HTTP_STATUS |
実装時の注意点
- OrderSendの戻り値だけで成功判定しない
- MqlTradeResult.retcodeを必ず確認する
- result.orderとresult.dealの意味を混同しない
- Order、Position、Deal、Historyを分けて確認する
- ロットはSYMBOL_VOLUME_MIN、SYMBOL_VOLUME_STEP、SYMBOL_VOLUME_MAXに合わせる
- SL/TPはStopsLevelと価格方向を確認する
- filling方式は銘柄仕様に合わせる
- signal不成立とexecution失敗を同じログにしない
- 通知失敗と注文失敗を混同しない
- 同一バー重複発注、同一方向重複発注のガードを入れる
注文関数・取引構造体の辞典表
| 関数/構造体/フィールド | 役割 | 使う場面 | 確認値 | 出やすいエラー | 関連ログ |
|---|---|---|---|---|---|
| OrderSend | 注文リクエストを送る | 新規注文、決済、SL/TP変更、注文取消 | bool戻り値、result.retcode、order、deal | INVALID_VOLUME、INVALID_STOPS、NO_MONEY、INVALID_FILL | ORDER_SEND、ORDER_RESULT、ORDER_FAIL |
| OrderCheck | 注文前の妥当性確認 | 発注前の証拠金・ロット・価格確認 | check.retcode、margin、margin_free、comment | 証拠金不足、ロット不正、SL/TP距離不正 | ORDER_CHECK、MARGIN_CHECK |
| MqlTradeRequest | 注文内容の入れ物 | OrderSend / OrderCheck前 | action、symbol、volume、type、price、sl、tp | request不備、type不一致、価格不正 | REQUEST_DUMP、EXEC_ROUTE |
| MqlTradeResult | 注文結果の入れ物 | OrderSend後 | retcode、order、deal、price、volume、comment | 約定未完了、拒否、部分約定 | ORDER_RESULT、RETCODE_CHECK |
| MqlTradeCheckResult | 注文前チェック結果 | OrderCheck後 | retcode、balance、equity、margin、margin_free | 証拠金不足、volume不正 | ORDER_CHECK_RESULT |
| request.type_filling | 約定方式指定 | ブローカー仕様に合わせる時 | FOK、IOC、RETURN | TRADE_RETCODE_INVALID_FILL | FILLING_CHECK、SYMBOL_SPEC |
| request.magic | EA識別番号 | EA別・ロジック別管理 | magic値 | 他EAとの混同、決済対象ミス | MAGIC_CHECK、POSITION_SCOPE |
| request.comment | 注文コメント | 履歴・サポート時の識別補助 | comment文字列 | 長すぎるコメント、識別不能 | ORDER_COMMENT、HISTORY_AUDIT |
| result.retcode | 取引サーバー結果コード | OrderSend後 | TRADE_RETCODE系定数 | 拒否、価格変動、証拠金不足、取引不可 | RETCODE_CHECK、TRADE_RESULT |
| result.order | 注文ticket | 注文受付・pending追跡 | order ticket | orderとdealの混同 | ORDER_TICKET、ORDER_AUDIT |
| result.deal | 約定ticket | 約定確認 | deal ticket | pending時0、未約定との混同 | DEAL_TICKET、HISTORY_AUDIT |
開発依頼前に整理する情報
注文処理や取引構造体まわりの不具合調査・改修依頼を行う場合は、次の情報を整理してください。
| 整理する情報 | 内容 | 理由 |
|---|---|---|
| 対象EA名・バージョン | mq5/ex5名、商品名、バージョン | 対象ファイルと仕様を特定するため |
| 対象機能 | 新規注文、決済、SL/TP変更、pending、ナンピンなど | 確認するrequest.actionや処理経路を絞るため |
| 対象銘柄・時間足 | symbol、timeframe、ブローカー表記 | 銘柄仕様、価格、スプレッド、StopsLevelを確認するため |
| エラー内容 | GetLastError、TRADE_RETCODE、表示メッセージ | 端末側エラーと取引サーバー側結果を分けるため |
| Expertsログ | EA内部ログ、OrderCheck、OrderSend、retcode | EA内部の発注経路を追うため |
| Journalログ | 端末側・サーバー側ログ | 取引サーバー拒否や接続状態を確認するため |
| setファイル | Inputs設定 | ロット、SL/TP、スプレッド、時間制御などの再現に必要です。 |
| スクリーンショット | チャート、設定画面、ログ、取引タブ、履歴タブ | 表示状態とログを照合するため |
| 再現手順 | どの操作・条件で発生したか | OnInit、OnTick、OnTimer、OnTradeTransactionなどの発生箇所を特定するため |
送ってはいけない情報:口座パスワード、投資家パスワード、Webhook URL、GAS URL、APIキー、認証トークン、口座番号の全桁、個人情報は、そのまま送らないでください。必要に応じて必ずマスクしてください。
関連するMQL5技術辞典
注文処理の不具合は、OrderSendだけでなく、エラーコード、関数分類、ポジション・履歴用語、列挙型、標準ライブラリの理解とも関係します。関連するMQL5技術辞典もあわせて確認してください。
| 技術辞典 | 確認できる内容 | リンク |
|---|---|---|
| MQL5エラーコード辞典 | GetLastError、TRADE_RETCODE、コンパイルエラー、WebRequest、Strategy Tester関連エラーを確認できます。 | MQL5エラーコード辞典 |
| MQL5関数辞典 | EA・インジケーター開発で使う主要関数を、目的別・確認ログ別に確認できます。 | MQL5関数辞典 |
| MQL5ポジション・注文・約定・履歴用語辞典 | Order、Position、Deal、History、ticket、magic、commentなど、取引管理で混同しやすい用語を確認できます。 | MQL5ポジション・注文・約定・履歴用語辞典 |
| MQL5インジケーター関数辞典 | iCustom、CopyBuffer、SetIndexBuffer、OnCalculate、IndicatorRelease、buffer index、shiftなどを確認できます。 | MQL5インジケーター関数辞典 |
| MQL5時系列・価格取得関数辞典 | CopyRates、CopyClose、iClose、iTime、SymbolInfoDouble、TimeCurrentなどを確認できます。 | MQL5時系列・価格取得関数辞典 |
| MQL5ファイル操作関数辞典 | FileOpen、FileRead、FileWrite、FileClose、FILE_COMMON、CSV出力、ログ保存を確認できます。 | MQL5ファイル操作関数辞典 |
| MQL5チャートオブジェクト辞典 | ObjectCreate、ObjectSetInteger、ObjectSetString、OBJ_LABEL、OBJ_BUTTON、OnChartEventなどを確認できます。 | MQL5チャートオブジェクト辞典 |
| MQL5列挙型・定数辞典 | ENUM_TIMEFRAMES、ENUM_ORDER_TYPE、ORDER_FILLING、POSITION_TYPE、SymbolInfo系定数などを確認できます。 | MQL5列挙型・定数辞典 |
| MQL5標準ライブラリ辞典 | CTrade、CPositionInfo、COrderInfo、CDealInfo、CSymbolInfo、CAccountInfoなどを確認できます。 | MQL5標準ライブラリ辞典 |
確認ポイント:OrderSendの戻り値だけで原因を断定せず、MqlTradeRequest、MqlTradeResult、OrderCheck、TRADE_RETCODE、GetLastError、Expertsログ、Journalログ、Position、Historyをセットで確認してください。
関連する技術講座
| 関連ページ | 確認できる内容 |
|---|---|
| 技術講座ハブ | MT5・MQL5・EA開発関連の技術講座一覧を確認できます。 |
| MQL5開発入門 | MQL5開発の基本構造、EA・インジケーター開発の入口を確認できます。 |
| MQL5注文・ポジション・履歴管理完全ガイド | Order、Position、Deal、Historyの実装確認に使えます。 |
| MQL5時系列データ・価格取得完全ガイド | CopyRates、iClose、SymbolInfo系の確認に使えます。 |
| MQL5ファイル操作・CSVログ出力完全ガイド | FileOpen、FileWrite、CSV出力、FILE_COMMONの確認に使えます。 |
| MQL5標準ライブラリ・CTrade完全ガイド | CTradeやInfo系クラスの確認に使えます。 |
| MT5開発依頼前に用意する資料まとめ | 開発依頼前に整理するログ、setファイル、再現条件を確認できます。 |
FAQ
OrderSendの戻り値がtrueなら注文成功ですか?
OrderSendの戻り値だけでは判断しない方が安全です。MqlTradeResult.retcode、order、deal、comment、Position、History、Journalログを合わせて確認してください。
OrderCheckで問題がなければOrderSendも必ず成功しますか?
必ず成功するとは限りません。OrderCheck後に価格が変わる、取引時間外になる、サーバー側で拒否される、filling方式が合わないなどの理由でOrderSendが失敗する場合があります。
GetLastErrorとTRADE_RETCODEはどちらを見ればよいですか?
両方を分けて確認します。GetLastErrorはMQL5実行時エラーの確認に使い、TRADE_RETCODEは取引サーバー側の結果確認に使います。注文関連ではTRADE_RETCODEの確認が特に重要です。
orderとdealは何が違いますか?
orderは注文、dealは約定を表します。pending orderではorder ticketが発行されても、まだdealがない場合があります。成行注文でも、注文受付と約定を分けて確認してください。
TRADE_RETCODE_INVALID_VOLUMEが出た場合は何を確認しますか?
SYMBOL_VOLUME_MIN、SYMBOL_VOLUME_STEP、SYMBOL_VOLUME_MAX、ロット正規化、口座条件、EA側のロット計算を確認してください。
TRADE_RETCODE_INVALID_STOPSが出た場合は何を確認しますか?
SL/TPの価格方向、StopsLevel、FreezeLevel、Bid/Ask、Digits、NormalizeDoubleを確認してください。BUYとSELLではSL/TPの方向が異なります。
TRADE_RETCODE_INVALID_FILLが出た場合は何を確認しますか?
request.type_fillingと銘柄のSYMBOL_FILLING_MODEを確認してください。CTradeを使っている場合はSetTypeFillingや銘柄仕様との整合も確認します。
EAが注文しない場合、注文関数だけ見ればよいですか?
いいえ。OrderSendへ到達する前に、シグナル不成立、スプレッド制限、取引時間制限、リスク制限、認証、外部制御、同一バー重複発注ガードで止まっている場合があります。EXEC_BLOCKやENTRY_PERMISSIONのログも確認してください。
開発依頼前に何を送ればよいですか?
EA名、バージョン、対象銘柄、時間足、setファイル、Expertsログ、Journalログ、スクリーンショット、再現手順を整理してください。口座番号、Webhook URL、GAS URL、APIキー、認証トークンなどは必ずマスクしてください。
まとめ
MQL5の注文処理では、OrderSend、OrderCheck、MqlTradeRequest、MqlTradeResult、MqlTradeCheckResult、TRADE_RETCODEの役割を分けて理解することが重要です。
OrderSendの戻り値だけで約定成功と判断せず、MqlTradeResult.retcode、order、deal、comment、Position、History、Journalログを合わせて確認してください。
注文できない原因は、注文関数の失敗だけでなく、ロット不正、証拠金不足、SL/TP距離不正、filling方式不一致、取引時間外、スプレッド制限、EA側の発注ガード、認証、外部制御などに分かれます。
不具合調査や開発依頼を行う場合は、EA名、バージョン、銘柄、時間足、setファイル、Expertsログ、Journalログ、スクリーンショット、再現手順を整理してください。

