自動売買EAを自作する前に確認すること|ロジック・バックテスト・ログ設計
MT5 EAを自作する場合や、MQL5でEA開発を依頼する場合は、最初にエントリー条件だけを決めても十分ではありません。実際のEAには、シグナル判定、発注前チェック、注文処理、決済処理、リスク管理、バックテスト、ログ設計、通知、外部連携、エラー時の切り分けなど、複数の責務があります。
このページでは、MT5 EAの作り方を考える前に整理しておきたい、EAの構造、MQL5実装前の確認項目、サンプルコードを見る時の注意点、バックテスト条件、ログ設計、開発依頼前に準備する情報をまとめます。
なお、この記事はMT4/MT5・MQL4/MQL5・EA開発に関する技術的な確認事項を整理するものです。特定の売買判断、利益、勝率、損失回避を保証するものではありません。
この記事で確認すること
- MT5 EAを作る前に整理する仕様
- MQL5でEAを作る時の基本構造
- エントリー判定と発注処理を分ける理由
- ロット、スプレッド、証拠金、SL/TPなどの発注前チェック
- バックテスト条件、setファイル、検証ログの残し方
- MQL5サンプルコードを見る時の注意点
- 自作、作成ツール、開発依頼の違い
- 開発依頼前に準備しておく情報
MT5 EAを作る前に決めるべきこと
MT5 EAの作り方を調べると、OnInit、OnTick、CTrade、OrderSend、CopyBufferなどの関数やサンプルコードが先に目に入ることがあります。しかし、コードを書く前に仕様を分けておかないと、あとから「どこで止まったのか」「なぜ注文されなかったのか」「バックテストと実運用で何が違うのか」を追いにくくなります。
EA開発では、まず取引ロジックそのものと、発注可否を確認する処理、注文を送る処理、ポジション管理、決済、ログ、通知を分けて整理します。これにより、シグナルは出ているが発注前チェックで止まったのか、注文送信に失敗したのか、約定後の管理で想定と違ったのかを切り分けやすくなります。
| 先に決める項目 | 確認する内容 |
|---|---|
| EAの目的 | 自動売買、半裁量補助、通知、検証用、バックテスト用など、EAに持たせる役割を分けます。 |
| 判定タイミング | 新バー確定で判定するのか、ティックごとに判定するのか、手動操作を起点にするのかを決めます。 |
| エントリー条件 | 方向判定、タイミング判定、見送り条件を分け、単純な全条件ANDだけに寄せすぎないようにします。 |
| 発注前チェック | スプレッド、最小ロット、ロットステップ、必要証拠金、取引可能時間、最大ポジション数を確認します。 |
| 決済条件 | TP、SL、トレーリング、建値、時間決済、一括決済、手動決済との関係を整理します。 |
| 検証方法 | バックテスト、最適化、フォワード確認、デモ環境での稼働確認を分けて考えます。 |
| ログ設計 | 判定不成立、発注見送り、注文失敗、決済失敗、設定不正を別理由で記録できるようにします。 |
EA自作で混同しやすい3つの選択肢
MT5 EAを用意する方法には、自分でMQL5を書く方法、EA作成ツールを使う方法、開発者へ依頼する方法があります。どれが正しいというより、目的、必要な柔軟性、検証のしやすさ、保守のしやすさによって向き不向きがあります。
| 方法 | 向いているケース | 注意点 |
|---|---|---|
| 自分でMQL5を書く | EAの構造を理解しながら、細かい条件やログを自分で調整したい場合。 | コンパイル、発注処理、エラー処理、検証設計まで自分で確認する必要があります。 |
| EA作成ツールを使う | 単純な条件や定型的なロジックを早く形にしたい場合。 | 細かい例外処理、複雑なポジション管理、独自ログ、外部連携には限界が出ることがあります。 |
| 開発依頼する | 仕様を整理したうえで、発注、決済、ログ、通知、配布前確認まで含めて作りたい場合。 | 依頼前に、ロジック、検証条件、ログ、希望動作、動かしたくない条件を整理しておく必要があります。 |
MQL5 EAの基本構造
MQL5 EAでは、OnInitで初期化、OnTickで価格更新時の処理、OnDeinitで終了時の処理を行う構成がよく使われます。さらに、OnTimer、OnTradeTransaction、OnChartEventなどを使うと、定期処理、約定イベント、チャート操作への対応も可能になります。
ただし、すべてをOnTickの中へ直接書き込むと、処理が大きくなり、あとから原因を追いにくくなります。実務では、データ取得、シグナル評価、発注前チェック、発注、決済、ログ出力を分けておくと、修正や検証がしやすくなります。
| 構成要素 | 役割 | 確認ポイント |
|---|---|---|
OnInit | EA起動時の初期化、input確認、ハンドル作成、初期ログ出力。 | 設定不正、インジケーターハンドル作成失敗、認証や外部連携の初期状態を確認します。 |
OnTick | 価格更新ごとの処理。シグナル判定や発注可否確認の入口になります。 | 毎ティックで重い処理を行いすぎないようにします。 |
OnTimer | 一定間隔の処理。ログ集計、外部状態確認、表示更新などに使えます。 | 新規エントリー判定と外部確認処理を混ぜすぎないようにします。 |
OnTradeTransaction | 注文、約定、ポジション変化などのイベント確認に使います。 | 発注結果、約定結果、履歴確認をログで追えるようにします。 |
OnDeinit | EA削除、再読み込み、時間足変更時などの終了処理。 | 広範囲のObject削除や重い処理を入れすぎないようにします。 |
エントリーロジックと発注処理を分ける
EA開発で特に重要なのは、「買い条件・売り条件が成立したこと」と「実際に注文を出してよいこと」を分けることです。シグナルが出ていても、スプレッドが広い、必要証拠金が足りない、最大ポジション数に達している、取引時間外である、口座や銘柄の条件が合わない、といった理由で発注を見送る場合があります。
この分離がないと、ログ上は「条件が成立しなかった」のか「条件は成立したが発注を止めた」のかが分かりにくくなります。自作EAでも、開発依頼でも、signal、entry filter、order precheck、execution、risk、exitを分けて整理しておくと、検証時の原因追跡がしやすくなります。
| 責務 | 主な内容 | ログに残したいこと |
|---|---|---|
| signal | インジケーター、価格、時間足、ローソク足などから売買方向や候補を判定します。 | BUY候補、SELL候補、見送り理由、使用した足、判定時刻。 |
| entry filter | スプレッド、時間帯、ポジション数、ニュース時間など、発注前の見送り条件を確認します。 | どのフィルターで止まったか、設定値、現在値。 |
| order precheck | ロット、最小ロット、lot step、証拠金、SL/TP距離、銘柄仕様を確認します。 | 発注予定ロット、丸め後ロット、必要証拠金、StopLevel。 |
| execution | CTradeまたはOrderSendで注文を送信します。 | 注文方向、ロット、価格、retcode、GetLastError。 |
| risk | 最大ロット、最大ポジション、日次停止、含み損監視などを管理します。 | 停止条件に到達したか、どの範囲を停止したか。 |
| exit | TP/SL、トレーリング、建値、一括決済、時間決済などを管理します。 | 決済理由、対象ポジション、決済成功/失敗、残ポジション。 |
MQL5サンプルコードを見る時の注意点
MQL5 EAサンプルコードは、学習の入口としては有効です。ただし、サンプルコードは説明用に簡略化されている場合があります。実運用や配布用のEAでは、エラー処理、ログ、発注前チェック、設定不正時の停止、バックテスト条件の記録などを追加で確認する必要があります。
特に、CopyBufferでインジケーター値を取得するEA、CTradeで注文するEA、OrderSendを直接使うEAでは、戻り値、配列方向、確定足、retcode、GetLastError、ポジション識別を確認してください。コードがコンパイルできることと、検証で原因を追えることは別の確認項目です。
| 見る場所 | 確認内容 | 注意点 |
|---|---|---|
| OnInit | inputの範囲、ハンドル作成、初期ログ。 | 設定不正でも何となく動き続けないよう、理由付きで止める設計が必要です。 |
| データ取得 | CopyBuffer、CopyRates、CopyClose、iCloseなどの戻り値。 | 取得本数、配列方向、確定足と現在足の違いを確認します。 |
| シグナル判定 | BUY/SELL条件、見送り条件、判定足。 | すべての条件を単純ANDにしすぎると、理由が追いにくくなることがあります。 |
| 注文処理 | CTrade、OrderSend、MqlTradeRequest、MqlTradeResult。 | 注文成功/失敗だけでなく、retcodeとGetLastErrorを分けて確認します。 |
| ポジション管理 | Magic Number、Symbol、方向、チケット、コメント。 | 他EAや手動ポジションを誤って対象にしないようにします。 |
| ログ | Print、PrintFormat、CSV、通知。 | 認証情報、Webhook URL、口座番号などの機密値を出さないようにします。 |
発注前チェックで確認する項目
EAが注文を出す前には、売買条件だけでなく、ブローカーや銘柄仕様に関する確認が必要です。ロットが最小ロット未満、lot stepに合っていない、SL/TPが近すぎる、必要証拠金が足りない、スプレッドが広すぎるといった理由で、シグナル成立後に発注が失敗することがあります。
| 確認項目 | 内容 | ログ例として残したい情報 |
|---|---|---|
| スプレッド | 現在のスプレッドが許容値内か確認します。 | max_spread、current_spread、block理由。 |
| ロット | 最小ロット、最大ロット、lot stepに合うか確認します。 | request_lot、normalized_lot、volume_min、volume_step。 |
| 証拠金 | 発注予定ロットで必要証拠金を満たすか確認します。 | free_margin、required_margin、check結果。 |
| SL/TP距離 | StopLevelやFreezeLevelとの関係を確認します。 | sl_distance、tp_distance、stop_level、freeze_level。 |
| 取引可能状態 | 銘柄が取引可能か、口座で注文できるか確認します。 | symbol_trade_mode、account_trade_allowed。 |
| 最大ポジション数 | 同一EA、同一Magic、同一銘柄で保有上限に達していないか確認します。 | position_count、max_positions、magic、symbol。 |
決済ロジックとリスク管理を先に整理する
EA自作では、エントリー条件に目が向きやすいですが、決済とリスク管理を後回しにすると、検証結果の比較が難しくなります。TP/SL、トレーリング、建値、時間決済、手動決済、一括決済、ナンピン、グリッド、コピーEAとの関係を、仕様として先に分けておくことが重要です。
特に複数ロジックEAや複数ポジションを持つEAでは、どのポジションをどの条件で決済するのか、Magic Number、銘柄、方向、コメント、チケット単位で整理しておく必要があります。ここを曖昧にすると、別ロジックのポジションを決済する、手動ポジションを対象にする、履歴と現在ポジションの整合が取れないといった問題につながります。
バックテスト条件とsetファイルを整理する
MT5のバックテストは、EAの挙動を確認するための重要な手段です。ただし、バックテスト結果は将来の結果を保証するものではありません。バックテストでは、銘柄、時間足、期間、スプレッド、初期残高、入出金条件、モデル、最適化条件、使用したsetファイルを記録しておく必要があります。
同じEAでも、検証条件が変わると結果の見え方が変わります。最適化で良い組み合わせを探す段階と、単体バックテストで挙動を確認する段階、フォワードやデモ環境で動作確認する段階を分けてください。
- 検証したEA名とバージョンを記録する
- 使用したsetファイル名を保存する
- 銘柄、時間足、期間を記録する
- スプレッド、初期残高、モデルを記録する
- 最適化条件と単体バックテスト条件を分ける
- バックテストレポートだけでなくExpertsログも確認する
- 設定変更後は、変更前後のsetファイルを分けて保存する
ログ設計で残すべき情報
EAが想定どおりに動かない時、最初に確認するのはExpertsログやJournalログです。ログが不足していると、シグナルが出なかったのか、発注前チェックで止まったのか、注文送信で失敗したのか、決済処理で失敗したのかが分かりません。
自作EAでも、開発依頼でも、ログは後付けのデバッグ用ではなく、仕様の一部として考えることが重要です。特に、判定不成立、発注見送り、注文失敗、決済失敗、外部連携失敗、設定不正は、同じ「動かない」に見えても原因が異なります。
| ログ種別 | 残したい内容 | 注意点 |
|---|---|---|
| INITログ | EA名、バージョン、主要input、初期化結果、設定不正。 | Webhook URL、APIキー、口座番号などの実値を出さないようにします。 |
| シグナルログ | BUY/SELL候補、見送り理由、判定足、使用インジ値。 | 毎ティックで過剰に出しすぎず、状態変化や要点に絞ります。 |
| 発注前チェックログ | スプレッド、ロット、証拠金、SL/TP距離、取引可能状態。 | ブロック理由を1つに潰さず、項目別に確認できるようにします。 |
| 注文結果ログ | retcode、GetLastError、注文方向、ロット、価格、Magic Number。 | 注文要求と注文結果を分けて確認します。 |
| 決済ログ | 決済理由、対象チケット、決済ロット、成功/失敗。 | 手動決済、SL/TP、内部決済の競合を確認できるようにします。 |
| 外部連携ログ | 通知送信、WebRequest、CSV出力、外部シート連携の成功/失敗。 | 外部URLや認証情報の実値をログに出さないようにします。 |
開発依頼前に準備する情報
EA開発を依頼する場合は、「こういう条件で買いたい」「このインジで売りたい」だけでは仕様が不足しやすくなります。開発側が確認しやすいように、ロジック、対象環境、注文条件、決済条件、停止条件、表示、通知、ログ、検証条件を分けて整理してください。
| 準備する情報 | 内容 |
|---|---|
| 利用環境 | MT4 / MT5、ブローカー、銘柄、時間足、VPS利用有無。 |
| ロジック | エントリー条件、見送り条件、使用インジケーター、確定足か現在足か。 |
| 発注条件 | ロット、最大ポジション数、Magic Number、スプレッド制限、注文方向。 |
| 決済条件 | TP、SL、トレーリング、建値、時間決済、手動決済との関係。 |
| リスク管理 | 停止条件、最大保有数、日次停止、ナンピンやグリッドの有無。 |
| 表示・通知 | チャート表示、パネル、アラート、メール、Discord通知、CSV出力。 |
| 検証資料 | setファイル、バックテスト条件、スクリーンショット、Expertsログ。 |
| 送らない情報 | 口座番号、パスワード、認証トークン、Webhook URL、APIキーの実値。 |
うまく動かない時の切り分け
EAが動かない場合は、コードだけを疑うのではなく、MT5側の自動売買許可、EAのinput、口座状態、銘柄仕様、スプレッド、ログ、外部連携を順番に確認します。特に、コンパイルは通っているが注文されない場合は、シグナル不成立、発注前チェック停止、注文失敗、取引不可状態を分けて確認してください。
| 症状 | 確認する場所 | 見るポイント |
|---|---|---|
| EAが起動しない | Expertsログ、Navigator、ファイル配置。 | コンパイル済みか、配置先が正しいか、OnInitで失敗していないか。 |
| シグナルが出ない | シグナルログ、インジ値、時間足。 | 確定足、現在足、CopyBuffer、条件の組み合わせを確認します。 |
| シグナルは出るが注文しない | 発注前チェックログ。 | スプレッド、ロット、証拠金、取引時間、最大ポジション数を確認します。 |
| 注文が失敗する | 注文結果ログ、Journalログ。 | retcode、GetLastError、銘柄仕様、SL/TP距離を確認します。 |
| 決済されない | 決済ログ、ポジション一覧。 | Magic Number、対象チケット、決済条件、手動決済との関係を確認します。 |
| 通知が届かない | 外部連携ログ、WebRequest設定。 | URL許可、送信ON/OFF、送信失敗理由を確認します。 |
記事固有の実務チェック表
- MT5 EAの目的を、自動売買、半裁量、通知、検証用に分けた
- エントリー条件と発注前チェックを分けて整理した
- ロット、スプレッド、証拠金、SL/TP距離の確認方法を決めた
- TP/SL、トレーリング、建値、時間決済などの決済条件を整理した
- Magic Number、対象銘柄、対象ポジションの範囲を決めた
- バックテスト条件、setファイル、検証期間を記録した
- ExpertsログとJournalログで確認したい項目を整理した
- 通知、CSV、WebRequestなどの外部連携が必要か確認した
- 開発依頼する場合に、仕様書、ログ、スクリーンショットを準備した
- 口座番号、認証情報、Webhook URL、APIキーなどを共有資料に入れていない
よくある質問
MT5 EAはMQL5を覚えればすぐ作れますか?
簡単なサンプルEAであれば作成できます。ただし、実際に検証しやすいEAにするには、発注前チェック、エラー処理、ログ設計、バックテスト条件の記録、ポジション管理まで整理する必要があります。
MT5 EA作成ツールだけで十分ですか?
単純な条件を形にする用途では役立つ場合があります。ただし、複雑な決済、ナンピン、複数ロジック、外部連携、詳細ログ、配布前チェックまで必要な場合は、ツールだけでは仕様の確認が不足することがあります。
MQL5 EAサンプルコードを見る時は何を確認すべきですか?
OnInit、OnTick、データ取得、発注処理、決済処理、ログ出力がどのように分かれているかを確認してください。コンパイルできることだけでなく、失敗時に原因を追えるログがあるかも重要です。
バックテスト結果が良ければ、そのまま実運用できますか?
バックテスト結果は将来の結果を保証するものではありません。銘柄、時間足、期間、スプレッド、setファイル、モデル、最適化条件を記録し、デモ環境やフォワード確認で動作を確認してください。
OrderSendとCTradeはどちらを使うべきですか?
どちらにも用途があります。CTradeは標準ライブラリを使って注文処理を整理しやすく、OrderSend直書きはMqlTradeRequestやMqlTradeResultを細かく扱いやすい方法です。どちらでも、retcode、GetLastError、発注前チェックの確認は必要です。
EA開発を依頼する時は何を送ればよいですか?
ロジックの説明、使用するインジケーター、対象銘柄、時間足、発注条件、決済条件、リスク管理、希望する表示や通知、検証条件、setファイル、ログ、スクリーンショットを整理してください。口座番号や認証情報などの機密情報は送らないでください。
関連ページ
MT5 EAの作り方を整理する時は、EAの基礎、MT5への導入、MQL5開発、バックテスト、ログ確認、開発依頼前資料を分けて確認すると、仕様の抜け漏れを減らしやすくなります。
| 確認したい内容 | 関連ページ |
|---|---|
| FX自動売買とEAの違いを確認する | FX自動売買とは|EA・自動売買ツール・MT4/MT5の違いを整理 |
| MT4/MT5で動くEAの基本を確認する | 自動売買EAとは|MT4/MT5で動くEAの仕組みと確認ポイント |
| MT5 EAの入れ方や設定を確認する | MT5 EAとは?入れ方・設定・動かない時の確認ポイント |
| EAタイプごとの違いを確認する | MT5 EAの種類一覧|トレンド・逆張り・ナンピン・グリッド・コピーEAの違い |
| MQL5開発の基礎を確認する | MQL5開発入門|MetaEditor・EA・インジケーター・イベント関数・コンパイルエラーの基本 |
| EA設計の責務分離を確認する | MQL5 EA設計パターン完全ガイド|signal・execution・risk・exitの責務分離 |
| 注文、ポジション、履歴管理を確認する | MQL5注文・ポジション・履歴管理完全ガイド|OrderSend・Position・Deal・Historyの基本 |
| CTradeを使った注文処理を確認する | MQL5標準ライブラリ・CTrade完全ガイド|注文・決済・ポジション確認の実務基礎 |
| EAバックテストの確認項目を整理する | 自動売買EAのバックテストを見る前に確認すること|検証条件・setファイル・ログの見方 |
| MT5ストラテジーテスターの使い方を確認する | MT5バックテストのやり方|EA検証前に確認する設定・スプレッド・結果の見方 |
| 問い合わせ前にEAログを確認する | EAのログを問い合わせ前に確認する方法 |
| MT5開発依頼前に用意する資料を確認する | MT5開発依頼前に用意する資料まとめ|仕様書・setファイル・ログ・スクリーンショット |
| 開発・改修相談の入口を確認する | 開発・改修の相談ページ |
まとめ
MT5 EAを作る時は、エントリー条件だけでなく、発注前チェック、注文処理、決済、リスク管理、バックテスト、ログ設計を分けて整理することが重要です。MQL5のサンプルコードを見る場合も、コンパイルできるかだけでなく、失敗時に原因を追える構造になっているかを確認してください。
自作、EA作成ツール、開発依頼のどれを選ぶ場合でも、仕様、検証条件、ログ、setファイル、スクリーンショットを整理しておくと、導入前確認や不具合切り分けがしやすくなります。開発依頼に進む場合も、まずはこの記事のチェック表に沿って、EAの目的、判定条件、発注条件、決済条件、ログ確認項目を整理してください。
