FX: 「2週間で一番勝てるロジック」を探して分かった過学習の罠



1時間おきのログを2週間分(8月28日〜9月12日、246件)貯めることができたので、今回は「このデータの中で一番利益が出るロジックは何か」を本格的に探索してみた。結論から言うと、探せば探すほど「たまたま良く見えるだけの罠」にはまりやすいということを身をもって確認する回になった。

2週間の内訳:全く性質の異なる2つの局面

今回のデータは、はっきり異なる2つの局面に分かれていた。

期間A(8/28〜9/5)期間B(9/7〜9/12)
相場の性質明確な下降トレンド実際は下落基調なのに予測はほぼ"up"に偏った
方向的中率(簡易チェック)50〜55%程度40〜44%(五分五分を下回る)
損切りなしの成績+162.0 pips-183.1 pips

期間Bでは、モデルの方向判定が実際の値動きとかなり噛み合っていなかった。 この「良い局面」と「悪い局面」が両方含まれたことでロジックの頑健性を検証するには、むしろ良い材料が揃ったとも言える。

検証1:全期間データで最適なパラメータを総当たり

エントリー閾値・イグジット閾値・損切り幅の組み合わせを総当たりで試したところ、最も成績が良かったのはentry閾値12 / exit閾値1 / 損切り3pips+即再エントリーで、2週間合計 +159.1 pips。

ただし、この設定を期間ごとに分解すると、期間Aで+218.8pips、期間Bで-71.7pipsと、 結局期間Bはマイナスのまま。悪い局面での被害を抑えられているだけで「勝てるロジック」を発見したわけではないという点は明確にしておきたい。

検証2:期間ごとに最適化すると、綺麗に裏切られる

「本当に良いロジックなら、どの期間で最適化しても似た結果になるはず」という 考え方で、期間Aだけ・期間Bだけでそれぞれ最適なパラメータを探し、もう一方の期間に当てはめてみた。

最適化した期間見つかった設定その期間の成績もう一方の期間に当てはめた結果
期間Aのみentry15 / 損切りなし+269.1 pips期間Bで -176.6 pips
期間Bのみentry20 / 損切りなし+54.6 pips(わずか1トレード)期間Aで+79.4 pips(本来の269には遠く及ばず)

特に興味深いのは、期間Bだけで最適化すると「ほぼエントリーするな」という結論(1トレードのみ)になったこと。悪い局面ではモデルを信用しない方が マシという身も蓋もない現実を突きつけられた形だ。

検証3:「バーの実体の大きさ」を条件に加えてみる

新しいアイデアとして、ローソク足の実体(Open-Close)の大きさをエントリー条件に加えてみた。「まだ確定していない値動きの初動だけで 飛びつかず、ある程度動きが確認できてからエントリーする」という考え方である。

最初に見つけた組み合わせ(entry12 / exit5 / 損切りなし / 実体5pips以上)は、2週間合計で+316.0 pips、しかも期間A・期間Bの両方でプラス(期間A: +282.9pips、期間B: +33.1pips)という、これまでで一番良い結果に見えた。

ところが、entry閾値を12から少しずらして8や10で試すと、期間Bは再び -140pips前後の大きなマイナスに戻ってしまった。

entry閾値期間A期間B
8+283〜293pips-140〜-149pips
10+283〜293pips-114〜-123pips
12+240〜285pips+24〜+33pips(唯一プラス)
15+120〜285pipsほぼ0pips

つまり「両期間でプラス」に見えた結果は、entry閾値12というピンポイントな設定にたまたまハマっただけだった可能性が高いということ。近くの値 (8や10)で同じ傾向が続かないのは、頑健性が低い=過学習のサインだ。

今回の教訓

パラメータの探索次元を増やす(今回で言えばentry・exit・損切り幅・実体フィルタの 4つ)ほど、たまたま良く見える組み合わせが見つかりやすくなる。試す組み合わせが 増えれば増えるほど、「偶然の当たりくじ」を引く確率も上がる。 実際、今回見つかった一番良さそうな設定も、近傍を確認しただけであっさり崩れた。

「2週間分のデータの中で一番成績が良いロジック」を探すこと自体は簡単だが、それが来週も通用するかどうかは全く別の話だと改めて実感した。

今後の方針

  • 実体(Open-Close)フィルタの採用は見送り。 アイデア自体は理にかなっているので、もっとデータが貯まった段階で 頑健性重視で再検証する。
  • ロジックは当面現状維持。 引き続き固定ルールでログを取り続け、局面のバリエーションを増やす。
  • 今後パラメータを検証する際は、必ず「期間を分けた検証」と 「近傍パラメータでの頑健性チェック」をセットで行う。 今回のように、全期間データだけを見て決めるのは危険だと分かったため。

地道な検証が続くが、こうして「うまくいかなかった探し方」を一つずつ 潰していくこと自体が、遠回りなようで一番確実な近道だと感じている。引き続き、来週以降のログでも検証を続けていきたいと思う。