バックテストの目的と限界
バックテストは、過去の価格データに対して取引ルールを適用し、仮にそのルールで運用していたらどのような損益になったかをシミュレーションする手法である。目的は (1) 戦略のアイデアが過去データで正の期待値を持つか検証する、(2) リスク特性 (最大ドローダウン、シャープレシオ等) を推定する、(3) パラメータの感度を確認する、の 3 点に集約される。しかしバックテストには本質的な限界がある。過去のデータで機能した戦略が将来も機能する保証はなく、バックテスト結果は「過去にこうだった」という事実の記述に過ぎない。この限界を認識した上で、バイアスを最小化する検証手法を採用することが重要である。
過剰最適化 (オーバーフィッティング)
過剰最適化は、バックテストにおける最大の落とし穴である。パラメータの数を増やし、過去データに完璧にフィットするルールを作ることは容易だが、それは過去のノイズ (ランダムな変動) にまで適合した結果であり、将来の未知のデータには通用しない。過剰最適化の兆候として、(1) パラメータを少し変えるだけで結果が大きく変わる (パラメータの脆弱性)、(2) 訓練期間では好成績だが検証期間で急激に悪化する、(3) パラメータの数がデータポイント数に対して多すぎる、が挙げられる。対策としてウォークフォワード検証 (訓練期間と検証期間を時系列でスライドさせる) が標準的に用いられる。
生存者バイアスとルックアヘッドバイアス
生存者バイアスは、その時点で存続している通貨ペアや銘柄のみでバックテストを行い、途中で消滅・上場廃止になったものを除外することで結果が上振れする問題である。FX では通貨ペア自体の消滅は稀だが、新興国通貨の取引停止 (資本規制) やブローカーの取扱い中止は起こりうる。ルックアヘッドバイアスは、バックテスト時点では入手不可能だった情報を使ってしまう問題である。例えば GDP 確報値でバックテストしているが、実際にはリアルタイムでは速報値しか入手できない、あるいは経済指標の事後修正 (revision) を考慮していない、といったケースが該当する。
取引コストの現実的な織り込み
バックテストで取引コストを過小評価すると、実運用で期待値が消失する。現実的なコスト織り込みには以下が必要である。(1) スプレッド - 固定値ではなく、時間帯やボラティリティに応じた変動スプレッドを使用する。(2) スリッページ - 成行注文では 0.1-0.5 pips 程度のスリッページを想定する。ボラティリティが高い局面ではさらに大きくなる。(3) スワップコスト - 保有期間が長い戦略では日々のスワップ支払い/受取りを正確に計算する。(4) 約定の部分充足 - 大きなポジションでは一度に全量が約定せず、複数回に分かれて平均約定価格が悪化する可能性がある。
多重検定バイアス - 試行回数の罠
見落とされがちな落とし穴に「多重検定バイアス (データスヌーピング)」がある。多数のパラメータや戦略アイデアを同じデータで次々に試すと、純粋な偶然だけで好成績に見える組み合わせが必ず出現する。100 個の無意味な戦略を検定すれば、5% 有意水準でも平均 5 個が「統計的に有意」と誤判定される。バックテストを何百回も回してベストを選ぶ行為は、本質的にこの罠に足を踏み入れている。対策として、(1) 試行回数を記録し、有意水準を試行数で調整する (ボンフェローニ補正など)、(2) 事前に仮説 (なぜ機能するはずか) を立ててから検証し、闇雲な総当たりを避ける、(3) 最終候補は一度も触れていない別期間・別通貨で最終確認する、といった規律が有効である。「良い成績の戦略を見つけた」のか「偶然を拾っただけ」なのかを分けるのは、結果の数字ではなく検証の設計そのものである。
信頼性の高いバックテストのための実践ガイド
バイアスを最小化し、信頼性の高いバックテストを行うための実践的なガイドラインを整理する。(1) アウトオブサンプルテスト - データの最後 20-30% を検証用に確保し、パラメータ決定には使わない。(2) ウォークフォワード検証 - 訓練窓と検証窓を時系列でスライドさせ、各期間の検証結果を連結する。(3) モンテカルロシミュレーション - トレードの順序をランダムに入れ替え、ドローダウンの分布を推定する。(4) 複数市場での汎化テスト - 1 つの通貨ペアで開発したルールを他の通貨ペアに適用し、汎用性を確認する。(5) 統計的有意性の検証 - シャープレシオが統計的にゼロと有意に異なるか t 検定で確認する (目安: t 値 > 2)。本記事は情報提供を目的としており、特定の取引手法を推奨するものではない。過去のバックテスト結果は将来の収益を保証しない。投資判断は各自の責任で行うこと。