【移植#31】EAのアイデアを実装可能な仕様にする — 8項目の要件チェックをチャート表示¶

この記事の3行まとめ
- EAやインジケーターの依頼前に、売買条件を8項目へ分解して曖昧さを減らします
- 未定義値や範囲外の設定があれば、MT5チャート上で
NEEDS DEFINITIONと表示します - 専用MT5で11個の出力バッファを独立照合し、初期設定が8/8になることを確認しました
今回の原典は「作成依頼をどこへ相談するか」¶
投稿日順で次に当たる2010年1月18日の記事では、MT4用インジケーターやEAの作成依頼を受けるサービスが紹介されていました。プログラム知識がなくても、売買アイデアを形にしたい人がいるという背景も書かれています。
元記事「MT用インジケーター及びEAの作成のご依頼について」を読む
原典に載っている業者名や料金は2010年当時の情報です。現在の依頼先や費用として再掲するのではなく、今回は「作り始める前に、何を決めておけばよいか」という部分をMQL5へ移植します。
「移動平均線で売買したい」だけでは、実装者は条件を一意に決められません。どの時間足か、クロスの瞬間か確定足か、損切りは何pipsか、同時保有を許すかまで決めて、初めてテスト可能な仕様になります。
アイデアを8つの確認項目へ分解する¶
公開版インジケーターは、入力された内容を次の8項目で確認します。
| # | 確認項目 | 初期設定の例 | 合格条件 |
|---|---|---|---|
| 1 | 戦略名 | MA Cross Example | 前後の空白を除いて3〜63文字 |
| 2 | 売買方向 | ロング+ショート | 未定義以外 |
| 3 | シグナル | クロス・H1・確定足 | 条件、時間足、判定タイミングを定義 |
| 4 | 無効化条件 | 複合決済・SL 20pips | 決済方式と正のSL幅を定義 |
| 5 | 利益/時間出口 | TP 40pips・最大24本 | TPか最大保有本数のどちらかを定義 |
| 6 | 1回のリスク | 1.0% | 0%超、5%以下 |
| 7 | 執行制限 | 最大1ポジション・スプレッド2pips | 指定範囲内 |
| 8 | 取引時間帯 | 07:00〜20:00 | 開始・終了時刻が有効で同一でない |
8項目がすべて通るとREADY TO DISCUSS、1項目でも不足するとNEEDS DEFINITIONを表示します。
ここでの「READY」は、利益が出るという意味ではありません。少なくとも実装者と依頼者が、同じ条件を見ながら話を始められる状態を表します。
inputを要件票として使う¶
MQL5のinput変数は、プログラムのプロパティ画面から利用者が変更し、実行中のコードからは読み取り専用として扱われます。今回は入力欄を「戦略名」「エントリー」「決済」「リスク」「時間帯」にグループ分けしました。
input group "2. Entry definition"
input ENUM_SPEC_DIRECTION InpDirection = SPEC_DIRECTION_BOTH;
input ENUM_TIMEFRAMES InpSignalTimeframe = PERIOD_H1;
input ENUM_SPEC_TRIGGER InpEntryTrigger = SPEC_TRIGGER_CROSS;
input ENUM_SPEC_TIMING InpSignalTiming = SPEC_TIMING_CONFIRMED_BAR;
選択肢にはUNDEFINEDを用意しています。「決めていないのに、それらしい初期値が入っている」状態を避け、未決定の項目を明示できるようにするためです。
シグナル名だけでなく判定時点も決める¶
同じ「クロス」でも、形成中のバーで一瞬交差したら反応するのか、バーが確定してから反応するのかで結果は変わります。
公開版では次の2つを選べます。
CONFIRMED BAR: 確定足を使う設計EVERY TICK: ティックごとに判定する設計
このインジケーター自体はシグナルを計算しません。実装依頼時に、どちらを望んでいるかを決めるための項目です。時間足も同時に指定するため、「H1の確定足でクロス」といった形まで具体化できます。
決済は「勝ち方」と「間違いの定義」を分ける¶
利益確定だけが決まっていても、相場観が外れたときの終了条件がなければEAにはできません。そこで次の2項目を分けて確認します。
- 無効化条件として、決済方式とストップ幅が決まっているか
- 利益確定幅または最大保有本数が決まっているか
g_checks[3] = InpExitMode != SPEC_EXIT_UNDEFINED &&
InpStopLossPips > 0.0;
g_checks[4] = InpTakeProfitPips > 0.0 ||
InpMaxHoldingBars > 0;
実際のEAでは、価格固定、指標反転、時間切れなどをさらに詳しく定義する必要があります。このチェックは、その入口となる最低限の確認です。
時間帯はチャート時間でそろえる¶
InpSessionStartHourとInpSessionEndHourは、MT5チャートの時間を基準にします。日本時間とは限らないため、依頼書には「どの時間基準か」まで書く必要があります。
開始と終了が同じ場合は、24時間取引なのか設定ミスなのか区別できません。公開版では不合格にし、制限しない場合はInpUseSession=falseを選ぶ設計にしています。日をまたぐ22:00〜06:00のような指定も、開始と終了が異なるため要件としては有効です。
専用MT5での動作確認¶
売買無効の専用テストMT5で、本体インジケーターと検証EAをコンパイルしました。検証EAは8つの判定を独立に再計算し、本体の11個の出力バッファと照合しています。
| 項目 | 設定・結果 |
|---|---|
| 通貨ペア・表示時間足 | EURUSD・1時間足 |
| 初期設定の合格数 | 8/8 |
| Readyフラグ | 1(READY) |
| 個別判定バッファ | 8項目すべて1 |
| 未定義境界の独立計算 | 0/8 |
| 本体コンパイル | 0 errors / 0 warnings |
| 検証用コンパイル | 0 errors / 0 warnings |
| キャプチャ | 成功、エラー0 |
画面右上のVALIDATION PASS | 11 BUFFERS + 8 RULESは、本体の合格数・総数・Readyフラグ・8個の個別判定が、検証EAの再計算と一致したあとに表示しています。
この検証で確認できるのは、入力に対する判定と表示の一致です。戦略ロジックの収益性、依頼内容の法的妥当性、実装費用や納期までは評価しません。
主なパラメータ¶
| パラメータ | 初期値 | 説明 |
|---|---|---|
InpStrategyName | MA Cross Example | 戦略を識別する名前 |
InpDirection | BOTH | 売買方向 |
InpSignalTimeframe | H1 | シグナル判定時間足 |
InpEntryTrigger | CROSS | 条件の種類 |
InpSignalTiming | CONFIRMED BAR | 判定タイミング |
InpExitMode | COMBINED | 決済方式 |
InpStopLossPips | 20.0 | 損失側の終了幅 |
InpTakeProfitPips | 40.0 | 利益確定幅 |
InpMaxHoldingBars | 24 | 最大保有本数 |
InpRiskPercent | 1.0 | 1回の許容リスク率 |
InpMaxPositions | 1 | 最大同時ポジション数 |
InpMaxSpreadPips | 2.0 | 許容スプレッド |
InpUseSession | true | 時間帯制限の有無 |
InpSessionStartHour | 7 | 開始時刻(チャート時間) |
InpSessionEndHour | 20 | 終了時刻(チャート時間) |
リスク率5%以下などの範囲は、このツールが入力漏れや極端な設定を見つけるための安全側の基準です。あらゆる口座や戦略に適した推奨値を意味しません。
ダウンロード¶
31_Strategy_Spec_Checklist_v1_00.mq5 をダウンロード
MT5のIndicatorsへ保存してコンパイルし、チャートへ適用してください。注文関数はなく、設定内容の確認とチャート表示だけを行います。
この8項目だけで完成仕様になるわけではない¶
実装へ進むときは、指標の期間、価格種別、クロス方向、同一バーでの再エントリー、桁数、口座方式、障害時の動作なども決める必要があります。
一方で、最初から細部をすべて書こうとすると話が進みません。まず8項目を埋め、次に曖昧な言葉を数式と時刻へ変える順番なら、依頼者と実装者の認識差を小さくできます。
ロジック評価の結論¶
原典が示していたのは、プログラムを書けない人でもアイデアを形にしたいという需要でした。現在でも、その前段にある要件整理の重要性は変わりません。
今回のMQL5版は、依頼先を選ぶツールではなく、依頼内容を会話できる形へ整えるチェックボードです。8/8は完成の証明ではありませんが、「何を作るのか分からない」状態から抜ける最初の基準になります。
前後の記事¶
前: 【移植#30】経済指標後60分の値動きを測る — 初動・最大変動・戻りを同じ基準で記録
次: 【移植#32】バックテスト後の確認チャートを毎回同じ見た目にする — tester.tpl向け表示プリセット