本ページはプロモーションが含まれています

EA全般

EAのバックテストとフォワードテスト|正しい評価方法5種と合格基準

トム

・本業エンジニア/EAのFX自動売買歴7年/ブログ歴6年
・首都圏在住30代
・MT4 EAを使った FXの自動売買で年間10万円の利益達成

EAを評価するとき、バックテストだけで判断するのはアウトです。バックテストは最適化に使った過去データで成績を測るため、ほぼ必ず良く見えるからです。

信頼できる評価は、最適化に使っていない期間で成績を確かめるフォワードテストを組み合わせて初めて成り立ちます。具体的には(1)アウトオブサンプル、(2)ウォークフォワード、(3)モンテカルロ、(4)リアルフォワードの4つをバックテストに重ねます。

あわせて、フォワードテストの期間や取引回数の目安、バックテストとの乖離の見方、販売ページでの見分け方もまとめました。

この記事でわかること

  • バックテストだけでEAを評価してはいけない理由
  • 評価方法5種(アウトオブサンプル・ウォークフォワード・モンテカルロなど)の違い
  • フォワードテストに必要な取引回数と、勝率の誤差幅の計算例
  • 販売ページの記載から、EAのテスト方法を見分けるコツ

カーブフィッティング(過剰最適化)とは?

カーブフィッティングとは、EAのパラメータを過去の相場に合わせすぎた結果、過去のデータでしか利益を出せなくなった状態です。テストの種類を知る前に、この落とし穴を押さえておきます。

EAを作る過程では「最適化」という作業を行います。例えばボリンジャーバンドの2σで逆張りするEAなら、期間にどの値を使うか迷います。そこで過去相場で最も利益が出る期間をコンピュータで計算して選び出します。この作業を最適化と呼びます。

最適化を何個ものインジケーターで何回も行うと、EAは最適化されすぎた状態になり、過去の相場でしか利益を出せなくなります。この状態がカーブフィッティングです。

下のようにきれいすぎる右肩上がりの線は、カーブフィッティングを疑ってください。

綺麗すぎる右肩上がりのバックテスト資産曲線。カーブフィッティングの可能性がある
併せて読む

バックテストとフォワードテストの違いと評価方法5種

バックテストは、過去の相場データでEAを動かして成績を測るテストです。フォワードテストは、最適化に使っていない期間やリアルタイムの相場で成績を確かめるテストです。

評価方法は下の5種類に分けられます。②③は過去データを「最適化用」と「検証用」に分けて未知のデータを作る方法、④は取引の順番を入れ替えて運の影響を測る方法、⑤は実際の相場で動かす方法です。

EAの評価方法5種類

1. ヒストリカルバックテスト
過去データで最適化して検証
→
2. アウトオブサンプルテスト
最適化期間と検証期間を分ける
→
3. ウォークフォワードテスト
アウトオブサンプルを繰り返してつなぐ
→
4. モンテカルロシミュレーション
取引の順番を入れ替えて最悪ケースを見る
→
5. リアルフォワードテスト
デモ・リアル口座で実際に動かす
1〜3は過去データの使い方の違い、4は運の影響の確認、5は実際の相場での検証。信頼性が上がるほど手間と時間がかかる。
評価方法信頼性手間わかること弱点
ヒストリカルバックテスト低小過去相場での成績最適化した期間で評価するため、ほぼ必ず良く見える
アウトオブサンプルテスト中中最適化していない期間でも通用するかテスト期間が1つなので、たまたま良い期間だった可能性が残る
ウォークフォワードテスト高大相場が変わってもパラメータの再最適化で追従できるか手間が大きい。実施しているEAは少ない
モンテカルロシミュレーション中(補助)小負けが固まったときの最大DDの幅取引どうしに依存関係があるEA(ナンピン等)には使えない
リアルフォワードテスト最高極大スプレッド・約定まで含めた本番の成績データが貯まるのに実時間がかかる

①ヒストリカルバックテスト(通常のバックテスト)

ヒストリカルデータをもとに最適化をかける、最も一般的なバックテストです。

併せて読む

最もよく使われる検証法ですが、簡単なため最も誤解されやすい方法でもあります。インジケーターを組み合わせて最適化し、最適なパラメータを導き出す作業のほとんどがカーブフィッティングになるという問題があります。過剰でなくても、ある程度は必ず最適化されています。

あわせて読む

EAの宣伝を見るとバックテストの良し悪しばかりで、肝心なフォワードの話が少ないと感じます。はっきり言って、バックテストだけでシステムを評価するのは誤りです。

期間を分割して年ごとの成績を確かめる

全期間の合計成績が良くても、特定の1〜2年だけで大きく稼いでいるEAは危険です。バックテストを1年ごとに区切り、年別の損益・PF・最大DDを並べてみてください。

