EA開発でトラブルを避けるための仕様書の作り方
EA開発でトラブルを避けるためには、依頼前に仕様書を整理しておくことが重要です。
「エントリー条件だけ」「画像だけ」「このインジと同じように」などの説明だけでは、開発側が判断する範囲が広くなり、完成後に「思っていた動きと違う」「通知の条件が違う」「決済の優先順位が違う」「ログで原因を追えない」といったズレが起きやすくなります。
EAの仕様書では、売買条件だけでなく、シグナル判定、発注処理、ロット管理、決済、停止条件、通知、外部連携、チャート表示、ログ、バックテスト条件、納品物、サポート範囲を分けて整理する必要があります。
この記事では、EA開発でトラブルを避けるための仕様書の作り方を、依頼者側・開発者側の両方で確認しやすい形に整理します。
なお、この記事はMT4/MT5、MQL4/MQL5、EA、インジケーター、コピーEA、通知・診断・補助ツールの開発依頼前整理を目的とした技術記事です。投資助言、売買指示、利益保証、勝率保証、損失回避保証、推奨ロット、推奨銘柄、推奨エントリー、特定ブローカー誘導を目的としたものではありません。
EA開発で仕様書が必要な理由
EAは、相場を見て自動的に判断しているように見えても、実際には決められた条件に従って処理を行うプログラムです。
そのため、どの条件でシグナルを出すのか、どのタイミングで発注するのか、注文できない時にどう扱うのか、どの条件で決済するのか、どのログを残すのかを事前に決めておく必要があります。
| 仕様書で整理する理由 | 整理しない場合に起きやすい問題 | 確認すべきこと |
|---|---|---|
| 認識違いを防ぐ | 依頼者と開発者で条件解釈がずれる | 条件、タイミング、対象足、ON/OFFを明記する |
| 実装範囲を決める | 追加機能が後から増え、見積範囲が曖昧になる | 初回対応範囲と後日追加範囲を分ける |
| 検証しやすくする | 完成後に何を確認すればよいか分からない | バックテスト条件、ログ、確認項目を決める |
| 不具合調査しやすくする | 動かない理由をログで追えない | Expertsログ、Journalログ、エラー時の出力を決める |
| 納品後のトラブルを減らす | 仕様変更と不具合修正の区別が曖昧になる | 納品物、確認範囲、サポート範囲を整理する |
仕様書に必ず入れたい基本情報
仕様書の冒頭では、対象となるEAの基本情報を整理します。ここが曖昧だと、MT4用なのかMT5用なのか、新規作成なのか既存改修なのか、どの銘柄や時間足で使うのかが分からなくなります。
| 項目 | 書く内容 | 補足 |
|---|---|---|
| 依頼区分 | 新規EA作成、既存EA改修、MT4からMT5への作り直し、通知追加、ログ追加など | 作業範囲を明確にするために必要です。 |
| 対象環境 | MT4 / MT5、OS、VPS、ブローカー、口座タイプ | Hedging / Netting、銘柄名、約定条件に影響します。 |
| 対象銘柄 | GOLD、XAUUSD、USDJPYなど | suffixや小数点桁、tick valueも確認対象です。 |
| 時間足 | M1、M5、M15、H1など | 設置時間足と判定時間足が違う場合は分けます。 |
| 使用目的 | 完全自動、半裁量、裁量補助、決済補助、通知、記録など | 発注機能の有無を明確にします。 |
| 納品物 | ex4 / ex5、mq4 / mq5、setファイル、簡易マニュアル、確認ログなど | ソース納品の有無は事前に分けてください。 |
| 確認方法 | バックテスト、デモ確認、ログ確認、スクリーンショット確認 | 完成判定に必要な項目です。 |
EAの責務を分けて書く
EA仕様書では、すべてを「売買条件」としてまとめず、役割ごとに分けて書くことが重要です。
特に、シグナル判定と発注処理、リスク管理と決済処理、通知と外部連携、表示と内部判定を混同すると、実装後の確認が難しくなります。
| 責務 | 仕様書に書く内容 | 注意点 |
|---|---|---|
| signal | BUY / SELL候補を判定する条件 | シグナル成立と発注実行は分けます。 |
| execution | 発注方法、注文タイプ、ロット、スリッページ、発注前チェック | 注文できない時の扱いも書きます。 |
| risk | 最大ポジション、ロット制限、証拠金、日次停止、最大損失 | 推奨ロットではなく仕様として整理します。 |
| exit | TP、SL、トレーリング、建値移動、時間決済、反対シグナル決済 | 複数決済条件の優先順位を決めます。 |
| notification | アラート、Push通知、Discord通知、メール通知 | 通知条件と通知頻度を整理します。 |
| external control | WebRequest、Google Sheets、外部シート、認証、停止制御 | 通信失敗時の安全側動作を決めます。 |
| UI | ボタン、パネル、ラベル、ライン、色、表示位置 | 表示系と判定系を分けて扱います。 |
| log | 初期化、判定、発注、決済、エラー、外部連携のログ | 不具合調査できる粒度にします。 |
シグナル条件の書き方
シグナル条件は、「買い」「売り」「見送り」を判断するための条件です。仕様書では、BUY条件とSELL条件を分け、どの足で判定するのか、確定足か現在足か、複数条件をANDで見るのかORで見るのかを明確にします。
| 項目 | 書く内容 | 確認ポイント |
|---|---|---|
| BUY条件 | 買い候補になる条件 | 価格、インジケーター値、ローソク足、時間帯などを整理する |
| SELL条件 | 売り候補になる条件 | BUY条件の逆なのか、別条件なのかを明記する |
| 判定足 | 現在足、確定足、1本前、複数時間足 | リペイントや再判定の扱いに影響する |
| 使用インジケーター | MA、RSI、ATR、BB、独自インジなど | パラメータ、buffer番号、shiftを整理する |
| フィルター | スプレッド、時間帯、曜日、ニュース、ボラティリティ | シグナル成立後に止める条件を分ける |
| 同時成立時 | BUYとSELLが同時成立した時の扱い | 見送り、優先方向、エラー扱いなどを決める |
| 再発注制御 | 同一バー1回、同方向1回、ポジション保有中禁止など | 重複発注を避けるために必要です。 |
シグナル条件は、チャート上の見た目だけで判断せず、数値条件として書ける形にすることが重要です。画像で説明する場合でも、どの足のどの価格、どのインジケーター値、どのタイミングを見ているのかを補足してください。
発注処理の書き方
発注処理では、シグナルが成立した後に、どの注文を出すのかを決めます。シグナルが成立していても、ロット、証拠金、スプレッド、取引時間、最大ポジションなどで発注を見送る場合があります。
| 項目 | 書く内容 | 注意点 |
|---|---|---|
| 注文タイプ | 成行、指値、逆指値、Buy Stop、Sell Stopなど | MT4 / MT5で扱いが異なる場合があります。 |
| ロット | 固定ロット、残高比例、複利、外部指定、手動指定など | 推奨ロットではなく、計算方式として書きます。 |
| Magic Number | EA識別番号、ロジック別番号、手動注文の扱い | 複数EA運用では特に重要です。 |
| 最大ポジション | 全体、方向別、ロジック別、銘柄別の上限 | エントリーしない理由になるためログ化します。 |
| スプレッド制限 | 最大スプレッド、スプレッド拡大時の停止 | GOLD / XAUUSDなどでは重要です。 |
| 取引時間 | 稼働時間、停止時間、曜日、サーバー時間 | PC時間とサーバー時間を混同しないようにします。 |
| 注文失敗時 | 再試行するか、見送るか、ログだけ残すか | 無限リトライや過剰ログを避けます。 |
決済条件の書き方
決済条件は、EAの挙動に大きく影響します。TPとSLだけでなく、内部決済、トレーリング、建値移動、反対サイン決済、時間決済、バスケット決済、一括決済などを分けて書いてください。
| 決済項目 | 書く内容 | 確認ポイント |
|---|---|---|
| TP | 固定pips、価格差、ATR倍率、平均建値基準など | 注文ごとか、バスケット単位かを分ける |
| SL | 固定SL、内部損切り、建値移動、最大損失 | サーバー上に置くSLか、EA内部判定かを明確にする |
| トレーリング | 開始条件、追従幅、更新間隔、対象ポジション | TPや建値移動との優先順位を確認する |
| 建値移動 | 開始利益、ロック幅、対象方向 | トレーリングとの関係を整理する |
| 反対サイン決済 | 反対条件で決済するか、新規反対注文を出すか | ドテンと単純決済を混同しない |
| 時間決済 | 指定時刻、保有時間、曜日、週末停止 | サーバー時間基準かPC時間基準かを明記する |
| 一括決済 | 同一Magic、同一方向、全ポジションなど | 対象範囲を明確にする |
複数の決済条件がある場合は、優先順位を必ず書いてください。たとえば、強制損切り、手動全決済、内部決済、トレーリング、通常TPが同時に関係する場合、どれを先に処理するかで結果が変わります。
リスク管理・停止条件の書き方
EA仕様書では、リスク管理や停止条件も重要です。EAが注文する条件だけでなく、注文しない条件、止める条件、通知だけ行う条件を分けてください。
| 項目 | 書く内容 | 注意点 |
|---|---|---|
| 最大ポジション | 全体、方向別、ロジック別、銘柄別 | 既存ポジションの扱いを明確にする |
| 最大ロット | 1注文、合計、日次、ロジック別 | ブローカーの最小・最大ロットも確認する |
| 最大損失 | 金額、pips、%、日次、週次など | 実装対象か、利用者側確認かを分ける |
| 含み損制限 | 合計含み損、方向別、Magic別 | 監視対象の範囲を明確にする |
| 連敗停止 | 連敗回数、日次リセット、手動解除 | 履歴判定の対象を決める |
| 外部停止 | Google Sheets、外部シート、手動スイッチ | 取得失敗時の扱いを決める |
| 復帰条件 | 翌日復帰、手動復帰、再起動後の扱い | 停止後に勝手に再開するかを明記する |
通知・外部連携の書き方
Discord通知、Google Sheets連携、CSV出力、外部シート制御、ライセンス認証を使う場合は、売買ロジックとは別に仕様を書きます。
外部連携では、送信内容、送信タイミング、送信先、失敗時の扱い、通知頻度、認証情報の扱いを明確にしてください。
| 連携項目 | 仕様書に書く内容 | 注意点 |
|---|---|---|
| Discord通知 | 起動、停止、注文、決済、エラー、日次集計など | Webhook URLはそのまま共有しない |
| Google Sheets | 記録項目、列構成、送信タイミング、GASの扱い | 書き込み失敗時の扱いを決める |
| CSV出力 | 保存先、ファイル名、列、文字コード、追記方式 | 検証用か運用記録用かを分ける |
| 外部シート制御 | ON/OFF、取引方向、停止時間、設定値の取得 | 取得失敗時は安全側に倒すかを決める |
| ライセンス認証 | 口座認証、期限、通信失敗、認証ログ | 認証失敗時に注文を止めるか明記する |
| WebRequest | 許可URL、送信先、HTTPステータス、タイムアウト | MT5側の設定も確認対象にする |
表示・パネルUIの書き方
チャート上にボタン、パネル、ラベル、ライン、損益情報、状態表示を出すEAでは、UI仕様を別に整理します。
表示内容と内部判定を混同すると、表示が変わっただけでロジックが変わったように見えることがあります。表示系と判定系は分けて書いてください。
| UI項目 | 書く内容 | 確認ポイント |
|---|---|---|
| 表示位置 | 左上、右上、チャート下部、固定座標など | 画面サイズや縮尺で崩れないか確認する |
| ボタン | BUY、SELL、CLOSE、RESET、ON/OFFなど | 誤操作防止、押下後ログを整理する |
| 状態表示 | READY、BLOCK、ERROR、AUTH、SPREADなど | 判定理由を簡潔に見せる |
| ライン | Entry、TP、SL、Trail、平均建値など | 削除時・再起動時の扱いを決める |
| 色・表示切替 | 状態ごとの色、表示ON/OFF、簡易表示 | 見やすさと負荷のバランスを取る |
| Object管理 | 作成、更新、削除、残存チェック | EA削除時や時間足変更時の挙動を確認する |
ログ仕様の書き方
EA開発では、ログ仕様を最初から決めておくと、不具合調査や納品後の確認がしやすくなります。
ログは多ければよいわけではありません。初期化、設定読込、シグナル判定、発注前チェック、注文結果、決済理由、外部連携、エラー、停止理由を追える粒度で整理します。
| ログ区分 | 出す内容 | 用途 |
|---|---|---|
| INIT | EA名、バージョン、銘柄、時間足、主要設定 | 起動時の確認 |
| SELFCHECK | 自動売買許可、銘柄仕様、ロット条件、WebRequest設定 | 導入時の不備確認 |
| GATE | 必須条件のOK / NG | エントリーしない理由を追う |
| SCORE | 任意条件やスコア判定 | シグナル強度や見送り理由を確認する |
| ENTRY | 発注前チェック、注文要求、注文結果 | 注文処理の確認 |
| EXIT | 決済条件、対象ポジション、決済結果 | 決済理由の確認 |
| RISK | 停止条件、損失制限、最大ポジション、証拠金 | 安全制御の確認 |
| EXTERNAL | 通知、WebRequest、Google Sheets、CSV、認証 | 外部連携の確認 |
| ERROR | エラー番号、retcode、失敗理由 | 不具合調査 |
バックテストではログ量が多すぎると検証速度に影響する場合があります。通常ログ、詳細ログ、バックテスト用簡易ログを分ける仕様にしておくと、運用と検証の両方で確認しやすくなります。
Inputs・setファイルの書き方
EA仕様書では、ユーザーが変更するinput、固定値にする項目、開発中だけ見せる項目を分けて整理します。
販売用や配布用のUserLive版では、endpoint、token、内部固定値、危険な検証スイッチを見せない方がよい場合があります。一方、AdminDev版では検証のために詳細inputを残す場合があります。
| 項目 | 書く内容 | 確認ポイント |
|---|---|---|
| ユーザー設定 | ロット、Magic Number、時間帯、通知ON/OFF、ログON/OFFなど | 利用者が変更する項目に限定する |
| 推奨初期値 | 初期値、検証用値、配布時の値 | 利益保証ではなく動作確認用として扱う |
| 固定値 | ユーザーに見せない内部設定 | UserLive化時に整理する |
| 外部連携設定 | Webhook、GAS、APIキー、endpoint、token | 実値の扱いに注意する |
| ログ設定 | 通常、詳細、バックテスト、通知ログ | ログ過多を避ける |
| setファイル | 用途別set、検証用set、初期配布set | 変更前後を分けて保存する |
検証条件・完成判定の書き方
EA開発では、何をもって完成とするかを事前に決めておくことが重要です。
コンパイルエラーがないことは最低条件ですが、それだけでは完成とはいえません。初期化、設定読込、注文前チェック、注文結果、決済、通知、ログ、バックテスト、デモ確認などを分けて確認します。
| 確認項目 | 確認内容 | 判定例 |
|---|---|---|
| コンパイル | mq4 / mq5がエラーなくコンパイルできるか | コンパイルエラーなし |
| 初期化 | チャート設置時にエラーなく起動するか | INIT OK、設定読込OK |
| 入力項目 | Inputsが仕様どおりか | 不要な項目が出ていない |
| 注文前チェック | スプレッド、時間、証拠金、最大ポジションを確認するか | 見送り理由がログに出る |
| 発注 | 条件成立時に注文要求が出るか | 注文成功または失敗理由が分かる |
| 決済 | TP、SL、内部決済、トレーリングが仕様どおりか | 決済理由が追える |
| 通知 | 通知条件と通知内容が合っているか | 通知過多や通知漏れがない |
| バックテスト | 指定条件で検証できるか | 異常停止なし、ログ確認可能 |
| デモ確認 | 実際のMT5環境で基本動作するか | 環境差を確認できる |
よくある仕様書の不足例
仕様書が曖昧な場合、完成後に修正範囲や追加費用、確認範囲で認識違いが起きやすくなります。以下のような不足がないか確認してください。
| 不足している内容 | 起きやすい問題 | 補足すべきこと |
|---|---|---|
| 確定足か現在足か不明 | サインやエントリー位置が想定とずれる | shift 0 / shift 1、確定足判定を明記する |
| BUY条件だけ書いてある | SELL条件の解釈が開発側判断になる | BUY / SELLを別々に書く |
| 決済優先順位がない | TP、SL、反対決済、トレーリングの結果が変わる | 優先順位を明記する |
| 既存ポジションの扱いが不明 | 手動注文や他EAのポジションを巻き込む | Magic Number、symbol、comment範囲を決める |
| 通知条件が曖昧 | 通知漏れや通知過多が起きる | 通知するイベントと頻度を決める |
| ログ仕様がない | 不具合時に原因を追えない | 最低限のINIT、GATE、ENTRY、EXIT、ERRORを決める |
| 外部連携失敗時の扱いがない | 通信失敗時にEAが止まるか続行するか不明 | 安全側動作を明記する |
| 完成判定がない | どこまで確認すれば納品完了か分からない | コンパイル、ログ、BT、デモ確認を分ける |
仕様書テンプレート
以下の項目を埋める形にすると、EA開発依頼前の整理が進めやすくなります。すべてを最初から完璧に書く必要はありませんが、不明点は「未定」「相談したい」として残してください。
【1. 依頼概要】 ・依頼区分: ・MT4 / MT5: ・新規作成 / 既存改修: ・対象ファイル: ・対象銘柄: ・時間足: ・利用環境: 【2. EAの目的】 ・完全自動 / 半裁量 / 裁量補助 / 決済補助 / 通知 / 記録: ・このEAで実現したいこと: ・このEAで行わないこと: 【3. signal】 ・BUY条件: ・SELL条件: ・判定足: ・使用インジケーター: ・フィルター: ・同時成立時の扱い: 【4. execution】 ・注文タイプ: ・ロット計算: ・Magic Number: ・最大ポジション: ・スプレッド制限: ・取引時間: ・注文失敗時の扱い: 【5. risk】 ・最大ロット: ・最大損失: ・含み損制限: ・連敗停止: ・外部停止: ・復帰条件: 【6. exit】 ・TP: ・SL: ・トレーリング: ・建値移動: ・反対サイン決済: ・時間決済: ・一括決済: ・決済優先順位: 【7. notification / external】 ・通知先: ・通知条件: ・WebRequest: ・Google Sheets: ・CSV出力: ・外部シート制御: ・認証: 【8. UI / 表示】 ・パネル: ・ボタン: ・ライン: ・ラベル: ・色: ・削除時の扱い: 【9. log】 ・INIT: ・SELFCHECK: ・GATE: ・ENTRY: ・EXIT: ・RISK: ・ERROR: ・外部連携ログ: 【10. 検証】 ・バックテスト条件: ・デモ確認条件: ・確認するログ: ・確認するスクリーンショット: ・完成判定: 【11. 納品物】 ・ex4 / ex5: ・mq4 / mq5: ・setファイル: ・簡易マニュアル: ・更新履歴: ・サポート範囲:
送らない方がよい情報
仕様書、setファイル、ログ、スクリーンショットを共有する時は、機密情報をそのまま含めないようにしてください。
| 送らない方がよい情報 | 理由 | 対応方法 |
|---|---|---|
| MT4 / MT5のログインパスワード | 口座へ接続できる可能性があるため | 共有しない |
| 投資家パスワード | 口座情報を閲覧できる可能性があるため | 共有しない |
| VPSログイン情報 | 第三者が接続できる可能性があるため | 共有しない |
| Discord Webhook URL | 通知先へ送信できる可能性があるため | 実値を伏せる |
| Google Apps Script URL | 外部連携先へアクセスできる可能性があるため | 実値を伏せる |
| APIキー・認証トークン | 外部サービスや認証情報に関わるため | 先頭・末尾以外を伏せる |
| 口座番号の全桁 | 個人情報・口座情報に関わる可能性があるため | 一部を伏せる |
| 第三者EAの保護解除依頼 | 権利や利用規約に反する可能性があるため | 対応不可として扱う |
相談前に確認する関連ページ
EA開発の仕様書を整理する時は、開発相談ページ、資料整理ページ、EA開発依頼前チェック、ログ確認、setファイル確認、不具合報告のページもあわせて確認してください。
| 確認したい内容 | 関連ページ | 使い方 |
|---|---|---|
| 開発・改修相談全体を確認したい | 開発・改修の相談ページ | EA作成、インジ作成、既存改修、外部連携追加の相談前に確認します。 |
| 依頼前資料を整理したい | MT5開発依頼前に用意する資料まとめ | 仕様書、setファイル、ログ、スクリーンショットを整理します。 |
| MT5 EA開発依頼前の条件を確認したい | MT5 EA開発を依頼する前に整理すること | EA開発依頼前の条件整理に使います。 |
| ログを問い合わせ前に整理したい | EAのログを問い合わせ前に確認する方法 | Expertsログ、Journalログ、発生時刻、再現条件を整理します。 |
| setファイルを送る前に確認したい | MT5でEAのsetファイルを送る前に確認すること | 現在使用中set、変更前後、外部連携情報の有無を確認します。 |
| 不具合報告を送りたい | 不具合報告・サポート依頼 | 動作不具合、ログ、スクリーンショット、再現条件を整理して相談します。 |
よくある質問
仕様書がない状態でもEA開発を相談できますか?
相談は可能です。ただし、仕様書がない場合は、目的、対象銘柄、時間足、エントリー条件、決済条件、通知の有無、ログの有無、現在困っていることを分かる範囲で整理してください。内容が曖昧な場合は、まず仕様整理から進める形になります。
画像や動画だけで仕様書の代わりになりますか?
参考資料にはなりますが、画像や動画だけでは条件を正確に実装できない場合があります。どのタイミングで、どの条件が成立し、どの処理を行うのかを文章や表で補足してください。
売買ロジックの相談もできますか?
依頼者が指定した条件を技術仕様として整理し、EAとして実装する相談は可能です。ただし、売買判断、相場予測、利益保証、勝率保証、推奨ロット、推奨銘柄、推奨エントリーの提示は行いません。
既存EAのex5ファイルだけでも仕様書を作れますか?
ex5ファイルだけでは内部ロジックを直接確認できません。動作を観察して仕様を再整理することはできますが、内部処理の完全な再現や保護解除を前提とした改修には対応できません。mq5やmqhなどのソースコードがあるか確認してください。
仕様変更と不具合修正はどう分けますか?
事前に合意した仕様どおりに動かない場合は不具合確認の対象です。一方、当初仕様にない条件追加、通知追加、表示変更、ロジック変更、外部連携追加は仕様変更として扱う場合があります。仕様書に完成判定とサポート範囲を書いておくと分けやすくなります。
まとめ
EA開発でトラブルを避けるためには、売買条件だけでなく、signal、execution、risk、exit、notification、external control、UI、log、validationを分けて仕様書に整理することが重要です。
特に、確定足か現在足か、BUY条件とSELL条件、発注前チェック、Magic Number、決済優先順位、通知条件、外部連携失敗時の扱い、ログ仕様、完成判定は、後から認識違いが起きやすい部分です。
仕様書を用意する時は、対象環境、対象銘柄、時間足、エントリー条件、決済条件、リスク管理、通知、外部連携、表示、ログ、検証条件、納品物、サポート範囲を分けて整理してください。
Webhook URL、GAS URL、APIキー、認証トークン、VPSログイン情報、口座番号などの機密情報は、そのまま共有しないようにしてください。技術確認に必要な情報と、共有すべきでない情報を分けることも、EA開発依頼前の重要な準備です。
