MQL5 EA設計パターン完全ガイド|signal・execution・risk・exitの責務分離
MQL5でEAを開発する時は、エントリー条件だけを作ればよいわけではありません。
EAには、条件判定、注文処理、リスク確認、決済処理、認証、外部制御、通知、画面表示、ログ出力、バックテスト確認など、複数の責務があります。
これらを1つの巨大なロジックにまとめてしまうと、どこで判定され、どこで注文され、どこで停止し、どこで通知されたのかが分かりにくくなります。結果として、検証、改修、販売後サポート、不具合調査が難しくなります。
この記事では、MQL5 EAを長期保守しやすくするために、signal、execution、risk、exit、auth、external control、notification、UI / panelを分けて考える設計パターンを整理します。
このページは、MT5 / MQL5の技術学習記事です。投資判断、売買タイミング、利益保証、勝率保証、推奨ロット、推奨銘柄、推奨エントリー、特定ブローカー誘導を目的とした内容ではありません。
- MQL5 EAを設計パターンで考える理由
- 1枚の巨大ロジックにしない理由
- signal / execution / risk / exitの全体像
- GATE / SCORE / SPECIAL FILTERS / ENTRYの考え方
- TREND / REVERSE / RANGEの役割差
- signal層で扱うこと
- execution層で扱うこと
- risk層で扱うこと
- exit層で扱うこと
- auth層で扱うこと
- external control層で扱うこと
- notification層で扱うこと
- UI / panel層で扱うこと
- input初期値とruntime状態を分ける
- ログファースト設計
- AdminDevとUserLiveの違い
- BTとLIVEの責務分離
- 表示系と判定系を分ける
- 関連ログ・関連エラー
- EA利用者向けの確認ポイント
- MQL5開発者向けの確認ポイント
- 検証担当者向けの確認ポイント
- よくある誤解
- 開発依頼前に仕様化する項目
- 問い合わせ前に送る情報
- 送ってはいけない情報
- MQL5 EA設計パターン確認チェック表
- 次に読む技術講座
- 次に確認するページ
- よくある質問
- まとめ
MQL5 EAを設計パターンで考える理由
EA開発では、最初に「どんな条件でエントリーするか」に目が行きやすくなります。
しかし、実務上のEAは、エントリー条件だけで成立するものではありません。注文できる状態か、ロットが正しいか、同じポジションを重複して持たないか、損切りや決済条件をどう扱うか、外部制御や通知をどう扱うかまで確認する必要があります。
| 設計対象 | 主な役割 | 分けて考える理由 |
|---|---|---|
| signal | エントリー候補の判定 | 条件成立と注文実行を混同しないため |
| execution | 注文・決済・変更リクエスト | 取引サーバー応答やretcodeを追跡するため |
| risk | ロット、最大数、停止条件、資金制約 | signal成立後でも取引を止める場合があるため |
| exit | 利確、損切り、トレール、時間決済 | エントリー条件とは別に常時管理するため |
| notification | メール、Push、Discord、外部通知 | 通知成功と注文成功を混同しないため |
| UI / panel | 状態表示、ボタン、ラベル、パネル | 表示と判定ロジックを分けるため |
EAを設計パターンで整理すると、仕様変更や不具合確認の時に、どの層を見ればよいかが明確になります。
1枚の巨大ロジックにしない理由
EAの処理を1つの大きな関数や1つの条件式にまとめると、最初は分かりやすく見える場合があります。
しかし、機能追加が進むと、エントリー条件、時間制御、スプレッド制御、ポジション数制御、外部停止、通知、ログ、決済処理が混ざり、原因切り分けが難しくなります。
| 状態 | 起きやすい問題 | 改善方針 |
|---|---|---|
| signalとexecutionが混在 | 条件成立と注文失敗の区別がつかない | 判定結果と注文結果を別ログにする |
| riskとexitが混在 | 新規停止と既存決済停止を混同する | 新規エントリー制限と保有管理を分ける |
| 通知と注文が混在 | 通知失敗でEA本体も失敗したように見える | notificationは独立した層にする |
| UIと判定が混在 | 表示更新の不具合が売買ロジックに影響する | 表示用状態と判定用状態を分ける |
| ログが不足 | どの条件で止まったか分からない | GATE、SCORE、execution、riskを分けて記録する |
巨大ロジックを避ける目的は、コードを細かく分けること自体ではありません。検証、改修、サポート時に、責務とログを追いやすくすることです。
signal / execution / risk / exitの全体像
EAの中心になるのは、signal、execution、risk、exitの4層です。
signalは「候補を出す層」、executionは「注文を出す層」、riskは「許可・停止・制限を見る層」、exitは「保有後の終了条件を管理する層」です。
| 層 | 役割 | 主な入力 | 主な出力 |
|---|---|---|---|
| signal | エントリー候補を判定する | 価格、インジ値、時間、状態 | BUY候補、SELL候補、見送り理由 |
| execution | 注文・決済リクエストを処理する | 方向、ロット、価格、SL/TP、Magic | 注文結果、retcode、ticket、error |
| risk | 新規許可、制限、停止条件を確認する | ロット、ポジション数、証拠金、損益、外部停止 | 許可、ブロック、警告 |
| exit | 保有ポジションの終了条件を管理する | ポジション、損益、時間、トレール、決済条件 | 決済候補、SL変更、TP変更、保有継続 |
signalが成立しても、riskで止まることがあります。riskが許可しても、executionで注文が失敗することがあります。ポジションを保有した後は、signalではなくexitが中心になります。
GATE / SCORE / SPECIAL FILTERS / ENTRYの考え方
signal層を整理する時は、GATE、SCORE、SPECIAL FILTERS、ENTRYを分けると確認しやすくなります。
GATEは通過条件、SCOREは評価点、SPECIAL FILTERSは例外的な除外条件、ENTRYは最終的なエントリー候補です。
| 分類 | 役割 | 例 | ログで確認すること |
|---|---|---|---|
| GATE | 必須通過条件 | 時間内、spread許容、必要データあり | どのGATEで止まったか |
| SCORE | 条件の強さや優先度を評価 | トレンド一致、複数条件一致、勢い | 合計点、項目別点数 |
| SPECIAL FILTERS | 通常条件とは別の除外条件 | 急変、直近決済直後、外部停止、イベント前 | 例外フィルターの発動有無 |
| ENTRY | 最終的な候補出力 | BUY候補、SELL候補、見送り | 最終方向、理由、次層へ渡した内容 |
GATEで止まった場合は、SCOREを計算しない設計にすることがあります。SCOREが高くても、SPECIAL FILTERSで止まることがあります。
このように分けると、「条件は良かったのになぜ入らなかったのか」をログで追いやすくなります。
TREND / REVERSE / RANGEの役割差
EAのsignal設計では、TREND、REVERSE、RANGEを同じ条件として扱わないことが重要です。
それぞれのモードは、見ている相場状態、判定条件、見送り理由、exitとの関係が異なります。
| モード | 主な役割 | 確認する条件 | 注意点 |
|---|---|---|---|
| TREND | 方向性に沿った候補を探す | 上位足方向、移動平均、価格位置、勢い | 逆張り条件と混同しない |
| REVERSE | 反転候補を探す | 行き過ぎ、反転サイン、乖離、ローソク足 | 逆張りのリスク制御を明確にする |
| RANGE | 範囲内の状態を確認する | 高値安値、ボラティリティ、上下限、中心線 | ブレイク時の扱いを決める |
TREND、REVERSE、RANGEを分ける目的は、どれが有利かを決めることではありません。EAの判定構造を整理し、検証時にどのモードが何を判定したかを追えるようにするためです。
signal層で扱うこと
signal層は、エントリー候補を作る層です。
ここでは、価格、インジケーター値、時刻、ローソク足、スコア、GATE、フィルターなどを確認します。ただし、注文処理は行いません。
| signalで扱う項目 | 内容 | 扱わないもの |
|---|---|---|
| 価格条件 | 終値、高値、安値、現在価格、価格位置 | 注文送信 |
| インジ条件 | CopyBuffer値、iCustom値、状態値 | ロット確定 |
| 時間条件 | 稼働時間、曜日、サーバー時間 | 決済実行 |
| GATE / SCORE | 通過条件と点数化 | 取引サーバー応答処理 |
| 見送り理由 | 条件未成立、データ不足、方向不一致 | 通知の送信成否 |
signal層の出力は、BUY候補、SELL候補、NO ENTRY、見送り理由などにします。
signal層が注文まで行ってしまうと、後からriskやexecutionの失敗と混ざるため、検証が難しくなります。
execution層で扱うこと
execution層は、注文、決済、変更リクエストを実際に処理する層です。
signalがBUY候補を出したとしても、executionが必ず注文を成功させるとは限りません。取引サーバー、ロット条件、価格条件、自動売買許可、接続状態などで失敗することがあります。
| executionで扱う項目 | 確認すること | ログに残すこと |
|---|---|---|
| 注文方向 | BUY / SELL / CLOSE / MODIFY | request action、type |
| ロット | 最小ロット、最大ロット、volume step | requested lot、normalized lot |
| 価格 | Bid、Ask、SL、TP | price、sl、tp、digits |
| 注文結果 | retcode、order、deal、comment | TRADE_RETCODE、GetLastError |
| 失敗時処理 | 再試行、見送り、通知 | retry count、fail reason |
execution層では、成功時だけでなく失敗時のログが重要です。
注文関連エラーやretcodeの確認は、MQL5エラーコード辞典も参考にしてください。
risk層で扱うこと
risk層は、EAの新規処理や運用制限を確認する層です。
ここで重要なのは、risk層を「必ず損失を防ぐ仕組み」と誤解しないことです。risk層は、ロット、ポジション数、証拠金、外部停止、日次制限などを確認し、EAの動作条件を整理するための層です。
| risk項目 | 確認する内容 | 注意点 |
|---|---|---|
| ロット制御 | 最小ロット、最大ロット、volume step | 銘柄仕様に合わせて丸める |
| ポジション数 | 最大保有数、方向別数、Magic別数 | Hedging / Nettingを確認する |
| 証拠金確認 | 必要証拠金、余力、注文可能性 | 注文成功を保証するものではない |
| 日次制限 | 日次損益、回数、停止条件 | サーバー日付基準を確認する |
| 外部停止 | シート、ファイル、手動ボタン、認証状態 | 新規停止と保有管理を分ける |
risk層で新規エントリーを止める場合でも、既存ポジションのexitや保護処理は継続する設計が必要になることがあります。
exit層で扱うこと
exit層は、保有ポジションをどう終了するかを管理する層です。
エントリー条件と決済条件は別責務です。エントリー条件が出なくなったから決済するのか、別の決済条件で終了するのかを仕様として明確にします。
| exit項目 | 内容 | 確認すること |
|---|---|---|
| 固定SL / TP | 注文時または後から設定するSL/TP | 価格距離、stops level、digits |
| トレール | 利益方向にSLを移動する処理 | 開始条件、幅、更新頻度 |
| 時間決済 | 一定時間後や指定時刻で終了する処理 | サーバー時間か日本時間か |
| 反対条件決済 | 逆方向signalや条件変化で終了する処理 | signalとexitの接続方法 |
| 緊急決済 | 外部停止、異常検知、手動指示 | 優先順位とログ |
exit層は、保有後に常時確認されることが多い層です。新規エントリーが停止されている状態でも、exit層を止めるべきかどうかは慎重に設計します。
auth層で扱うこと
auth層は、EAの利用許可や認証状態を確認する層です。
販売用や配布用のEAでは、ライセンス、口座番号、期限、外部認証などを扱う場合があります。
| auth項目 | 確認すること | 注意点 |
|---|---|---|
| 利用許可 | 利用可能な状態か | 認証失敗時の挙動を明確にする |
| 口座確認 | 許可口座、デモ/リアル区分など | 口座番号の全桁をログに出さない |
| 期限確認 | 利用期限、更新状態 | 日付基準を明確にする |
| 外部認証 | WebRequest、CSV、API照合 | tokenやURLを本文・ログに出さない |
auth層は、signalやexecutionとは分けて確認します。認証失敗時に新規エントリーを止めるのか、表示だけ止めるのか、保有ポジションのexitを継続するのかを仕様化します。
external control層で扱うこと
external control層は、EAの外部制御を扱う層です。
外部CSV、Google Sheets、設定ファイル、WebRequest、管理用パネル、手動ボタンなどで、EAの動作を外部から制御する場合に関係します。
| 外部制御 | 内容 | 確認すること |
|---|---|---|
| 外部シート | 停止、方向、時間帯、設定値などを取得する | 読み込み周期、失敗時の扱い |
| CSV / ファイル | ローカル設定や状態を読む | Files / Common、文字コード、更新タイミング |
| 手動ボタン | ON/OFF、許可、停止、リセット | runtime状態とinput初期値を混同しない |
| 外部API | 認証、状態取得、通知先確認 | timeout、失敗時、機密情報 |
外部制御は便利ですが、読み込み失敗時の挙動を必ず決めておく必要があります。
外部連携や通知の安全管理は、MT5外部連携・通知セキュリティガイドも参考にしてください。
notification層で扱うこと
notification層は、EAの状態やイベントを利用者へ知らせる層です。
通知は、signal成立、注文成功、注文失敗、決済、エラー、外部連携失敗などに使われることがあります。
| 通知対象 | 内容 | 注意点 |
|---|---|---|
| signal通知 | 条件成立や候補発生を通知する | 注文実行と混同しない |
| execution通知 | 注文成功・失敗を通知する | retcodeやerrorを確認する |
| exit通知 | 決済やSL/TP変更を通知する | 同一イベント重複通知を防ぐ |
| error通知 | WebRequest失敗、認証失敗、データ不足など | 通知しすぎないよう抑制する |
通知が届いたことと、注文が成功したことは別です。通知はnotification層、注文結果はexecution層で確認します。
UI / panel層で扱うこと
UI / panel層は、EAの状態をチャート上に表示する層です。
パネル、ボタン、ラベル、ライン、ステータス表示などは、利用者にとって便利ですが、判定ロジックと混ぜると不具合調査が難しくなります。
| UI要素 | 役割 | 注意点 |
|---|---|---|
| ステータス表示 | EA状態、認証、稼働状態を表示する | 表示遅延と内部状態を分ける |
| ボタン | 手動ON/OFF、リセット、許可操作 | runtime状態として扱う |
| ライン・ラベル | 価格、SL、TP、サイン位置を表示する | 表示用オブジェクトと判定値を混同しない |
| パネル | 複数情報をまとめて表示する | 描画負荷と更新頻度を確認する |
UI層の不具合でEA本体が止まらないように、表示系と判定系は分けて設計します。
input初期値とruntime状態を分ける
EA設計で混同しやすいものに、input初期値とruntime状態があります。
inputはEAを起動する時の設定値です。runtime状態は、EA稼働中に変わる内部状態やボタン操作後の状態です。
| 分類 | 意味 | 例 | 注意点 |
|---|---|---|---|
| input初期値 | 起動時に読み込む設定 | ロット、時間帯、フィルターON/OFF | 途中で勝手に変えたように見せない |
| runtime状態 | 稼働中に変わる状態 | ボタンON/OFF、現在の認証状態、一時停止 | 再起動時に保持するか決める |
| 推奨値 | 説明用・マニュアル用の値 | 確認しやすい標準値 | 保証表現にしない |
| 検証用値 | テストしやすくする値 | ログON、短い周期、確認用条件 | UserLive向け初期値と分ける |
input初期値とruntime状態を混同すると、ユーザーが「設定を変えていないのに動作が変わった」と感じる原因になります。
ログファースト設計
ログファースト設計とは、動作確認や不具合調査で必要な情報を、最初からログで追えるように設計する考え方です。
EAでは、動かなかった時に「条件が未成立だったのか」「riskで止まったのか」「注文で失敗したのか」「通知だけ失敗したのか」を分けて確認できる必要があります。
| ログ分類 | 確認する内容 | 例 |
|---|---|---|
| INIT | 起動時の設定、認証、環境 | version、symbol、timeframe、input summary |
| GATE | 必須条件の通過・停止 | spread NG、time NG、data insufficient |
| SCORE | 判定点数や条件一致 | trend score、reverse score |
| RISK | ロット、上限、停止状態 | max positions、external stop、margin check |
| EXECUTION | 注文・決済結果 | retcode、order、deal、error |
| EXIT | 決済条件、トレール、保有管理 | trail start、close reason、position status |
| NOTIFY | 通知送信結果 | sent、failed、http code |
ログを出しすぎると確認しにくくなるため、通常運用、検証、バックテストでログ量を切り替えられる設計が有効です。
AdminDevとUserLiveの違い
EA開発では、開発者向けのAdminDev版と、利用者向けのUserLive版を分けて考えることがあります。
AdminDevは検証や設定確認をしやすくするための版です。UserLiveは実際の利用者向けに、不要な開発用設定を見せすぎないように整理した版です。
| 項目 | AdminDev | UserLive |
|---|---|---|
| 目的 | 開発、検証、ログ確認 | 利用者向け運用 |
| input表示 | 検証用項目を広めに表示 | 必要項目を中心に整理 |
| ログ | 詳細ログを出しやすい | 通常は抑制し、必要時に確認 |
| 外部連携 | endpointや検証設定を確認しやすい | 誤操作しにくい形にする |
| サポート | 不具合調査に向く | 利用者が扱いやすい構成にする |
AdminDevとUserLiveを分ける目的は、機能差を作ることではなく、検証しやすさと利用しやすさを両立することです。
BTとLIVEの責務分離
BTはバックテスト、LIVEはリアルタイム環境での確認です。
同じEAでも、BTとLIVEでは、価格データ、spread、約定、外部連携、通知、時刻、ログ量の扱いが変わる場合があります。
| 項目 | BT | LIVE | 設計上の注意 |
|---|---|---|---|
| 価格データ | ヒストリカルデータに依存 | リアルタイム配信に依存 | データ条件をログに残す |
| spread | テスター設定や履歴に依存 | 変動する場合がある | spreadログを分ける |
| 外部連携 | 制限や分岐が必要な場合がある | WebRequestや通知が動く | BT用分岐を明記する |
| ログ量 | 大量になりやすい | 読みやすさ重視 | ログプロファイルを分ける |
| 検証目的 | 条件と処理の再現確認 | 実環境での動作確認 | 結果保証と誤解させない |
バックテスト結果は将来の結果を保証するものではありません。BTでは、条件、分岐、ログ、注文処理の再現性を確認することが重要です。
表示系と判定系を分ける
EAでは、チャート表示やパネル表示を行うことがあります。
ただし、表示されている情報と内部で判定している値は分けて確認する必要があります。
| 分類 | 例 | 分ける理由 |
|---|---|---|
| 表示系 | パネル、ラベル、矢印、ライン、色 | 利用者に見せるための情報 |
| 判定系 | 内部変数、signal結果、risk許可、exit状態 | EAの処理を決める情報 |
| ログ系 | Expertsログ、CSV、通知ログ | 後から確認するための情報 |
表示系だけを見て「条件が成立した」と判断すると、内部判定とズレる場合があります。EAの検証では、表示、ログ、注文履歴を合わせて確認します。
関連ログ・関連エラー
責務分離したEAでは、エラーや不具合も層ごとに確認します。
| 層 | 出やすい問題 | 確認するログ |
|---|---|---|
| signal | 条件が成立しない、データ不足 | GATE、SCORE、CopyBuffer、CopyRatesログ |
| execution | 注文失敗、retcodeエラー | EXECUTION、Journal、TRADE_RETCODE |
| risk | 新規停止、ロット不正、上限到達 | RISK、symbol info、position count |
| exit | 決済されない、トレールしない | EXIT、position status、trail log |
| auth | 認証失敗、期限不一致 | AUTH、認証状態、マスク済み口座情報 |
| notification | 通知が届かない、連続通知 | NOTIFY、HTTP status、throttle |
エラーコードの確認は、MQL5エラーコード辞典も参考にしてください。
EA利用者向けの確認ポイント
EA利用者は、コードの詳細を理解していなくても、どの層で止まっているかを整理できます。
- 条件が成立していないのか
- 条件は成立したが新規エントリーが停止されたのか
- 注文処理で失敗したのか
- 保有後の決済条件が未成立なのか
- 通知だけが届いていないのか
- 認証や外部制御で停止しているのか
- 表示だけが更新されていないのか
問い合わせ前には、チャート画像だけでなく、Expertsログ、Journalログ、setファイル、発生時刻、銘柄名、時間足を整理してください。
MQL5開発者向けの確認ポイント
MQL5開発者は、各層の入力、出力、ログを決めてから実装すると、保守しやすくなります。
| 設計項目 | 確認すること | 目的 |
|---|---|---|
| signal出力 | 方向、理由、スコア、GATE状態 | 注文前の判定を追えるようにする |
| execution結果 | retcode、ticket、error、comment | 注文失敗を追えるようにする |
| risk判定 | 停止理由、ロット、上限、外部停止 | なぜ止めたかを説明できるようにする |
| exit状態 | 保有状態、決済理由、トレール状態 | 保有後の挙動を確認できるようにする |
| notification結果 | 送信先、送信結果、抑制理由 | 通知不具合を切り分ける |
| UI更新 | 表示対象と更新頻度 | 描画負荷とロジック混在を避ける |
MQL5関数の役割は、MQL5関数辞書も参考になります。
検証担当者向けの確認ポイント
検証担当者は、EAの動作結果だけでなく、どの層のログがどう出ているかを確認します。
- INITログで環境と設定が確認できるか
- GATEで止まった理由が分かるか
- SCOREの内訳が確認できるか
- riskで停止した理由が確認できるか
- executionのretcodeが確認できるか
- exitの決済理由が確認できるか
- notificationの送信成否が分かるか
- BTとLIVEでログ量や分岐が整理されているか
検証環境の整理は、MT5検証・運用環境ガイドも参考にしてください。
よくある誤解
| 誤解 | 実際の確認 | 注意点 |
|---|---|---|
| signalが成立すれば必ず注文される | riskやexecutionで止まることがある | 判定成立と注文成功を分ける |
| 通知が届けば注文も成功している | 通知と注文は別責務 | executionログを確認する |
| risk層があれば損失を防げる | risk層は制限・確認の層 | 保証表現にしない |
| パネル表示が正しければ内部判定も正しい | 表示と内部状態は分けて確認する | ログと注文履歴も確認する |
| バックテストで動けばLIVEも完全に同じ | 価格配信、spread、外部連携、約定条件が異なる場合がある | BTとLIVEの責務を分けて確認する |
開発依頼前に仕様化する項目
EA開発や改修を相談する場合は、最初から関数名を指定するよりも、責務ごとに何をしたいかを整理する方が確認しやすくなります。
| 仕様項目 | 整理する内容 | 必要な資料 |
|---|---|---|
| signal | エントリー候補条件、GATE、SCORE、時間足 | 条件メモ、インジ名、スクリーンショット |
| execution | 注文方向、ロット、SL/TP、Magic Number | 希望仕様、既存EAログ、取引例 |
| risk | 最大数、停止条件、ロット制御、外部停止 | setファイル、運用条件メモ |
| exit | 決済条件、トレール、時間決済、手動決済後の扱い | 決済条件メモ、ログ、取引履歴 |
| notification | 通知条件、通知先、抑制条件 | 通知文面案、送信条件 |
| UI | 表示したい状態、ボタン、パネル、ライン | 画面イメージ、必要項目一覧 |
開発依頼前の資料整理は、MT5開発依頼前に用意する資料まとめも参考にしてください。
問い合わせ前に送る情報
MQL5 EA設計や改修について相談する場合は、次の情報を整理してください。
| 情報 | 必要性 | 注意点 |
|---|---|---|
| EA名・バージョン | 対象特定 | 古い版と混在しないようにする |
| 対象銘柄・時間足 | 再現条件 | サフィックス込みで記録する |
| setファイル | 入力条件の再現 | 認証情報やURLが含まれないか確認する |
| Expertsログ | EA内部状態の確認 | 問題発生前後を含める |
| Journalログ | MT5端末側の確認 | 注文、接続、テスター関連を含める |
| スクリーンショット | 表示状態の確認 | 口座番号や個人情報を隠す |
| 希望する改修内容 | 責務範囲の確認 | signal、execution、risk、exitに分けて書く |
送ってはいけない情報
EA開発や改修相談では、ログやスクリーンショットが重要です。ただし、次の情報はそのまま送らないでください。
- 口座番号の全桁
- 投資家パスワード
- マスターパスワード
- Webhook URLの実値
- GAS URLの実値
- APIキー
- 認証トークン
- 外部サービスの秘密情報
- 個人情報
- 第三者の個人情報が入ったログ
問い合わせが必要な場合は、必要情報を整理したうえで、不具合報告・サポート依頼を確認してください。
MQL5 EA設計パターン確認チェック表
- □ signalとexecutionを分けて整理した
- □ riskとexitを分けて整理した
- □ GATE / SCORE / SPECIAL FILTERS / ENTRYを分けて確認した
- □ TREND / REVERSE / RANGEの役割差を確認した
- □ auth層の有無を確認した
- □ external control層の有無を確認した
- □ notification層の責務を確認した
- □ UI / panel層と判定系を分けた
- □ input初期値とruntime状態を分けた
- □ AdminDevとUserLiveの違いを整理した
- □ BTとLIVEの違いを整理した
- □ 各層のログを確認できるようにした
- □ setファイル、Expertsログ、Journalログを保存した
- □ 口座番号や認証情報をマスクした
次に読む技術講座
この講座とあわせて確認すると、MT5・MQL5開発、検証、不具合調査の流れを整理しやすくなります。
| No | 講座 | 確認できること |
|---|---|---|
| LEARN-002 | MQL5開発入門 | MQL5開発の前提を確認する |
| LEARN-007 | MQL5注文・ポジション・履歴管理完全ガイド | 注文・ポジション管理との接続を確認する |
| LEARN-014 | MQL5デバッグ・ログファースト開発完全ガイド | ログファースト設計を確認する |
| LEARN-020 | MQL5イベント処理完全ガイド | イベント処理の責務分離を確認する |
| LEARN-022 | MQL5長時間稼働・安定化完全ガイド | 長時間稼働時の安定化を確認する |
次に確認するページ
技術講座を確認した後、導入・商品確認・開発相談・不具合報告へ進む場合は、以下のページも確認してください。
| ページ | 確認できること |
|---|---|
| 技術講座一覧 | MT5・MQL5・EA開発に関する技術講座を順番に確認できます。 |
| 導入ガイド | EA、インジケーター、補助ツールを導入する前の確認事項を整理できます。 |
| 商品一覧 | EAファンクラブで扱う補助ツール、インジケーター、コピーEAなどを確認できます。 |
| 開発代行ページ | EA、インジケーター、補助ツールの新規作成・改修相談を確認できます。 |
| 不具合報告・サポート依頼 | ログ、スクリーンショット、再現手順を整理して相談する場合に確認できます。 |
よくある質問
EA設計でsignalとexecutionを分ける理由は何ですか?
条件成立と注文実行を分けて確認するためです。signalはエントリー候補を出す層で、executionは注文や決済リクエストを処理する層です。分けておくと、条件は成立したのに注文できなかった理由を確認しやすくなります。
GATEとSCOREは何が違いますか?
GATEは必須通過条件、SCOREは条件の強さや一致度を評価する考え方です。GATEで止まった場合は、SCOREが高くてもENTRYへ進まない設計にすることがあります。
risk層とexit層は分ける必要がありますか?
分けた方が確認しやすくなります。risk層は主に新規許可や制限を確認し、exit層は保有後の決済やトレールを管理します。新規停止中でも既存ポジションのexitを継続する場合があります。
外部制御や通知はEA本体に直接入れてよいですか?
機能として入れることはありますが、責務としては分けて設計する方が安全です。外部制御はexternal control層、通知はnotification層として扱うと、不具合調査がしやすくなります。
AdminDevとUserLiveは何が違いますか?
AdminDevは開発・検証・ログ確認をしやすくする版、UserLiveは利用者向けに必要項目を整理した版です。検証用設定や詳細ログをそのまま利用者向けに出しすぎないことが重要です。
BTとLIVEは同じ設計でよいですか?
基本ロジックは同じでも、価格データ、spread、外部連携、通知、ログ量などは分けて確認する必要があります。バックテスト結果は将来の結果を保証するものではありません。
UIパネルの表示とEA内部状態は同じですか?
同じとは限りません。UIは表示層であり、内部の判定状態とは別に管理する必要があります。検証では、パネル表示、Expertsログ、注文履歴を合わせて確認してください。
ログは多いほどよいですか?
多ければよいわけではありません。INIT、GATE、SCORE、RISK、EXECUTION、EXIT、NOTIFYなど、目的別に必要なログを出し、通常運用と検証時でログ量を切り替えられる設計が有効です。
開発依頼前にどこまで仕様を決めるべきですか?
最低限、signal、execution、risk、exit、notification、UIのどこを作りたいのかを整理してください。EA名、対象銘柄、時間足、setファイル、ログ、スクリーンショットもあると確認しやすくなります。
GATE / SCORE / SPECIAL FILTERSは必ず必要ですか?
すべてのEAで必須ではありません。ただし、条件が複数あるEAでは、通過条件、点数化、例外フィルター、最終ENTRYを分けると、検証やログ確認がしやすくなります。
まとめ
MQL5 EAを長期的に保守しやすくするには、signal、execution、risk、exit、auth、external control、notification、UI / panelを分けて設計することが重要です。
signalは候補を出す層、executionは注文・決済を処理する層、riskは許可や制限を確認する層、exitは保有後の終了条件を管理する層です。
GATE / SCORE / SPECIAL FILTERS / ENTRYを分けると、条件が成立したのか、どこで止まったのか、なぜ見送ったのかをログで追いやすくなります。
AdminDevとUserLive、BTとLIVE、input初期値とruntime状態、表示系と判定系を分けることで、検証、改修、販売後サポートの負担を減らしやすくなります。
EA開発や改修を相談する場合は、EA名、バージョン、対象銘柄、時間足、setファイル、Expertsログ、Journalログ、スクリーンショットを整理し、口座番号や認証情報は必ずマスクしてください。

