この記事でできるようになること
- 損切り幅の調整・フィルター追加・トレーリングストップという定番の改善パターンを知り、ChatGPTに頼める
- 調整したい数値を input 変数にしてもらい、コードを触らずにテスターから変えられるようにできる
- MT4の最適化(オプティマイズ)機能で、パラメータの組み合わせをまとめてテストできる
準備するもの
- 前の記事で改善サイクルを1周以上回したEA(版番号付きで保存されているもの)
- ChatGPTにログインしたブラウザ
- 結果の記録表(前の記事で作ったもの)
手順
手順1 定番の改善パターン3つを知る
ChatGPTに「改善案を3つ」と頼むと、多くの場合、次のどれかが返ってきます。あらかじめ意味を知っておくと、回答を理解しやすくなります。
パターン1: 損切り・利確の幅を変える
一番手軽な改善です。損切りが浅すぎると少しの逆行で損切りが頻発し、深すぎると1回の負けが大きくなり最大ドローダウンが増えます。利確も同様です。サンプルEAでは StopLossPips と TakeProfitPips がこれにあたり、テスターの「パラメータの入力」から変えられます。
パターン2: フィルターを追加する
「条件を満たしても、〇〇のときは取引しない」という絞り込みです。よく使うのは次の2つです。
- 時間帯フィルター: 値動きが少ない早朝や、荒れやすい経済指標の時間帯を避ける
- ボラティリティフィルター: 値動きの大きさ(ボラティリティ)が小さすぎる/大きすぎるときは取引しない。ATRというインジケーターで測るのが一般的です
フィルターは取引数を減らすので、PFが上がっても取引数が第5章の目安(100回以上)を下回らないか注意します。
パターン3: トレーリングストップを入れる
利益が伸びるにつれて損切りラインを自動で引き上げる仕組みです。「含み益が出ていたのに反転して損切り」を減らせる一方、早めに決済されて利益が伸びにくくなることもあります。良くなるかはEAと相場次第なので、テストで確かめます。
6-2-01.png手順2 機能追加のプロンプトを送る(時間帯フィルターの例)
パターン2の時間帯フィルターを例に、機能追加を頼んでみます。以下は本スクールのプロンプト雛形「4. 機能追加のプロンプト」です。
現在のEAに以下の機能を追加してください。他のロジックは変更しないでください。
完全なコードを省略せずに出力してください。
【追加機能】
- 取引する時間帯を input 変数で指定できるようにする(サーバー時間、開始時と終了時)
- 指定時間外では新規エントリーしない(保有中のポジションは決済条件に従う)
ポイントは1行目の「他のロジックは変更しないでください」です。これを書かないと、ChatGPTが「ついでに」ほかの部分を書き換えてしまい、前の記事の「1回に1か所」が崩れます。
「サーバー時間」とは、MT4の画面に表示されている時刻のことで、日本時間より6〜7時間遅れています(HFMの場合。季節で変わります)。要確認「日本時間で〇時〜〇時を避けたいが、サーバー時間ではどう設定すればよいか」とChatGPTに聞くと計算してくれます。
ほかのパターンを頼むときは、【追加機能】の中身を書き換えます。
- ボラティリティフィルターの例: 「ATR(14)の値が input 変数で指定したpips未満のときは新規エントリーしない」
- トレーリングストップの例: 「含み益が input 変数で指定したpipsを超えたら、損切りを建値に移動し、以降はその幅で追従させる」
6-2-02.png手順3 調整したい数値を input 変数にしてもらう
改善を進めるうちに「この数字をあと少し変えて試したい」場面が増えます。そのたびにChatGPTに頼み直すのは手間なので、変えたい数値はすべて「input 変数」(第5章で見た「パラメータの入力」タブに出てくる項目、いわば調整つまみ)にしてもらいます。
ChatGPTに次のように頼みます。
現在のEAで、以下の数値を input 変数にして、ストラテジーテスターの「パラメータの入力」から変更できるようにしてください。
他のロジックは変更しないでください。完全なコードを省略せずに出力してください。
- 取引開始時(サーバー時間)
- 取引終了時(サーバー時間)
- ATRの期間
- ATRの最小値(pips)
サンプルEAでは、最初から FastMAPeriod、SlowMAPeriod、TakeProfitPips、StopLossPips、Lots などが input 変数になっています。これらに、追加した機能の数値が加わっていく形です。
コードを貼り替えてコンパイルしたら、ストラテジーテスターの「エキスパート設定」→「パラメータの入力」に新しい項目が増えていることを確認してください。
6-2-03.png手順4 最適化(オプティマイズ)機能の設定
数値が input 変数になっていれば、MT4に「いろいろな値を自動で試させる」ことができます。これが最適化(オプティマイズ)機能です。「損切りを20〜50pipsのどれにすべきか」を手作業で7回テストする代わりに、1回のスタートで全部やってくれます。
- ストラテジーテスターの設定画面で、EA・通貨ペア・時間足・モデル・期間・スプレッドをいつもどおり設定します。
- 「エキスパート設定」→「パラメータの入力」タブを開きます。
- 最適化したい変数の左端にあるチェックボックスをオンにします。今回は
StopLossPipsだけにします。要確認 - その行の「スタート」に「20」、「ステップ」に「5」、「ストップ」に「50」と入力します。「20から始めて5ずつ増やし、50まで」という意味です。
- 「OK」で閉じます。
- 設定画面の「最適化」のチェックボックスをオンにします。要確認
- 「スタート」を押します。
チェックを入れた変数だけが動き、チェックの無い変数は「値」の列の数字で固定されます。
6-2-04.png6-2-05.png手順5 最適化結果の見方
最適化が終わると、「最適化結果」タブに、組み合わせごとの成績が一覧で表示されます。要確認列には「純益」「総取引数」「プロフィットファクタ」「期待利得」「ドローダウン」などが並び、列名をクリックすると並べ替えができます。
見方のコツは、「一番良い1行」を探さないことです。代わりに、次のように見ます。
- 「プロフィットファクタ」の列で並べ替えます。
- 上位だけでなく、損切り20から50までの全体の並びを見ます。
- 「25〜40あたりはどれもPF 1.2〜1.4で安定していて、20と50だけ悪い」のように、なだらかに良い範囲があれば、その真ん中あたり(この例なら30〜35)を採用します。
- 逆に「35だけPF 2.0で、30と40はPF 0.9」のような、1点だけ飛び抜けた結果は採用しません。その値がたまたま過去の相場に合っていただけの可能性が高いからです。
「最適化グラフ」タブでは、横軸に組み合わせ、縦軸に成績の折れ線が表示されるので、なだらかな山か、とがった山かが一目で分かります。要確認
6-2-06.png手順6 やりすぎに注意する
最適化は便利なぶん、やりすぎるとEAを壊します。次のルールを守ってください。
- 一度に動かす変数は1〜2個まで。 3つ以上を同時に動かすと、組み合わせが数千通りになり、その中には「過去にだけ完璧に合った」組み合わせが必ず含まれます。それを選ぶと、未来ではまず通用しません。
- ステップは粗く。 損切りを1pips刻みで試す意味はほとんどありません。5pips刻み、移動平均の期間なら5〜10刻みで十分です。
- 結果は丸める。 最適化で「33」が最良でも、採用するのは「30」や「35」のような切りのよい数字にします。33と35の差は、ほぼ誤差です。
- 最適化した期間と別の期間で確かめる。 これが最重要です。最適化に使った期間で成績が良いのは当たり前なので、必ず別の期間(第5章の後半検証など)でテストし直します。詳しくは次の記事で説明します。
最適化は「最高の数字を探す道具」ではなく「どのあたりなら安定するかを眺める道具」です。
6-2-07.pngつまずきポイント
- 最適化がなかなか終わらない: 全ティック×長期間×多数の組み合わせは、数時間かかることがあります。まずは組み合わせを10〜20通りに絞るか、期間を短くして試してください。途中で「ストップ」を押しても、そこまでの結果は残ります。要確認
- 最適化結果が1行しか出ない: 「パラメータの入力」でチェックを入れ忘れているか、「最適化」のチェックが入っていません。両方を確認してください。
- 「最適化結果」タブに取引数0の行ばかり: スタート・ステップ・ストップの数値の設定が、EAが動けない範囲になっている可能性があります。たとえば時間帯フィルターで開始時と終了時が同じ値になる組み合わせなどです。範囲を見直してください。
- フィルターを追加したら取引数が激減した: フィルターが厳しすぎます。ChatGPTに「取引数が〇〇回から〇〇回に減ったので、条件を緩めたい」と伝えるか、input 変数の値を緩めてください。
- トレーリングストップを入れたら成績が下がった: よくあることです。不採用にして元の版に戻すのも立派な判断です。
次の記事
6-3 過剰最適化を避ける で、「過去に合わせすぎたEA」を見抜く方法と、改善をやめる基準を学びます。