開発実務ノート

MQL5でEAのログ設計を行う方法|OrderSend・retcode・GetLastErrorの確認

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を分けて考えます。

この分離ができていないと、シグナルが出ていないのか、発注前チェックで止まったのか、注文送信後に失敗したのかが分かりにくくなります。

分類役割代表ログ
signalBUY候補、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を確認できるログが重要です。

ログ項目確認内容
INITEA名、バージョン、起動状態
SYMBOL_SPECsymbol、digits、point、tick value、contract size、volume step
INPUT_SUMMARY主要input、ロット、スプレッド上限、Magic Number
AUTH_STATE認証や利用許可の状態
EXTCTRL_STATE外部制御や停止状態

起動時ログがあると、あとから「どのEA、どの銘柄、どの設定で動かしていたか」を確認しやすくなります。

OrderSend前に残したいログ

OrderSendやCTradeで注文を送る前には、注文要求の前提をログに残します。

発注前のログでは、シグナル条件だけでなく、スプレッド、ロット、証拠金、取引許可、最大ポジション数を確認します。

ログ項目確認内容
SIGNAL_RESULTBUY候補、SELL候補、WAITのどれか
ORDER_PRECHECK_START発注前チェックを開始した
SPREAD_CHECK現在スプレッドと上限値
LOT_CHECKrequested 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発注ロット
typeBUY、SELLなどの注文方向
price発注価格
sl / tp損切り・利確価格
deviation許容スリッページ
magicEA識別番号
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取引サーバーから返された注文結果を確認する
GetLastErrorMQL5側の関数実行エラーや直近エラーを確認する
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_FAILSL / 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では、銘柄仕様、スプレッド、ロット、証拠金、価格変動のログが重要です。

値動きが大きい場面やスプレッドが広がる場面では、シグナル成立後に発注前チェックや注文結果で止まることがあります。

確認項目ログで確認する内容
symbolXAUUSD、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の導入前チェックリストを見る

ABOUT ME
記事URLをコピーしました