02
バックテストの作り方と落とし穴
過去データで「勝てる戦略」を作るのは簡単。本当に難しいのは、それを疑うこと。
バックテストとは
「PBRが低い株を毎月買い替える」「25日移動平均を上回ったら買う」といった売買ルールを、過去の株価データに当てはめて、どのような成績になったかを検証することです。表計算ソフトやPythonなどのプログラミング言語で行います。
バックテストの手順
- 仮説を立てる「なぜこのルールで儲かるのか」を先に言葉で説明する。理由のないパターンは偶然の可能性が高い。
- データを用意する株価(分割・配当調整済み)、財務データ、上場廃止銘柄を含むデータを集める。
- ルールを厳密に決めるいつのデータで判断し、いつ・いくらで売買するのか。曖昧さを残さない。
- コストを入れて計算する売買手数料、スプレッド(売値と買値の差)、マーケットインパクト、税金、信用取引なら金利。
- 評価指標を見る年率リターン、標準偏差、シャープレシオ、最大ドローダウン、勝率、売買回転率。
- 使っていない期間で確かめるルールを作るのに使わなかったデータ(アウトオブサンプル)で、同じような成績が出るかを検証する。
バックテストを嘘つきにする6つのバイアス
| バイアス | 何が起きるか | 対策 |
|---|---|---|
| 過剰最適化(カーブフィッティング) | パラメータを何百通りも試し、たまたま過去に合った条件を選んでしまう | パラメータを少なくする。近い値でも成績が安定しているか確認する |
| 生存者バイアス | 今上場している銘柄だけで検証し、倒産・上場廃止した銘柄が抜け落ちる。成績が実際より良く見える | 上場廃止銘柄を含むデータを使う |
| 先読みバイアス | その時点では知り得なかった情報(後から修正された決算、当日の終値で当日の朝に売買など)を使ってしまう | 決算発表日を基準にデータを使う。判断と売買のタイミングをずらす |
| コストの過小評価 | 小型株や高頻度の売買では、手数料やスプレッドで利益が消える | 保守的にコストを見積もる。売買回転率を確認する |
| データ・スヌーピング | 多くの人が同じデータで無数の戦略を試した結果、偶然うまくいったものだけが報告される | 論文や他人の検証結果も「たまたま」の可能性を考える |
| レジームの変化 | 金利・規制・市場構造が変わり、過去に効いた戦略が効かなくなる | 複数の時代・市場で検証する。なぜ効くかの理由を持つ |
ウォークフォワード分析
過去の一定期間(例:5年)でルールを最適化し、その直後の期間(例:1年)で成績を確かめる。これを1年ずつずらして繰り返す方法です。「将来のデータを知らない状態で、毎年ルールを決め直していたらどうなっていたか」を再現でき、過剰最適化を見抜くのに役立ちます。
バックテストの成績は割り引いて考える
多くの研究で、学術論文で発表された株式のリターンの傾向(アノマリー)は、発表後にリターンが大きく低下することが報告されています。データの偶然と、多くの投資家が使い始めたことの両方が原因と考えられています。バックテストの成績は、実際の運用では大きく下がる前提で、半分程度に見積もるくらいの保守性が必要です。
プロの判断基準
- ルールが単純で、理由を一文で説明できる
- パラメータを多少変えても成績が大きく崩れない
- 複数の期間・市場・銘柄群で同じ傾向が出る
- コストを2倍にしても利益が残る
- 最大ドローダウンに、自分が本当に耐えられる
この章のポイント
- バックテストは仮説→データ→ルール→コスト→評価→アウトオブサンプル検証の順で行う。
- 過剰最適化・生存者バイアス・先読みバイアスが成績を水増しする。
- 実運用の成績はバックテストより大きく下がる前提で評価する。