過学習の罠
機械学習モデルに十分なパラメータを与えると、ランダムなノイズの中にもパターンを見つけてしまいます。同じことが取引戦略の開発でも起こりますが、より気づきにくい形で現れます。エントリー閾値、エグジット閾値、ルックバック期間、出来高フィルター、時間帯フィルターなど、12個の調整可能なパラメータを持つ戦略は、過去のデータにほぼ完璧に適合できるだけの自由度を持っています。問題は、そのフィットしたパラメータが、持続的な市場の関係性ではなく、特定の過去期間に固有のノイズを捉えてしまっていることです。
これは直接検証できます。バックテストで優れた結果を示す戦略を取り上げ、パラメータを10〜20%ずらしてみてください。パフォーマンスが急激に崩れるなら、その戦略は過学習しています。堅牢な戦略はパラメータの変化に対して緩やかに劣化するはずであり、崖から落ちるように急落すべきではありません。その崖のような形状は、戦略が広範な構造的優位性ではなく、たまたまうまくいった過去データの狭い一角を見つけたに過ぎないことを示しています。
データにおける生存バイアス
ほとんどの暗号資産のバックテストは、現在も存在し活発に取引されている資産を対象に行われます。しかし実際には、数多くのトークンが生まれ、一定期間取引された後、事実上消滅し、価値の99%以上を失うか上場廃止になっています。「時価総額上位50トークン」で戦略をバックテストする場合、あなたは生き残ったトークンを選択していることになります。ゼロになったトークンには一切遭遇しないのです。
これが重要な理由は、多くのモメンタム戦略がバックテストで優れた結果を示すからです。上昇しているものを買い、下落しているものを売る。しかし生存バイアスのかかったデータセットでは、上昇したものの中には将来の生存者が含まれており、下落してやがてゼロになったものはデータセットから除外されています。戦略のアルファは、部分的または完全にデータ選択の産物に過ぎません。
解決策は、上場廃止資産や消滅したトークンを含む、生存バイアスのないデータを使用することです。このデータは入手が難しく費用もかかりますが、劇的にリアルに近いバックテスト結果をもたらします。
スリッページと市場インパクト
バックテストでは通常、シグナル発生時に表示されている価格で約定できると仮定します。しかし実際には、取引行為そのものが価格を動かします。戦略が$100で買いシグナルを出しても、注文が取引所に届いて約定するまでに$100.15を支払うことになるかもしれません。1回の取引では些細な差ですが、数千回の取引を重ねると、利益が出る戦略と損失が出る戦略の分かれ目になります。
スリッページの問題は、ボラティリティが高い時期に取引する戦略(まさに取引したいときに流動性が薄くなる)や、流動性の低い資産を取引する戦略でより深刻になります。スリッページゼロを仮定してDOGE/USDでバックテストすると優れた結果を示す戦略でも、注文板がポジションサイズを吸収できず価格を大きく動かしてしまうため、実際にはその価格での執行が物理的に不可能な場合があります。
現実的なスリッページのモデリングには、OHLCVローソク足データだけでなく、実際の注文板データが必要です。ローソク足データを使って終値での約定を仮定してバックテストしているなら、戦略のエッジ全体を超えることも多い楽観的な誤差を見込んでいることになります。
レジームの変化
市場は変わります。ボラティリティのレジームは変化し、相関関係は崩れ、新たな参加者が参入し、規制が変わり、マクロ経済の背景も進化します。低金利と大規模な個人投資家の流入を特徴とする2020〜2021年の強気相場に合わせてキャリブレーションされた戦略は、参加者の構成が異なる高金利環境では異なる動きをするでしょう。
難しいのは、レジームの変化は後から振り返って初めて明らかになるという点です。自分の戦略が依存している市場構造がいつ変化するかを事前に知ることはできません。できることは、データが入手可能であれば複数のレジームにわたって戦略をテストすること、そして戦略のリアルタイムパフォーマンスを期待パフォーマンスと比較して監視し、何かが変化したことを検知することです。
先読みバイアス
これはバックテストのコードにおける最も潜在的なバグです。先読みバイアスは、戦略が取引時点では入手できなかったはずの情報を意図せず使用してしまうときに発生します。よくある例としては、市場の寄り付きで意思決定するために日次終値を使用すること、初回公表後に修正されるインジケーターを使用すること、または遅延して届くデータ(1時間の報告ラグがある可能性のある取引所の準備金データなど)を使用することが挙げられます。
コード上では、先読みバイアスはインデックスのオフバイワンエラーとして現れることが多いです。時刻tのシグナルがt-1ではなくtのインデックスのデータを使用している場合、先読みをしていることになります。これは簡単に混入し、目視では発見しにくいバグです。最善の対策は、バックテストエンジンを厳密なイベント駆動モードで実行することです。このモードでは、戦略は現実的なタイムスタンプに基づいてすでに「公開済み」のデータのみを参照できます。
実際の取引に通用するもの
実際の取引でうまく機能する傾向がある戦略には、共通の特性があります。パラメータが少ない。データのパターンだけでなく、明確な経済的根拠に基づいている。パラメータの変化に対して緩やかに劣化する。複数の期間と市場環境にわたってテストされている。そして現実的な執行コストを考慮している。
これらのいずれも成功を保証するものではありませんが、確率を高めることはできます。バックテスト済みの戦略が実際の取引で失敗するというデフォルトの結果は、あなたが打ち勝とうとしているベースレートです。戦略が失敗する正確な理由を理解することで、実際の資金をリスクにさらす前に、自分の戦略をシステマティックにストレステストする方法が得られます。