見るのは、マイナスの年が続いていないか、利益が一部の年に偏っていないかの2点です。MT4ならストラテジーテスターの期間指定を1年ずつ変えて回すだけで確認できます。

例として、5年間の合計が+620pipsのEAを年別に分けると、次のようになったとします(説明用の架空の数値)。

年損益
2021年+50pips
2022年+620pips
2023年−40pips
2024年−30pips
2025年+20pips
合計+620pips

合計だけ見れば優秀ですが、利益は2022年の1年分だけで、残り4年を足すと0pipsです。2022年のような相場がまた来ない限り、このEAは稼げません。

ただし、全期間で最適化したEAは年別に分けても最適化の影響が残ります。期間分割でわかるのは成績のばらつきまでで、最適化していない期間での検証は次の②③が担います。

②アウトオブサンプルテスト

最適化に使っていない期間でもEAが通用するかを確かめるのが、アウトオブサンプルテストです。ほとんどの人はヒストリカルデータの全期間を使ってバックテストしますが、全期間で最適化と評価を兼ねるやり方はおすすめできません。アウトオブサンプルテストは、ヒストリカルデータを「最適化の期間」と「最適化後のテストの期間」の2つに分割する方法です。

アウトオブサンプルテストのイメージ。前半で最適化し、後半でテストする

上の例では、まず2003〜2006年で最適化を行い、最適化後のEAを2007〜2010年でバックテストしてパフォーマンスを確認します。この方法で良い成績になれば、全期間で最適化した場合に比べてリアルトレードがうまくいく可能性が高まります。

  1. ヒストリカルデータを7:3または8:2に分ける
  2. 前半(古い期間)だけでパラメータを最適化する
  3. パラメータを固定し、後半(直近の期間)で1回だけバックテストする
  4. 後半でも損益グラフが右肩上がりで、PFと最大DDが前半と大きく変わらなければ合格

アウトオブサンプルテストを採用しているオススメのEAは次のとおりです。こういったEAは珍しく、ちゃんとわかって作っているなと感心します。

RECOBA Triple Swing M51つのEAでEUR/JPY, GBP/JPY, AUD/JPYに対応。リアル口座myfxbookを公開しています。 | GogoJungle INTER_EURJPY_M5最大SL45pips 勝率80% TP上限無し(変動)。リアル運用5ヵ月で550pips獲得。低ドローダウンのEAです。 | GogoJungle MILAN_EURJPY_M5『スキャル』×『スイング』の融合。バックテスト年平均1000pipsオーバー。出品までの約7ヶ月で700pips獲得。 | GogoJungle

ただし、アウトオブサンプルテストには「最適化したパラメータの値を永遠に変えられない」という問題があります。相場が変わったときにパラメータを更新すると、また最適化のやり直しになるからです。パラメータを定期的に更新しながら検証できるのが、次のウォークフォワードテストです。

③ウォークフォワードテスト

ウォークフォワードテストとは、簡単に言うとアウトオブサンプルテストをたくさん行って、そのテスト結果をつなぎ合わせたものです。

ウォークフォワードテストのイメージ。最適化期間とテスト期間をずらしながら繰り返す

黒枠が最適化期間、赤枠がテスト期間です。期間をずらしながら「最適化→テスト」を繰り返し、最終的に赤枠のテスト結果だけをつなぎ合わせて1つのバックテスト結果を作ります。

ウォークフォワードの期間設定例

よく使われるのは、最適化期間(イン期間)3年・テスト期間(アウト期間)1年で、1年ずつずらす設定です。

10年分(2016〜2025年)のデータで考えます。まず2016〜2018年で最適化して2019年でテストし、次に2017〜2019年で最適化して2020年でテストします。

これを7回繰り返し、2019〜2025年の7年分のテスト結果をつなぎ合わせます。

テスト期間の成績が最適化期間にどれだけ近いかは、ウォークフォワード効率(WFE)で数値にできます。テスト期間の年換算利益を、最適化期間の年換算利益で割った値です。

最適化期間3年で1,500pips(年500pips)、テスト期間1年で300pipsなら、WFEは300÷500=60%です。ウォークフォワード分析を1992年に発表したロバート・パルドの考え方では、50〜60%以上がひとつの目安とされます。

  • わかること:定期的にパラメータを再最適化する運用で、相場の変化に追従できるか
  • 合格の目安:つなぎ合わせたテスト結果が右肩上がりで、各テスト期間の成績がばらつきすぎていない
  • 本番での運用:テストと同じ間隔(例:1年ごと)でパラメータを再最適化する

