バックテストにおける先読みバイアス(Look-Ahead Bias)とは?
先読みバイアス(look-ahead bias)とは、取引判断の時点では入手できなかった情報をバックテストが使ってしまうエラーです。典型例は、シグナルを生成した終値でそのまま執行すること。次のバーの始値で執行し、ポイント・イン・タイムデータを使えば防げます。
先読みバイアス(look-ahead bias)は、多くの場合目に見えないため、バックテストで最も厄介なエラーの一つです。戦略が取引の時点では入手できなかったはずの情報を使ってしまい、実際の市場では再現不可能な形で結果を水増しします。本格的な定量分析を行うなら、これを理解し排除することが不可欠です。
定義
先読みバイアスは、バックテストシステムが、取引判断を下した時点では知り得なかったデータを使うときに発生します。明日の新聞を読んで今日の取引をするのと同じことです。将来の情報を取り込んだバックテストは、非現実的なほど良い結果を出し、その結果は実際の取引ではまったく再現できません。
このバイアスは複数のレベルで入り込む可能性があります。データそのもの(遡及的に調整された価格)、シグナルロジック(同じバーの終値で執行する)、ユニバースの選定(将来の結果に基づいて銘柄を選ぶ)、あるいはファンダメンタルデータ(公表される前の決算数値を使う)です。
例:同一バーでの執行
これが最も一般的な形です。戦略が現在のバーの終値を使ってインジケーターを計算し、その同じ終値で取引を執行します。問題は、リアルタイムではバーが確定するまで終値がわからないことです。その時点で執行できるのは現在のバーの終値ではなく、次のバーの始値だけです。
影響はわずか(1本分の遅れ)に見えますが、非常に大きくなり得ます。ある銘柄が夜間に2%ギャップを空けて寄り付き、戦略が前日の終値でのエントリーを前提にしていた場合、1取引あたりの実際のリターンはバックテストが示すより2%悪くなります。何百回もの取引を重ねると、この差は積み重なってまったく別の戦略プロファイルになります。同一バーでの執行では利益が出ているように見える多くの戦略が、次のバーでの執行では損失を出すようになります。
例:将来の決算データ
戦略が、株価収益率(PER)が10を下回ったときに株を買うとします。PERには利益データが必要ですが、その利益は実際にはいつ発表されたのでしょうか。3月15日に発表された年間利益を1月10日の取引判断に使えば、将来のデータを使ったことになります。
これはファンダメンタルファクターのバックテストで驚くほどよく見られます。ほとんどのデータベースは、最終的に報告された利益の数値を、発表日ではなく対象となる会計期間に紐づけています。第4四半期の決算報告は10月〜12月を対象としていますが、発表は2月になることもあります。12月の取引判断に第4四半期の利益データを使うバックテストには、先読みバイアスがあります。
解決策はポイント・イン・タイム(point-in-time)データを使うことです。これは、今振り返って私たちが知っていることではなく、各時点で何が知られていたかを記録したデータベースです。Compustatのpoint-in-timeデータセットや同様の製品は、まさにこの問題を解決するために存在します。
例:遡及的に調整された価格
企業が2:1の株式分割を行うと、データプロバイダーはチャートが連続して見えるよう、過去の価格をすべて遡って半分にします。企業が1ドルの配当を支払うと、調整後終値の系列は過去のすべての価格を1ドル引き下げます。これはリターンの計算には便利ですが、過去を書き換えてしまいます。
50日SMAが特定の価格水準を上抜けたときに買う戦略を考えてみましょう。株式分割が起きると、過去のSMAはすべて新しい調整済み価格で再計算され、当時は存在しなかったクロスオーバーシグナルが生まれる可能性があります。2019年のトレーダーが見ていたのは未調整価格であり、2024年のバックテストが見ているのは分割調整済み価格です。これらは異なるシグナルを生み得る別々の系列です。
ベストプラクティス:調整済み価格はリターンの計算とポートフォリオ価値の追跡にのみ使います。シグナル生成とインジケーター計算には、未調整価格(または慎重にポイント・イン・タイムの調整を適用した価格)を使います。
先読みバイアスの見つけ方
発見には、バックテストのパイプラインを体系的に監査する必要があります。
- 執行タイミングのチェック:すべての取引について、シグナル生成のタイムスタンプと執行のタイムスタンプを出力します。両者が同じバー上にあれば、先読みバイアスがあります。
- データ入手可能性の監査:シグナル生成に使うすべてのデータポイントについて、その時点で公開されていたことを確認します。これはファンダメンタルデータ(利益、売上高、業績見通し)では特に重要です。
- 感応度テスト:すべてのシグナルの執行に1本分の遅延を加えます。戦略のシャープレシオが30%以上低下する場合、同一バーでの執行が結果を水増ししていた可能性が高いです。
- ペーパートレードとの比較:戦略をライブデータ上で数週間フォワードで動かします。バックテストに対して系統的にパフォーマンスが劣る場合、パイプラインのどこかに先読みバイアスがある強い兆候です。
先読みバイアスの防ぎ方
防止には、バックテストのプロセスのあらゆる段階で規律が必要です。
- 常に次のバーで執行する。シグナルがバーNの終値で生成されたら、バーN+1の始値で執行します。この一つのルールだけで、先読みバイアスの最も一般的な原因を取り除けます。
- ポイント・イン・タイムデータを使う。ファンダメンタルファクターについては、遡って修正された数値ではなく、各過去時点で入手可能だったとおりのデータを使っていることを確認します。
- 調整は慎重に扱う。分割調整・配当調整済みのデータはリターン計算にのみ使い、絶対的な価格水準が重要になるシグナル生成には使いません。
- ユニバースを固定する。バックテストに含める銘柄の選定に、将来の知識を使ってはいけません。S&P 500の銘柄で戦略をテストするなら、今日のリストを遡って適用するのではなく、各過去時点でのS&P 500構成銘柄リストを使います。
- 執行遅延を組み込む。現実的な約定遅延を加えます。ブローカーがミリ秒単位で約定する場合でも、意図せず紛れ込んだ同一バーのロジックを検出するための安全マージンとして、1本分の遅延を加えます。
ポイント・イン・タイムデータ
ポイント・イン・タイム(PIT)データベースは、各過去時点で知られていたとおりにデータを保存します。古い値を修正後の数値で上書きする標準的なデータベースとは異なり、PITデータベースは完全な改訂履歴を保持します。ある企業が10月28日に第3四半期の利益を当初1.20ドルと発表し、その後12月5日に1.15ドルへ修正した場合、PITデータベースは両方の値をそれぞれのタイムスタンプとともに記録します。
主要な銘柄を対象とした価格ベースの戦略では、データ改訂による先読みバイアスはそれほど問題になりません。価格は終値の時点で確定するからです。しかし、ファンダメンタルデータを使う戦略(バリュー投資、クオリティファクター、利益ベースのシグナル)では、PITデータが不可欠です。PITデータと非PITデータのどちらを使うかの違いが、シャープレシオ1.5に見える戦略と、実際にはシャープレシオ0.7の戦略との違いになり得ます。
実際に試してみましょう
QuantPromptは、最も一般的な形の先読みバイアスをデフォルトで防ぐよう作られています。バーNでインジケーターのクロスオーバーや価格条件から生成されたシグナルは、同じバーの終値ではなく、次に利用可能な価格で自動的に執行されます。これにより、特別な設定をしなくても同一バー執行のバイアスが取り除かれます。
影響をご自身で確かめるには、戦略を記述し、同一バー執行と次バー執行の結果を比較してください。その差を見れば、先読みバイアスが典型的なバックテストのリターンをどれだけ水増しするのか、そして実際の資金で取引するつもりのあらゆる戦略にとって、それを取り除くことがなぜ譲れない条件なのかが正確にわかります。
よくある質問
参考文献
- Banz, R. W. & Breen, W. J. (1986). Sample-Dependent Results Using Accounting and Market Data: Some Evidence. The Journal of Finance.
- TradingView. Pine Script v6 User Manual: Repainting (future leak with request.security()).
- TradingView. Pine Script v6 User Manual: Other timeframes and data (lookahead parameter).