MQL5でEAのログ設計を行う方法|OrderSend・retcode・GetLastErrorの確認
- MQL5でEAのログ設計を行う方法
- EAでログ設計が重要な理由
- signal・precheck・execution・resultを分ける
- 起動時に残したいログ
- OrderSend前に残したいログ
- MqlTradeRequestで確認したい項目
- MqlTradeResultとretcodeを確認する
- GetLastErrorで確認すること
- ENTRY_SKIP・ORDER_FAIL・CLOSE_FAILを分ける
- 決済時に残したいログ
- GOLD / XAUUSD対応EAで確認したいログ
- バックテスト時のログ設計
- ログ過多とログ不足を避ける
- 問い合わせ前に整理したいログ情報
- MQL5 EAログ設計の実務チェック表
- ログ設計はEAの再現性を高めるために行う
- ログ設計は発注前チェック・スプレッド実装・銘柄仕様とあわせて確認する
- OrderSendログは発注前チェックとセットで確認する
- GOLD / XAUUSD対応EAの導入前確認もあわせて確認する
MQL5でEAのログ設計を行う方法
MQL5でEAを開発する時は、エントリー条件や決済条件だけでなく、ログ設計が重要です。
EAがエントリーしない、注文に失敗する、決済されない、バックテストとデモ環境で挙動が違うといった場合、ログが不足していると原因を切り分けることが難しくなります。
このページでは、MQL5 EAでOrderSend、CTrade、MqlTradeRequest、MqlTradeResult、retcode、GetLastErrorを確認するためのログ設計を整理します。
このページで確認すること
- EAでログ設計が重要な理由
- signal、precheck、execution、resultを分ける考え方
- OrderSend前に残したいログ
- MqlTradeRequestで確認したい項目
- MqlTradeResultとretcodeの確認
- GetLastErrorで確認すること
- ORDER_SENT、ORDER_FAIL、ENTRY_SKIPの違い
- 決済時に残したいログ
- GOLD / XAUUSD対応EAで特に確認したいログ
- 問い合わせ前に整理したいログ情報
このページで扱わないこと
このページでは、売買判断、推奨エントリー、推奨ロット、利益保証、勝率保証、特定ブローカーへの誘導は行いません。
EAの動作確認、不具合切り分け、バックテスト比較、サポート前確認をしやすくするためのログ設計としてご確認ください。
EAでログ設計が重要な理由
EAのログは、単に動作状況を表示するためのものではありません。
ログは、EAがどの条件を通過し、どの条件で止まり、注文要求を送ったのか、送った後に成功したのか失敗したのかを確認するための検証材料です。
| ログがない時に起きやすい問題 | ログで確認できること |
|---|---|
| EAがエントリーしない理由が分からない | シグナル不成立、発注前見送り、注文失敗を分けられる |
| スプレッドで止まったのか分からない | SPREAD_BLOCKやENTRY_SKIPで確認できる |
| ロット不正や証拠金不足に気づきにくい | LOT_BLOCK、MARGIN_BLOCK、retcodeで確認できる |
| バックテスト結果の再現条件が残らない | EAバージョン、symbol、timeframe、set条件を残せる |
| 問い合わせ時に原因説明が難しい | 発生時刻、注文要求、retcode、GetLastErrorを整理できる |
signal・precheck・execution・resultを分ける
EAログ設計では、signal、precheck、execution、resultを分けて考えます。
この分離ができていないと、シグナルが出ていないのか、発注前チェックで止まったのか、注文送信後に失敗したのかが分かりにくくなります。
| 分類 | 役割 | 代表ログ |
|---|---|---|
| signal | BUY候補、SELL候補、WAITを判断する | SIGNAL_BUY、SIGNAL_SELL、SIGNAL_WAIT |
| precheck | 注文可能な状態か確認する | ORDER_PRECHECK_OK、SPREAD_BLOCK、LOT_BLOCK |
| execution | 注文要求を送る | ORDER_SEND_REQUEST、ORDER_SENT |
| result | 注文結果を確認する | ORDER_RESULT、ORDER_FAIL、TRADE_RETCODE |
| exit | 決済理由と決済結果を確認する | CLOSE_REQUEST、CLOSE_OK、CLOSE_FAIL |
ログ名を分けておくと、バックテストやデモ環境で問題が起きた時に、原因の場所を追いやすくなります。
起動時に残したいログ
EA起動時には、検証条件の前提をログに残します。
特にGOLD / XAUUSD対応EAでは、銘柄名、digits、point、tick value、contract size、volume step、spreadを確認できるログが重要です。
| ログ項目 | 確認内容 |
|---|---|
| INIT | EA名、バージョン、起動状態 |
| SYMBOL_SPEC | symbol、digits、point、tick value、contract size、volume step |
| INPUT_SUMMARY | 主要input、ロット、スプレッド上限、Magic Number |
| AUTH_STATE | 認証や利用許可の状態 |
| EXTCTRL_STATE | 外部制御や停止状態 |
起動時ログがあると、あとから「どのEA、どの銘柄、どの設定で動かしていたか」を確認しやすくなります。
OrderSend前に残したいログ
OrderSendやCTradeで注文を送る前には、注文要求の前提をログに残します。
発注前のログでは、シグナル条件だけでなく、スプレッド、ロット、証拠金、取引許可、最大ポジション数を確認します。
| ログ項目 | 確認内容 |
|---|---|
| SIGNAL_RESULT | BUY候補、SELL候補、WAITのどれか |
| ORDER_PRECHECK_START | 発注前チェックを開始した |
| SPREAD_CHECK | 現在スプレッドと上限値 |
| LOT_CHECK | requested lot、normalized lot、volume step |
| MARGIN_CHECK | 必要証拠金と余剰証拠金 |
| TRADE_ALLOWED_CHECK | 自動売買許可、trade mode、市場時間 |
| MAX_POSITION_CHECK | 対象symbol、対象Magicの保有数 |
OrderSend前にログを残しておくと、注文要求を送る前に止まった理由を確認できます。
MqlTradeRequestで確認したい項目
OrderSendを使う場合、MqlTradeRequestにどの内容を入れて注文要求を作ったかを確認します。
ログでは、すべての情報を毎回大量に出す必要はありませんが、発注失敗時にはrequest内容を追えるようにしておくことが重要です。
| 確認項目 | 確認する内容 |
|---|---|
| action | 新規注文、決済、変更などの注文種別 |
| symbol | 発注対象銘柄 |
| volume | 発注ロット |
| type | BUY、SELLなどの注文方向 |
| price | 発注価格 |
| sl / tp | 損切り・利確価格 |
| deviation | 許容スリッページ |
| magic | EA識別番号 |
| comment | 注文コメント |
requestログがあると、ロット、価格、SL / TP、Magic Numberのどこに問題があったかを確認しやすくなります。
MqlTradeResultとretcodeを確認する
注文要求を送った後は、MqlTradeResultとretcodeを確認します。
OrderSendやCTradeで注文処理へ進んでも、必ず約定するとは限りません。取引サーバーから返された結果を見て、成功、失敗、価格変更、証拠金不足、取引不可などを切り分けます。
| ログ項目 | 確認内容 |
|---|---|
| ORDER_SENT | 注文要求を送信した |
| ORDER_RESULT | 注文結果の概要 |
| TRADE_RETCODE | 取引サーバーから返された結果コード |
| deal | 約定が発生した場合のdeal情報 |
| order | 注文番号 |
| volume | 結果として扱われたロット |
| price | 結果として扱われた価格 |
| comment | サーバー側コメントや補足情報 |
retcodeは、ORDER_FAILの原因を確認するための重要な情報です。ORDER_FAILが出た時は、retcode、request内容、GetLastErrorを合わせて確認してください。
GetLastErrorで確認すること
GetLastErrorは、MQL5側のエラー状態を確認するために使います。
ただし、GetLastErrorだけを見ても、取引サーバーから返されたretcodeの代わりにはなりません。注文結果を見る時は、retcodeとGetLastErrorを分けて確認します。
| 確認対象 | 役割 |
|---|---|
| retcode | 取引サーバーから返された注文結果を確認する |
| GetLastError | MQL5側の関数実行エラーや直近エラーを確認する |
| Journalログ | MT5側の接続、約定、取引環境の状態を確認する |
| Expertsログ | EA側の判定、発注要求、結果確認を確認する |
GetLastErrorを確認する時は、どの処理の直後に確認した値なのかを明確にします。
ENTRY_SKIP・ORDER_FAIL・CLOSE_FAILを分ける
EAログでは、見送り、発注失敗、決済失敗を同じエラーとして扱わないことが重要です。
| ログ | 意味 | 確認すること |
|---|---|---|
| ENTRY_SKIP | 注文要求を送る前に見送った | シグナル不成立、スプレッド、時間帯、ロット、外部制御など |
| ORDER_FAIL | 注文要求を送った後に失敗した | retcode、GetLastError、request内容、約定条件 |
| CLOSE_FAIL | 決済要求に失敗した | 対象ticket、volume、retcode、取引状態 |
| MODIFY_FAIL | SL / TP変更に失敗した | stops level、freeze level、retcode、価格距離 |
この区別がないと、EAが注文を出していないのか、注文を出したが失敗したのか、決済処理で失敗したのかが分かりにくくなります。
決済時に残したいログ
EAのログ設計では、新規注文だけでなく、決済時のログも重要です。
TP、SL、トレーリング、建値移動、時間決済、反対シグナル、バスケット決済など、決済理由を分けて記録します。
| 決済ログ | 確認内容 |
|---|---|
| CLOSE_REASON | 決済理由の分類 |
| CLOSE_REQUEST | 決済要求を送る前の対象ticket、symbol、volume |
| CLOSE_OK | 決済成功 |
| CLOSE_FAIL | 決済失敗とretcode |
| TRAIL_STATE | トレーリング開始、更新、決済の状態 |
| BASKET_CLOSE | 複数ポジション全体の決済理由 |
決済ログがあると、バックテスト結果の損益だけでなく、どの決済条件がどの程度使われたかを確認しやすくなります。
GOLD / XAUUSD対応EAで確認したいログ
GOLD / XAUUSD対応EAでは、銘柄仕様、スプレッド、ロット、証拠金、価格変動のログが重要です。
値動きが大きい場面やスプレッドが広がる場面では、シグナル成立後に発注前チェックや注文結果で止まることがあります。
| 確認項目 | ログで確認する内容 |
|---|---|
| symbol | XAUUSD、GOLD、suffix付き銘柄の確認 |
| digits / point | 価格距離、SL / TP、スプレッド単位の確認 |
| spread | 現在スプレッドと上限 |
| volume step | ロット丸め後の発注volume |
| margin | 必要証拠金と余剰証拠金 |
| retcode | 発注失敗、価格変更、取引不可などの確認 |
| 約定価格 | 要求価格と結果価格の差を確認する |
GOLD / XAUUSDでEAを検証する時は、チャート上の見た目だけでなく、Expertsログで発注前後の状態を確認してください。
バックテスト時のログ設計
バックテストでは、ログが多すぎると確認しにくくなります。
一方で、ログを少なくしすぎると、エントリーしない理由や注文失敗の原因を追えなくなります。
| ログ方針 | 確認内容 |
|---|---|
| 起動時ログ | EAバージョン、symbol、timeframe、主要設定を1回出す |
| 見送りログ | ENTRY_SKIPやSPREAD_BLOCKを必要な範囲で出す |
| 注文失敗ログ | ORDER_FAIL、retcode、GetLastErrorを必ず確認できるようにする |
| 決済ログ | 決済理由と決済結果を残す |
| 集計ログ | テスト終了時に取引回数、見送り回数、エラー回数を要約する |
長期バックテストでは、毎tickログではなく、状態変化、見送り理由、失敗時、決済時、終了時サマリーを中心に残すと確認しやすくなります。
ログ過多とログ不足を避ける
EAのログ設計では、ログ過多とログ不足の両方に注意します。
ログが多すぎると、重要なエラーが埋もれます。ログが少なすぎると、原因を追えません。
| 状態 | 起きやすい問題 | 対策 |
|---|---|---|
| ログ過多 | 毎tick同じログが出て重要情報が埋もれる | 状態変化時、一定間隔、エラー時に絞る |
| ログ不足 | エントリーしない理由や発注失敗理由が分からない | ENTRY_SKIP、ORDER_FAIL、CLOSE_FAILを残す |
| ログ名が曖昧 | signal、precheck、executionの区別ができない | ログカテゴリを固定する |
| 値が不足 | retcodeはあるがsymbolやvolumeが分からない | 重要値をセットで出す |
実務では、通常時は簡潔に、異常時は原因を追えるようにする設計が扱いやすくなります。
問い合わせ前に整理したいログ情報
EAの発注エラーや動作不具合を相談する場合は、ログを部分的に切り取りすぎず、前後の流れが分かる形で整理します。
| 整理項目 | 内容 |
|---|---|
| EA名・バージョン | 使用しているEAファイル名とバージョン |
| 銘柄名 | XAUUSD、GOLD、suffix付き銘柄など |
| 時間足 | EAを設置している時間足 |
| setファイル | 使用している入力設定 |
| 発生時刻 | エントリーしなかった、注文失敗した、決済失敗した日時 |
| 発注前ログ | SIGNAL、ORDER_PRECHECK、ENTRY_SKIP周辺 |
| 注文結果ログ | ORDER_SENT、ORDER_FAIL、retcode、GetLastError周辺 |
| Journalログ | MT5側の接続、約定、取引環境エラー |
| 期待した動作 | 何が起きると思っていたか |
| 実際の動作 | 何が起きたか、または起きなかったか |
問い合わせ時には、口座番号、APIキー、Webhook URL、認証トークンなどの機密情報を含めないようにしてください。
MQL5 EAログ設計の実務チェック表
| 確認 | チェック項目 |
|---|---|
| □ | signal、precheck、execution、result、exitを分けてログ設計した |
| □ | 起動時にEA名、バージョン、symbol、timeframe、主要inputを出している |
| □ | SYMBOL_SPECでdigits、point、tick value、contract size、volume stepを確認できる |
| □ | SIGNAL_RESULTでBUY、SELL、WAITを確認できる |
| □ | ORDER_PRECHECKでspread、lot、margin、trade allowedを確認できる |
| □ | ENTRY_SKIPとORDER_FAILを分けている |
| □ | MqlTradeRequestのsymbol、volume、price、SL、TP、magicを確認できる |
| □ | MqlTradeResultのretcode、deal、order、price、commentを確認できる |
| □ | GetLastErrorをどの処理直後に確認したか分かる |
| □ | CLOSE_REASON、CLOSE_OK、CLOSE_FAILを分けている |
| □ | バックテストではログ過多にならないように状態変化と異常時を中心に出している |
| □ | 問い合わせ前に機密情報を除外してログを整理できる |
ログ設計はEAの再現性を高めるために行う
MQL5 EAのログ設計では、単にPrintを増やすのではなく、確認したい責務ごとにログを分けることが重要です。
signal、precheck、execution、result、exitを分けておくと、EAがエントリーしない、注文に失敗する、決済されないといった問題を切り分けやすくなります。
OrderSend、CTrade、MqlTradeRequest、MqlTradeResult、retcode、GetLastErrorを整理して確認できるようにしておくと、バックテスト、デモ検証、GOLD / XAUUSD対応EAの運用確認でも再現性を高められます。
ログ設計は、売買判断ではなく、EAの状態を検証し、発注・決済・エラー理由を追跡するための実務設計です。
ログ設計は発注前チェック・スプレッド実装・銘柄仕様とあわせて確認する
MQL5 EAのログ設計では、OrderSendやretcodeだけでなく、発注前チェック、スプレッドフィルター、GOLD / XAUUSDの銘柄仕様、運用時のログ確認をあわせて整理すると確認しやすくなります。
OrderSendログは発注前チェックとセットで確認する
OrderSendやCTradeの結果ログを確認する時は、注文送信後のretcodeだけでなく、送信前にどの条件を確認したかも一緒に記録しておくと原因を追いやすくなります。
スプレッド、ロット、必要証拠金、銘柄仕様、OrderCheck結果、MqlTradeRequestの内容を分けてログ化してください。
| ログ項目 | 記録する内容 |
|---|---|
| 発注前条件 | spread、lot、margin、trading allowed、symbol specを記録する |
| 注文リクエスト | symbol、type、volume、price、sl、tp、deviation、magicを記録する |
| チェック結果 | OrderCheckのretcode、margin、commentを記録する |
| 送信結果 | OrderSend / CTradeのResultRetcode、GetLastError、約定結果を記録する |
CTradeとMqlTradeRequestの使い分けは、MQL5 CTradeとMqlTradeRequestの違いを確認してください。
必要証拠金や想定損益をログ化する場合は、MQL5 OrderCalcMargin / OrderCalcProfitの使い方、OrderCheck結果を確認する場合は、MQL5 OrderCheckの使い方も参考になります。
GOLD / XAUUSD対応EAの導入前確認もあわせて確認する
この記事で扱った内容は、GOLD / XAUUSD対応EAを確認する時の一部です。導入前には、MT5設定、銘柄仕様、スプレッド、ログ、バックテスト、VPS、コピーEA、通知・外部連携もあわせて確認しておくと整理しやすくなります。
GOLD / XAUUSD対応EAの導入前チェックリストを見る
