EA(MT4の自動売買)を手に入れても、実際の成績がバックテストと合わないことはよくあります。特に何年も前に作られたEAは、今の相場とずれている場合もあるかもしれません。
その場合、パラメータを最適化することで成績を改善できる可能性があります。ただし、やりすぎると過去にだけ合った設定になってしまうので注意が必要です。
パラメータの最適化
EAのバックテストをする前提として、ヒストリカルデータのインポートについてはこちら。
バックテストのやり方はこちらを参考にしてください。
※2026年10月時点の情報に更新しています。画面はMT4(2023年当時)です。
エキスパートアドバイザー
例として、GogoJungleで販売している「弁財天ゆーろえん」(ユーロ/円、5分足、v1.4・2021年6月更新)で最適化を行ってみます。
[PR]
このEAは、モデル「全ティック」と「始値のみ」の結果がほぼ同じなので、「始値のみ」を使えば最適化の時間を短縮できます。10年間のバックテストでは「全ティック」の純益が691,950円、「始値のみ」が692,250円とほとんど変わらないので、始値のみで最適化のテストをしても問題ありません。
「始値のみ」は、バーの始値でしか売買を判断しないEA向けの方法です。足の途中で売買するEAでは結果が大きくずれるので、このように最初に両方で試して確かめておきましょう。
最適化の開始:
MT4のストラテジーテスターに目的のEAを設定します。
- エキスパートアドバイザー:BenZaiTen_EURJPY_M5_v1.4.ex4
- 通貨ペア:EURJPY
- EAで決められている場合が多く、他の通貨ペアではテストできないことがあります。
- モデル:全ティック
- 時間短縮のため「始値のみ」でも可能です。この後の最適化結果は「始値のみ」で計算しています。
- 期間を指定:開始日 2013.04.01 終了日 2023.04.01
- Dukascopy の MT4(デモ口座)のヒストリカルデータで、切りよく10年としました。
- 期間:M5
- これもEAで決められている時間足で、他の時間足ではテストできません。
- スプレッド:13
- 単位はポイントで、ユーロ/円を小数点以下3桁で表示する業者では13=1.3pipsです。国内業者の通常時のスプレッドより少し広めですが、スプレッドが大きくなると成績が大きく変わるEAが多いので、厳しめに設定しています。
- 最適化:チェック
- 最適化テストではここにチェックを入れます。逆に、普通のテストでは外します。
- エキスパート設定:次の設定を参照
エキスパート設定
エキスパート設定には3つのタブがあります。
「テスト設定」
- 初期証拠金:1000000 JPY
- 通貨の欄に「JPY」と直接入力して設定できます。円口座で使うなら JPY にします。
- あまり少なすぎると、ドローダウンで証拠金が足りなくなってテストが途中で終わってしまうので注意します。
- EUR/GBP のように決済通貨が円以外のペアで JPY を指定すると、損益はテストを実行した時点のレートで円に換算されます(過去の換算レートではありません)。損益の金額よりも、PFやドローダウン率など比率の数字で比べるのが無難です。
- ポジション:Long & Short
- 買いと売りで比較したい場合は、Long と Short を分けてテストできます。
- 最適化:
- 遺伝的アルゴリズムを使う場合はチェックを入れます。チェックを入れない場合は総当たり(すべての組み合わせ)のテストになります。今回は組み合わせが少ないので総当たりです。
- 遺伝的アルゴリズムは生物の進化をまねた探索方法で、成績のよい組み合わせを残し、それらを掛け合わせたり一部を変えたりしながら次の世代を作っていきます。組み合わせが非常に多いときに時間を短縮できますが、本当の最適値が見つかる保証はなく、実行するたびに結果が変わることもあります。
- 最適化パラメータ:最適化の結果を何を基準に順位付けするか
- Balance:残高
- Profit Factor:プロフィットファクター
- Expected Payoff:期待利得(純益 ÷ 総取引数)
- Maximal Drawdown:最大ドローダウン金額(小さいほど良い)
- Drawdown Percent:ドローダウン率(小さいほど良い)
- Custom:EAの OnTester() が返す独自の基準
「パラメータの入力」
今回は例として TakeProfit(利確幅)の値を最適化したいので、チェックを入れます。
スタート:10
ステップ:2
ストップ:100
このEAでは単位がpipsなので、TakeProfit を10から2ずつ増やして100pipsまで、46通りをテストします。
パラメータを複数選ぶと、テスト数は掛け算で増えます(例えば TakeProfit 46通り × StopLoss 19通り = 874通り)。
ハマりやすい点として、パラメータの変更はMT4を終了しても残っている場合があります。新しく始めるときは必ず「リセット」しておきましょう。
「最適化」
最適化タブは、一定の条件になったらテストを止める設定です。最初は設定しなくても大丈夫です。
その他の設定ボタン
- 通貨ペアのプロパティ
- 選択した通貨ペアの詳細(契約サイズやストップレベルなど)が確認できます。
- チャートを開く:バックテスト後に、売買のタイミングをチャート上で確認できます。
- 売買の様子を細かく見たいときは、ビジュアルモードを使います。
- エキスパート編集
- MetaEditor が起動し、ソースコード(.mq4)があれば編集できます(開発者用)。
最適化結果
最適化が終わると「最適化結果」タブに結果が出てきます。
「損益」の列で並べ替えると、いちばん損益が大きいのは TakeProfit=98(693,798円)です。ただし、2位以下の84・78・100なども69万円台で、差は0.3%ほどしかありません。
一方で「最適化グラフ」を見ると、
TakeProfit=46(残高1,672,090円)から先は、ほとんど変わらないことが分かります。このように、値を変えても成績があまりぶれない平らな範囲から選ぶと、相場が多少変わっても成績が崩れにくくなります。逆に、1つの値だけが突出して良い場合は、たまたま過去に合っただけの可能性があります。ここでは、平らな範囲の入り口の TakeProfit=46 を選びました。
結果が何も表示されない場合があります。すべてがマイナスの結果のケースです。マイナスでも優劣を知りたい場合は、右クリックメニューの「マイナスの結果を表示しない」のチェックを外します。
次に、TakeProfit=46 にして StopLoss(損切り幅)を最適化します。
スタート:10
ステップ:5
ストップ:100
でテストした結果、StopLoss=70以上はあまり変わらないようです。
ドローダウン%で並べ替えて比べると、StopLoss=60 はドローダウン8.02%で損益587,184円、StopLoss=65 は8.19%で609,266円、StopLoss=70 は9.18%で630,478円です。利益がある程度出ていてドローダウンが小さい StopLoss=65 がよさそうです。
TakeProfit=46、StopLoss=65 でテストしてみると、損益は692,250円から609,266円に減りましたが、最大ドローダウンは12.17%から8.19%に改善しました。
また、MaxPosition(最大ポジション数)は初期値が7なので、このパラメータも振ってみます。MaxPosition=9 にすると、損益は703,986円と元の設定と同じ程度で、ドローダウンは9.05%になりました。
ただし、MaxPosition を増やすと同時に持つポジションが増えるぶん、リスクも増えます(MaxPosition=15 では損益864,200円、ドローダウン9.98%)。損益だけを見て大きくしすぎないようにしましょう。
10年間のバックテスト(始値のみ)で、元の設定と最適化後の設定を比べると次のとおりです。
| 項目 | オリジナル (TP100・SL100・MaxPosition7) |
最適化後 (TP46・SL65・MaxPosition9) |
| 純益 | 692,250円 | 703,986円 |
| プロフィットファクター | 1.21 | 1.19 |
| 最大ドローダウン | 12.17% (131,950円) |
9.05% (100,662円) |
| 総取引数 | 10,297回 | 11,431回 |
このEAは2021年6月以降バージョンアップされていないので、その前後からの2年間でも比較してみます。
期間:2021.04.01〜2023.04.01
| 項目 | オリジナル | 最適化後 |
| 純益 | 200,306円 | 204,544円 |
| プロフィットファクター | 1.28 | 1.25 |
| 最大ドローダウン | 4.49% | 3.78% |
| 総取引数 | 2,153回 | 2,414回 |
| 勝率 | 61.59% | 59.94% |
このケースでは、あまり変わらないと言えそうです。ただし、この2年間は最適化に使った10年間に含まれているので、最適化の効果を公平に確かめたことにはなりません(次の「注意点」を参照)。
最適化の注意点
以上のような要領で、バックテストでパラメータを最適化できます。ただし、やりすぎるとカーブフィッティング(過剰最適化)に陥ってしまいます。カーブフィッティングした設定は限られた相場でしか通用せず、相場の変化についていけずに損失が増える可能性があります。
- 最適化する期間と確かめる期間を分ける:例えば2013〜2020年で最適化し、2021〜2023年は最適化に使わずに成績を確認します。この期間でも成績が崩れなければ、過去に合わせすぎていない可能性が高くなります。期間をずらしながらこれを繰り返す方法を、ウォークフォワード分析と言います。
- 突出した値より平らな範囲を選ぶ:最適化グラフで、前後の値でも成績が大きく変わらない範囲から選びます。
- パラメータを増やしすぎない:同時に最適化するパラメータが多いほど、過去にだけ合う組み合わせが見つかりやすくなります。
- 取引数が少ない結果は信用しすぎない:取引数が少ないと、たまたまの結果の可能性があります。
- スプレッドは広めでも確認する:実際に使う業者のスプレッドや、早朝などスプレッドが広がる時間帯も考えてテストします。
- 最適化後はフォワードテストで確かめる:デモ口座や少額のリアル口座でしばらく動かし、バックテストと大きくずれていないかを確認してから本番の資金で使いましょう。
MT5のストラテジーテスターには「フォワード」の設定があり、期間の後ろ1/2・1/3・1/4(または指定した日付以降)を、最適化に使わない検証期間として自動で分けられます。なお、MT4用EA(.ex4)はMT5では使えません。OANDA証券のように MT4 の提供を終了する業者もあるので(2026年11月27日終了)、MT5版のEAがあるかも確認しておきましょう。
バックテストのレポートの見方と、バックテストとフォワードテストの比べ方はこちらです。
