アウトオブサンプルテスト・ウォークフォワードテストを採用しているオススメのEAは次のとおりです。面倒なテストなので、ここまで実施して作成しているEAはそれだけ真面目に作っている証拠です。

CROCUS_EURJPY【公開本番口座で無双中!】高スプレッド耐性、低資金OK。設定は簡単で初心者にもオススメ | GogoJungle CROCUS_USDJPY【公開本番口座で収益増加中!】高スプレッド耐性、低資金OK。設定は簡単で初心者にもオススメ | GogoJungle Sentinel【実績1年以上】コロナ相場でも強いハイポテンシャルEA | GogoJungle

④モンテカルロシミュレーション

モンテカルロシミュレーションは、バックテストやフォワードで得た取引結果の順番をランダムに入れ替え、何百〜何千通りもの資産曲線を作る方法です。

勝率も1回あたりの損益も同じ取引の集まりなのに、負けがどこに固まるかで最大ドローダウンは大きく変わります。バックテストに表示される最大DDは、そのうちの1通りにすぎません。

見るべきは、たとえば1,000回試したうち悪いほうから5%目(95パーセンタイル)の最大DDです。この値に資金が耐えられるかを確かめてからロットを決めます。

注意点として、ナンピンやマーチンゲールのように前の取引結果で次のロットや建値が変わるEAは、順番を入れ替えると取引が成り立ちません。こうしたEAはこの方法では正しく評価できません。

200回の取引で試算した最大DDの幅

試算に使ったのは、勝ち120回(各+20pips)・負け80回(各−25pips)の取引200回です。合計は+400pips、PFは1.2になります。

この200回の順番だけを1,000通り並べ替え、それぞれの最大DDを計算しました(Pythonで乱数を固定して試算)。

並び順最大DD
最も小さかった並び115pips
中央値225pips
95パーセンタイル(悪いほうから5%目)365pips
最も大きかった並び480pips

中身がまったく同じ取引でも、並び次第で最大DDは4倍以上変わります。バックテストに最大DD115pipsと出ていても、運の良い並びだっただけかもしれません。

ロットは、95パーセンタイルの365pipsを被っても資金が残る大きさに決めます。

⑤リアルフォワードテスト(リアルタイムテスト)

過去のチャートはデータの精度に問題があるとして、バックテストを実施しない人もいます。そうした人が使うのがリアルタイムテストです。

バックテストをまったく行わず、リアルトレードだけでデータを集めてテストする方法です。しかし、データを集める速度がリアルタイムの進む時間と等しいので膨大な時間がかかります。あまり現実的ではなく、本物の最強のトレーダーのテスト方法です。

EAを買う側にとって現実的なのは、バックテストを確認したうえで、デモ口座か少額のリアル口座でしばらく動かすリアルフォワードです。スプレッドの広がりやスリッページなど、バックテストでは再現しにくい要素まで含めた成績がわかります。

MT4でフォワードテストを行う手順

  1. 本番で使う予定の業者でデモ口座(または少額のリアル口座)を開く
  2. VPSなど24時間動く環境のMT4にEAを設定し、ロットは本番より小さくする
  3. 決済済みの取引を定期的に記録する(MT4の「口座履歴」タブを右クリックするとレポートを保存できる)
  4. 取引回数が目安に達したら、同じ期間のバックテストと成績を比べる

フォワードテストの合格基準(期間・取引回数・乖離)

フォワードテストは、いつまで続ければ合格かを先に決めておかないと、たまたま勝った数週間で判断してしまいます。目安は期間ではなく取引回数で決めます。

期間より取引回数で判断する

取引回数が30回に満たないうちは、勝率やPFが運でいくらでも振れます。最低30回、できれば100回以上を目安にしてください。

1日に何回も取引するスキャルピングEAなら数週間で届きますが、月に数回しか取引しないスイングEAでは100回に届くまで数年かかります。取引頻度から必要な期間を逆算しておきます。

あわせて読む

30回では足りない理由は、勝率の誤差幅を計算するとわかります。バックテストの勝率が60%のEAで、フォワードの勝率がどこまで下がっても誤差といえるかを試算しました。

計算式は、95%の範囲を表す「1.96×√(勝率×(1−勝率)÷取引回数)」です。

取引回数誤差幅誤差とみなせる勝率の範囲
30回±17.5%42.5〜77.5%
100回±9.6%50.4〜69.6%
300回±5.5%54.5〜65.5%

30回では、勝率が43%まで落ちても「まだ誤差」としか言えません。100回で、ようやく±10%弱まで絞れます。

フォワード45回で勝率51%だった場合、誤差の範囲は45.7〜74.3%なので、この時点では不合格と決めつけられません。45%を割り込んでいれば、誤差では説明しにくい乖離です。

バックテストとの乖離を指標ごとに比べる

