トレード戦略のバックテストのやり方 — ステップ・バイ・ステップ
トレード戦略をバックテストするには、売買ルールを正確に定義し、過去データを入手・クリーニングし、各バーで入手可能な情報だけで取引をシミュレーションし、手数料とスリッページを含めてアウトオブサンプルで検証します。結果は必ずバイ・アンド・ホールドと比較します。
戦略を正しくバックテストするのは、見た目よりも難しいものです。過去データをスクリプトに通すだけではありません — データの品質、約定の現実性、統計的な検証に細心の注意を払う必要があります。このガイドでは、ルールの定義から結果の解釈まで、プロセス全体を順を追って説明します。
ステップ1:戦略のルールを正確に定義する
データに触れる前に、戦略のルールを曖昧さのない言葉で書き出しましょう。「株が売られすぎに見えたら買う」のような曖昧なルールはバックテストできません。必要なのは次のものです:
- エントリー条件:具体的にどの指標の値、価格の関係、イベントが買いまたは売り(ショート)のシグナルを発生させるか
- エグジット条件:何がポジションを決済するか — 反対シグナル、固定の利益目標、ストップロス、または時間制限
- ポジションサイズ:1トレードあたりにどれだけの資金を配分するか(資産の何%か、固定ドル額、ケリー基準)
- ユニバース:戦略をどの資産に適用するか
- 執行タイミング:寄り付き、引け、または特定の価格での指値注文
ルールを正確に定義するほど、実装時にバイアスを持ち込みかねない曖昧さの余地は小さくなります。
ステップ2:データを入手してクリーニングする
過去データの品質は、信頼できるバックテストの土台です。よくある問題は次のとおりです:
- コーポレートアクション:株式分割や配当の支払いは、生の価格系列を歪めます。リターンの計算には必ず調整後終値を使いましょう。ただし注意が必要です — 調整後価格はさかのぼって再計算されるため、正しく扱わないと、気づきにくいルックアヘッドバイアス(look-ahead bias)が入り込むことがあります。
- 生存者バイアス:無料のデータソースには、通常、現在取引されている銘柄しか含まれていません。上場廃止、合併、倒産した企業は除外されており、過去が実際以上に良く見えてしまいます。上場廃止データを含む過去の構成銘柄を収録したデータセットを使って、これを避けましょう。
- データの欠損と外れ値:欠けているバー、出来高ゼロの日、データエラーと思われる極端な価格の急変がないか確認しましょう。たった1つの壊れたデータポイントが偽のトレードを生み、結果全体を左右してしまうことがあります。
ステップ3:ルックアヘッドバイアスなしで戦略を実装する
ルックアヘッドバイアス — 将来の情報を使って過去の判断を下すこと — は、バックテストで最もよくあり、最も深刻な誤りです。黄金律:バーtの時点で、戦略が使えるのはバーtまたはそれ以前に入手可能な情報だけです。
実践的なチェック:バーtで20日SMAを計算するなら、使うのはバーt-19からtまでで、tより後のバーは一切使いません。シグナルの後にバーtの引けでエントリーする場合、バーtの終値を使ってもかまいませんが、それはその価格で現実に約定できる場合に限ります。実際には、バーt+1の始値でエントリーするほうが安全です。
ステップ4:取引コストを現実的にモデル化する
コスト控除前には利益が出ているように見える戦略も、控除後には赤字になることがよくあります。次のものを含めましょう:
- 手数料:「手数料無料」のプラットフォームにもコストはあります — 流動性の高い米国株では、片道0.01–0.05%を基準値として使いましょう
- ビッド・アスク・スプレッド:買いはアスクで、売りはビッドで行うため、スプレッドは往復のたびに必ず発生するコストです
- スリッページ:シグナルの発生から約定までの間に、市場は不利な方向に動きます。資産の流動性に応じて、1トレードあたり0.05–0.20%としてモデル化しましょう
- ショートポジションの借株コスト:空売りには株を借りる必要があり、年率でコストがかかります(借りにくい銘柄では年10–50%かかることもあります)
ステップ5:アウトオブサンプルで検証する
パラメータの最適化とパフォーマンスの評価を、同じデータで行ってはいけません。標準的な方法は、過去データを2つの期間に分けることです。最初の70–80%を開発とパラメータ最適化に使います。最後の20–30%は厳格なホールドアウト・テストセットとして取っておき、戦略が確定するまで触れないでください。アウトオブサンプルのパフォーマンスこそが、実際の結果に対する正直な見積もりです。
より頑健な検証にはウォークフォワード分析を使いましょう:最適化のウィンドウを時間に沿って先へ進め、各期間についてアウトオブサンプル結果を生成します。これにより、幸運なパラメータセットがたまたまうまくいったかどうかではなく、最適化プロセスそのものに一貫性があるかどうかを検証できます。
ステップ6:結果を正しく解釈する
バックテスト結果が出たら、批判的に評価しましょう:
- バイ・アンド・ホールドと比較する:原資産が15%上昇していたなら、年10%のリターンの戦略は劣っています
- 年ごとのパフォーマンスを確認する:全体のシャープレシオが高くても、特定の期間にしか機能しなかった戦略が隠れていることがあります
- 最悪のドローダウン期間を調べる:心理的にその期間を耐えてポジションを持ち続けられたでしょうか?
- パラメータの頑健性を検証する:似たようなパラメータ(±10%)でも戦略は機能しますか?それとも、パフォーマンスが正確な値に極端に敏感ですか?
バックテストのツール
バックテストのツールチェーンは重要です。pandas、backtrader、vectorbtを使うPythonは最も柔軟な選択肢で、完全なコントロールが得られますが、プログラミングのスキルが必要です。TradingViewのPine Scriptは、ストラテジーテスターを内蔵した視覚的なインターフェースを提供しています。QuantConnectは、豊富なデータを備えた機関投資家レベルのインフラを提供しています。
コードを書かずにすばやくプロトタイプを作りたいなら、QuantPromptで戦略を自然な言葉で説明すれば、完全なバックテストレポートをすぐに受け取れます。これは特に戦略開発の初期段階、本格的な実装に時間をかける前に多くのアイデアをすばやく試したいときに役立ちます。
よくある質問
参考文献
- Harvey, C. R. & Liu, Y. (2015). Backtesting. The Journal of Portfolio Management.
- Bailey, D. H., Borwein, J. M., López de Prado, M. & Zhu, Q. J. (2017). The Probability of Backtest Overfitting. The Journal of Computational Finance.
- TradingView. Pine Script v6 User Manual: Strategies.
- Backtrader. Broker - Slippage.