過剰最適化とは?EAのバックテストで注意したい理由

自動売買LAB辞典

EAのバックテストで、右肩上がりのきれいな成績が出たら、期待したくなるものです。ただ、その結果が「幅広い相場で働くルール」を示しているのか、「過去の値動きにぴったり合わせた設定」なのかは、グラフだけでは分かりません。

後者に関わるのが過剰最適化です。この記事では、EAの検証で過剰最適化が起こる理由と、成績を見るときの確認ポイントを整理します。良い結果を疑い続けるのではなく、その結果がどんな条件で成り立ったのかを確かめるための基礎知識です。

過剰最適化とは?過去に合わせすぎた状態

EAは、決めたルールで売買を行うプログラムです。バックテストは、過去の価格データを使い、そのルールで取引した場合の結果を検証する方法を指します。

EAには、売買の判断に使う期間や、利益・損失を確定する条件など、調整できる設定がある場合があります。こうした設定を比較して目的に合う組み合わせを探す作業が「最適化」です。

一方、特定の過去データに合わせすぎて、別の期間や実際の相場では同じように働きにくくなった状態を、過剰最適化と呼びます。カーブフィッティングと呼ばれることもあります。

たとえるなら、練習問題の答えを覚えて高得点を取れても、初めて見る問題には対応できない状態です。設定を調整すること自体が悪いのではなく、調整した結果を別の条件でも確かめることが大切です。

EAのバックテストで過剰最適化が起こる理由

試す組み合わせが増えるほど、偶然の好成績も見つかる

設定の候補を大量に試すと、その期間にたまたま合う組み合わせが見つかることがあります。その中から最も成績が良いものだけを選ぶと、偶然の影響までルールの強さだと捉えてしまいかねません。

比較した設定の数だけでなく、検証の途中でルールを何度変更したかにも注意が必要です。設定項目が少なくても、結果を見ながら細かな条件を追加し続ければ、過去への合わせ込みは進みます。

苦手な取引を消す調整を繰り返す

「この時間だけ取引しない」「この条件のときだけ例外にする」といった変更には、合理的な理由がある場合もあります。ただ、過去の負け取引を減らすことだけを目的に条件を足すと、その期間にしか通用しない複雑なルールになりやすくなります。

また、上昇が続いた期間など、一つの相場の特徴に偏ったデータだけで調整すると、別の相場環境での弱点が見えにくくなります。

成績が良すぎるEAは、すべて過剰最適化なのか

好成績だけを理由に、過剰最適化と断定することはできません。反対に、利益が控えめだから過剰最適化ではない、ともいえません。重要なのは成績の派手さより、結果を作った過程と、条件が変わったときの振る舞いです。

例えば、調整に使った期間では良好でも、使っていない期間では大きく崩れる場合は注意材料になります。ただし、その原因には相場環境の変化や取引コストの違いなども考えられます。一つの結果だけで原因を決めつけない姿勢が必要です。

「この指標なら安全」「この形のグラフなら問題なし」といった、万能な判定方法はありません。

過剰最適化を疑うときの五つの確認ポイント

  • 検証期間と相場の偏り:短すぎる期間や、一方向の値動きが目立つ期間だけで評価していないかを確認します。期間の長さだけでなく、含まれる相場の違いにも目を向けます。
  • 取引数:少数の取引や、一部の大きな利益に結果が左右されていないかを見ます。必要な取引数に共通の正解はなく、取引頻度や手法によって判断材料が変わります。
  • 設定を少し変えた場合の結果:一つの設定だけ突出し、近い設定では成績が大きく崩れるなら、その理由を確認したいところです。ただし、これだけで過剰最適化とは断定できません。
  • 調整に使っていない期間:設定を決めた後、別の期間でも同じルールが働くかを確認します。都合の良い期間だけを選ばないことが大切です。
  • ルールと調整の理由:なぜその条件が必要なのか、過去の負けを消す以外の説明があるかを整理します。説明できること自体が、将来の有効性を保証するわけではありません。

これらは合否を決めるチェックリストではなく、追加で検証したい点を見つけるための観点です。

比較する前に、データ品質と取引コストも確認する

バックテストの結果が実際の取引と食い違う原因は、過剰最適化だけではありません。過去データの欠損や価格の再現の細かさなど、データ品質によっても結果は変わります。

スプレッドは売値と買値の差で、取引コストの一つです。手数料なども含め、どの費用をどの条件で計算しているかを確認しましょう。コストを軽く見積もった結果が良くても、実運用で同じ成績になるとは限りません。

また、スリッページとは、注文時に想定した価格と実際の約定価格がずれることです。バックテストで実際の約定条件を完全に再現できるとは限りません。特に小さな利益を積み重ねるルールでは、こうした差が結果に影響することがあります。

異なる設定を比較するときは、データやコストなどの前提をそろえないと、設定そのものの違いを読み取りにくくなります。

過去データを分けて確認する基本の流れ

過剰最適化への対策として基本になるのが、設定を調整するためのデータと、調整後に評価するためのデータを分ける考え方です。評価用の期間は、アウトオブサンプルと呼ばれることがあります。

  1. ルールの目的と、調整する設定項目を整理する。
  2. 調整に使う期間と、評価用に残す期間を先に分ける。
  3. 調整用の期間で設定を比較し、選んだ理由を記録する。
  4. 設定を固定し、評価用の期間で結果を確認する。
  5. 差があれば、相場環境・取引数・コストなどを含めて原因を検討する。

注意したいのは、評価用の結果を見て設定を直し、その同じ期間で繰り返し評価することです。その期間も実質的に調整へ使ったことになり、独立した確認としての意味が弱くなります。

調整履歴とテスト条件を残しておくと、「どの結果を見て、何を変えたか」を振り返りやすくなります。

結果は複数の指標で読み、フォワードテストにつなげる

成績を見るときは、利益の合計やグラフの形だけでなく、複数の観点を合わせます。PFは利益と損失のバランス、最大DDは資産減少の大きさ、勝率は勝ち取引の割合、リスクリワードは利益幅と損失幅の関係を見るものです。どれか一つが良好でも、過剰最適化ではない証明にはなりません。

過去データでの確認に加え、設定を固定して、その後の実際の相場で動きを確認するのがフォワードテストです。デモ口座などを使い、売買の発生や運用上の問題を観察する方法があります。

ただし、デモと実口座では約定条件などが異なる場合があります。確認期間が短かったり、相場が偏っていたりすれば、見えていない弱点も残ります。バックテストもフォワードテストも、将来の利益を保証するものではありません。

評価指標をもう少し詳しく知りたい方へ

ぽっちゃり勇者のひとこと

きれいな成績を見ると、つい安心したくなりますよね。僕も勉強中ですが、「最高の数字はどれ?」の前に「条件が少し変わったらどうなる?」と一呼吸置く姿勢を大切にしたいです。検証メモは地味でも、判断を支える頼もしい道具です。

タイトルとURLをコピーしました