ルックアヘッド・バイアス:バックテストは勝つのにライブ口座は負ける理由
2026-07-06
戦略を組んでバックテストすると、資産曲線は右肩上がり。ライブに投入すると、1ヶ月で口座が出血する。最も一般的な原因は 不運ではなく ルックアヘッド・バイアス です — 実際に取引を出さなければならなかった瞬間には存在 しなかった情報を、バックテストがこっそり使っていたのです。
ルックアヘッド・バイアスが危険なのは、何も問題がないように感じられるからです。コードは動き、数字は美しく、バグは たった1つのインデックスのずれや、ローソク足データに関する不注意な仮定に潜んでいます。
形態1:シグナルを生成したのと同じローソク足で取引する
ローソク足の指標値は、その足が 確定(クローズ) して初めて確定します。RSIが足Nで50を上抜けし、 バックテストが足Nの始値や安値でエントリーするなら、それはタイムトラベルです。ライブでは、その足が進行する間RSIは 揺れ動いており、あなたが根拠にした上抜けはまだ起きていませんでした。
形態2:同じローソク足の中での利確と損切り
+3%の利確と−2%の損切りを設定したポジションで、あるローソク足の高値が利確を超え、安値が損切りを割ったとします。どちら が先に約定したのか? OHLCデータだけからは 知ることができません — ローソク足は、その内部で価格が 辿った経路を記録していません。
楽観的なバックテストは利確が先に約定したと仮定し、その勝率の水増しはまさに最も重要な取引(変動の大きい足)で発生 します。守るべき選択は保守的なほうです:両方に触れたら 損切りが先に約定したと仮定する。バックテスト が現実より少し悪く見えるほうが、大幅に良く見えるよりましです。本エンジンは、あいまいなすべての足で損切り優先を適用 します。
形態3:確定前の上位時間足のローソク足を使う
人気のフィルター:「4時間足のトレンドが上昇のときだけロングする」。微妙なバグ:10:00時点で、現在の4時間足(08:00〜 12:00)は まだ進行中 です。バックテストがタイムスタンプで4h指標値を参照すると、ライブではまだ 描かれている途中だった足の確定値を読んでしまいます — その区間内の1時間足4本のうち3本が、未来によってゲートされる ことになります。
上位時間足フィルターは、現在の下位足が開く前に 完全に確定した HTFの足のみを参照しなければなりません。 マルチタイムフレーム戦略で最も一般的かつ最も破壊的なバグの一つです。トレンドの未来を知っているトレンドフィルターは、 いつも天才のように見えるからです。
形態4:データ全体で計算された指標
全履歴を使って正規化・ランク付け・スケーリングするものはすべて、未来を過去に漏らします:全データのmin-maxスケーリング、 全期間平均を使うzスコア、まだ来ていない年まで含めて計算した「出来高上位10%」など。戦略が足Nで読むすべての値は、 足0..Nだけから計算可能でなければなりません。
形態5:1本の足の中での両建てエントリー
上に買いストップ、下に売りストップを置くブレイクアウト系は、形態2と同じ経路の問題にぶつかります:1本の足が両方の 水準を掃けば、OHLCではどちらが先にトリガーされたかわかりません。このあいまいさを利益の出るほう(上昇相場ではしばしば 「常にロング優先」)で解決するバックテストは、存在しない優位性を製造します。
自分のバックテストを確認する方法
- シフトテスト: すべてのエントリーを1本の足だけ遅らせる。優位性がほとんど消えるなら、その「優位性」 は情報漏洩であって、市場の挙動ではありませんでした。
- 良すぎるテスト: タイトな利確で勝率70%超、あるいは意味のあるドローダウンのない資産曲線は、祝福では なく疑いに値します。
- 経路のあいまいさ監査: 利確と損切りが同じ足で両方触れた回数を数える。勝ち取引の大部分を占めるなら、 あなたの結果は測定ではなく仮定です。
- クロス実装: 可能なら、同じ仕様で完全に独立したコードを書き直し、取引単位で比較する。不一致は、 少なくとも一方の実装が嘘をついている証拠です。