フォワードの成績は、同じ期間のバックテストと指標ごとに並べて比べます。

指標比べ方要注意のサイン
勝率フォワードとバックテストの差誤差の範囲を超えて下がっている
PF(プロフィットファクター)フォワード÷バックテストの比率1.0を下回り、損失が利益を上回っている
平均利益・平均損失1回あたりの損益の差平均利益だけが目立って小さい(スプレッド・スリッページの影響)
最大ドローダウンバックテストの最大DDとの比較短期間でバックテストの最大DDを超えた

乖離が出る主な原因

  • スプレッド・スリッページ:バックテストは固定スプレッドで回すことが多く、指標発表時の広がりや滑りが反映されない
  • 過剰最適化:過去の相場に合わせすぎたパラメータが、新しい相場で通用しない
  • 相場環境の変化:トレンド相場向けのEAがレンジ相場に入った、など
  • 業者・サーバーの違い:レート配信や約定の仕組みが業者ごとに異なる

販売ページでEAのテスト方法はどう見分ける?

EAを購入する側は、販売ページの説明からどのテストをしているかを読み取れます。

販売ページの記載テスト方法評価
全期間のきれいなバックテストのみヒストリカルバックテスト要注意。フォワード実績を必ず確認
「最適化期間」と「検証期間」を分けて掲載アウトオブサンプルテスト信頼度が上がる
「ウォークフォワード」「WFA」の記載、期間ごとの成績ウォークフォワードテストかなり真面目に作られている
「モンテカルロ」の記載、最大DDの分布モンテカルロシミュレーション最悪ケースのDDまで考えている
バックテストなし、リアル口座の実績のみリアルフォワードテスト実績期間が1年以上あれば信頼できる

EAのバックテスト・フォワードテストでよくある質問

Q1. バックテストとフォワードテストの違いは?

バックテストは最適化に使った過去データで成績を測るテスト、フォワードテストは最適化に使っていない期間やリアルタイムの相場で成績を確かめるテストです。バックテストだけでは過剰最適化を見抜けないため、両方で評価します。

Q2. フォワードテストの期間はどれくらい必要?

期間ではなく取引回数で決めます。最低30回、できれば100回以上が目安です。勝率60%のEAなら、30回では勝率の誤差幅が±17.5%あり、100回でようやく±9.6%まで絞れます。

Q3. バックテストは意味がないの?

意味はあります。ロジックが想定どおり動くか、最低限の成績があるかを確かめる最初のふるいです。ただし最適化した期間の成績はほぼ必ず良く見えるため、合否はフォワード系のテストで判断します。

Q4. フォワードテストはデモ口座でもよい?

最初はデモ口座で構いません。ただし業者によってはデモとリアルで約定の条件が異なるため、デモで合格したら少額のリアル口座でも確かめると安心です。

Q5. バックテストとフォワードテストの成績が違うのはなぜ?

主な原因は、スプレッドの広がりとスリッページ、過剰最適化、相場環境の変化、業者ごとのレート配信や約定の違いです。勝率・PF・平均損益・最大DDを指標ごとに比べると、どこで差が出たかがわかります。

Q6. ウォークフォワードテストはMT4でできる?

MT4のストラテジーテスターにはウォークフォワードの機能がないため、期間を変えながら最適化とテストを手作業で繰り返します。MT5のストラテジーテスターには、期間の一部をフォワード用に分ける設定があります。

まとめ

  • バックテストだけでEAを評価するのは誤り。最適化した期間で評価するため、ほぼ必ず良く見える
  • アウトオブサンプルテストは、最適化していない期間で通用するかを確認する。7:3で分割し、テストは1回だけ
  • ウォークフォワードテストは、パラメータの再最適化で相場の変化に追従できるかを確認する
  • モンテカルロシミュレーションで、負けが固まったときの最大DDを確かめてからロットを決める
  • リアルフォワードは期間ではなく取引回数で判断する。最低30回、できれば100回以上
  • ここまで考えて作られたEAはごく少数。販売ページの記載からテスト方法を読み取って選ぶ

ここまでの話は以下の書籍を参考にしています。

※本記事は情報提供を目的としたもので、特定のEA・金融商品の売買を推奨するものではありません。FX(外国為替証拠金取引)は元本が保証されておらず、レバレッジにより預けた証拠金を上回る損失が発生する可能性があります。記事内の成績・数値は過去の実績であり、将来の利益を保証するものではありません。投資の最終判断はご自身の責任でお願いします。

  • この記事を書いた人
  • 最新記事

トム

・本業エンジニア/EAのFX自動売買歴7年/ブログ歴6年
・首都圏在住30代
・MT4 EAを使った FXの自動売買で年間10万円の利益達成

-EA全般
-