backtestingと現実:その完璧な期待値はあなたに嘘をついている
あなたのbacktest:期待値8R。プロフィットファクター3.5。1万ドルの口座で5万ドルの利益。
実弾に切り替える。最初の週:期待値-2R。プロフィットファクター0.4。口座は12%のマイナス。
何が起きたのか。あなたのbacktestが嘘をついたのだ。
🚨 本音を言えば
backtestの大半はただの空想だ。完璧な約定、slippageゼロ、スプレッドなし、そして実際の相場には存在しない魔法のようなエントリーを前提にしている。
backtestの結果が良すぎて信じられないなら、実際に信じてはいけない。あなたはシグナルではなくノイズに合わせ込んだのだ。
このレッスンで学ぶこと:
- backtestの9割が実弾で通用しなくなる理由
- 4つの大罪:過剰適合、先読みバイアス、非現実的なコスト、生存者バイアス
- 現実をきちんと映すslippageとスプレッドの見積もり方
- イン・サンプルとアウト・オブ・サンプル(意味のある検証はこれだけ)
⚡ 明日からできること(クリックで展開)
- backtestに現実的なコストを入れる — 1トレードあたり0.03〜0.05%のslippageに加えて、実際のスプレッドを織り込む。それで結果が崩れるなら、その優位は偽物だった。
- データを70/30に分ける — データの70%で最適化し、一度も見ていない30%で検証する。アウト・オブ・サンプルで落ちるなら、それは曲線への合わせ込みだ。
- 実弾の前に30日デモで回す — デモの結果がbacktestと大きく食い違うなら、どこかがおかしい。噛み合うまで実弾に出ないこと。
実例:期待値1.3Rの「完璧な」backtestが、実弾で-0.45Rの惨事に変わるまで
背景: 2024年3月、クリス(合成事例)は6か月の最適化を経てブレイクアウト戦略を作り上げた。backtestの見た目は驚異的だった。期待値1.3R、プロフィットファクター4.9、勝率67%、SPYの2年分のデータ(2022〜2023年)で検証済み。2024年4月に5万ドルを投入。2024年6月には口座が8,400ドルのマイナス(-16.8%)になっていた。以下はその全解剖である。
「完璧な」backtest(2022〜2023年のデータ)
| 指標 | 値 | クリスの心の声 |
|---|---|---|
| 総トレード数 | 156 | 十分な標本数 |
| 勝率 | 67.3% (105W / 51L) | 「すごい。平均をはるかに上回っている。」 |
| 平均利益/平均損失 | +2.4R / -1R | 「R:Rが素晴らしい。勝ちは負けの2.4倍だ。」 |
| プロフィットファクター | 4.9 | 「プロ水準の数字だ。」 |
| 期待値 | 1トレードあたり+1.3R | 「聖杯の領域だ。」 |
| 最大drawdown | -8.2% | 「drawdownが極小。極めて安全だ。」 |
| 通算リターン(2年) | +$40,600 (+406%) | 「これだ。仕事を辞める。」 |
クリスの最適化のやり方:
- EMAの期間を50通り試した(EMA(34)が「完璧」だと判明)
- ストップ用のATR倍率を20通り試した(1.47×ATRが「最適」だと判明)
- 利確目標を15水準試した(2.8Rが「最良」だと判明)
- 最終的な戦略:EMA(34)のクロス+1.47×ATRのストップ+2.8Rの目標
- 試した組み合わせの総数: 50 × 20 × 15 = 15,000通り
クリスがbacktestに入れなかったもの:
- slippage(正確な価格での完璧な約定を前提にした)
- ビッド・アスクのスプレッド(スプレッドをゼロと前提にした)
- 手数料(見積もるのを忘れた)
- 注文の不成立(約定率100%を前提にした)
- アウト・オブ・サンプル検証(見たことのないデータで一度も試さなかった)
実弾の現実(2024年4〜6月、10週間)
| 指標 | backtest | 実弾の現実 | 差 |
|---|---|---|---|
| 勝率 | 67.3% | 51.4% (19W / 18L) | 15.9ポイント悪化 |
| 平均利益 | +2.4R (+$1,200) | +1.8R (+$900) | 25%縮小 |
| 平均損失 | -1R (-$500) | -1.3R (-$650) | 30%拡大 |
| プロフィットファクター | 4.9 | 1.46 | 70%の崩落 |
| 期待値 | +1.3R | コスト差引後で-0.45R | -1.75Rのマイナス |
| 最大drawdown | -8.2% | -21.4% | 2.6倍悪化 |
| 通算リターン(10週間) | +9,600ドルの見込み | -$8,400 (-16.8%) | 1万8,000ドルの落差 |
完全なコスト計算:1万8,000ドルはどこへ消えたのか
| コストの費目 | 内容 | 影響額 |
|---|---|---|
| 1. 過剰適合(曲線への合わせ込み) | EMA(34)+1.47×ATRは2022〜2023年のデータでは完璧に働いたが、過去のノイズに最適化されていた。2024年の相場環境=別のノイズ。 | -$6,200 |
| 2. slippage(見積もっていない) | 1トレードあたり平均0.08%のslippage × 平均建玉2万5,000ドル × 37トレードの往復 = slippageのコスト1,480ドル | -$1,480 |
| 3. ビッド・アスクのスプレッド | SPYのスプレッド0.01ドル × 平均500株 × 37トレード = 185ドル。オプション(レバレッジのために使用)のスプレッド = 1株あたり0.03ドル × 1枚あたり100株 × 20枚 × 37トレード = スプレッドコスト合計2,220ドル | -$2,405 |
| 4. 手数料 | オプション:1枚あたり0.65ドル × 20枚 × 37トレード × 2(往復) = 962ドル | -$962 |
| 5. 注文の不成立 | 8トレードで指値が一度も約定しなかった(勝ちを5回、負けを3回逃した)。差引の機会費用:逃した勝ち5回×+1.8R(-9R)から、避けられた負け3回×-1.3R(+3.9R)を差し引いて -5.1R = 2,550ドル | -$2,550 |
| 6. 先読みバイアス | backtestのコードはclose[0]でエントリーを計算し、その同じ足の終値で入っていた(実弾では不可能)。実弾のエントリーは次の足の始値になる。平均して0.3%不利なエントリー = 2,775ドルの劣化 | -$2,775 |
| 7. 執行の遅延 | プラットフォームの遅延+注文を確認する時間 = 2〜8秒の遅れ。速いブレイクアウトは約定までに平均0.15%動いてしまった = 遅延によるslippage 1,387ドル | -$1,387 |
| backtestからの劣化の合計: | -$17,759 | |
計算してみると:
- backtestが見込んだ利益(10週間):+9,600ドル
- 差し引く劣化コスト:-17,759ドル
- 想定される実弾の結果:-8,159ドル
- 実際の実弾の結果:-8,400ドル — 計算は実際に起きたことと250ドル以内で一致している
何をすべきだったか:正しい検証
| ステップ | クリスがやったこと(誤り) | やるべきこと(正解) |
|---|---|---|
| 1. データの分割 | 2022〜2023年のデータをすべて最適化に使った | 2022年で最適化し、2023年はアウト・オブ・サンプル検証用に取っておく |
| 2. 最適化 | 15,000通りのパラメータの組み合わせを試した | 標準的なパラメータを使う(EMA 20/50、2×ATRのストップ)。試す数は10通り未満に抑える |
| 3. コストの見積もり | コストをゼロと前提にした | 0.10%のslippage+0.01ドルのスプレッド+1トレードあたり2ドルの手数料を織り込む = 最低でも1トレードあたり-30ドル |
| 4. 先読みの確認 | シグナルと執行の両方に同じ足の終値を使った | シグナルはclose[0]、執行はopen[1](次の足)。現実的なタイミング。 |
| 5. アウト・オブ・サンプル検証 | 見たことのないデータで一度も試さなかった | 2023年のデータ(手つかず)で試す。成績が30%超悪化するなら、その戦略は過剰適合だ |
| 6. ウォークフォワード | backtestの期間がひとつだけ | 6か月の最適化ウィンドウで、続く3か月を検証する。ずらしながら繰り返す。一貫しているかを見る。 |
クリスがやるべきだったアウト・オブ・サンプル検証
正しい手順:
- イン・サンプル期間: 2022年のデータだけで最適化する(2023年には触らない)
- パラメータを決める: EMA(34)+1.47×ATR(同じ結論だが、2022年だけから得たもの)
- パラメータを固定する: 以後いっさい変更しない。パラメータは凍結。
- アウト・オブ・サンプル検証: まったく同じパラメータを2023年のデータで走らせる
- 結果を比べる: 2023年の成績が2022年の70%を下回るなら、その戦略は過剰適合だ
どうなっていたか:
| 期間 | 期待値 | プロフィットファクター | 判定 |
|---|---|---|---|
| 2022年(イン・サンプル) | +1.4R | 3.1 | 最適化された成績 |
| 2023年(アウト・オブ・サンプル) | +0.4R | 1.4 | ⚠️ 71%の劣化 |
| 結論: この戦略はひどく過剰適合している。2023年の期待値は2022年の29%。現実的なコスト(1トレードあたり-30ドル=-0.15R)を入れると、正味の期待値は+0.25R(かろうじてプラス)。 実運用してはいけない。 | |||
教訓:クリスのbacktestは空想だった。15,000通りのパラメータを試せば、過去のノイズにぴたりと沿うものが必ず見つかる。あの「完璧な」1.3Rという期待値は、曲線に合わせ込んだだけのゴミだった。アウト・オブ・サンプル検証をしていれば、8,400ドルを失う前に分かっていた。backtestingとは過去の最高成績を探すことではなく、これから通用するものを探すことだ。そのためには、見たことのないデータ、現実的なコスト、そして先読みバイアスゼロが要る。
あなたの完璧な戦略が実弾で崩れる理由
居心地の悪い真実から始めよう。過去のデータに合うように戦略を最適化したのなら、あなたが見つけたのは優位ではない。ノイズだ。
ランダムなノイズに曲線を合わせ込む
どんな手口か: backtestが完璧に見えるまでパラメータをいじり続ける
例:
- EMAの期間を100通り試す(10、11、12……110)
- EMA(47)がbacktestで4.2Rの期待値を出す
- 「魔法の数字」を見つけたと思い込む
実際: EMA(47)はたまたまその特定のデータに合っただけだ。前向きに検証すると?期待値-0.8R。あなたが学んだのはノイズであって、シグナルではない。
改善策: 最適化を抑える。標準的なパラメータを使う。見たことのないデータで試す。
未来のデータを使う(実弾では不可能)
どんな手口か: いまの判断のために未来の足を「のぞき見る」コード
例:
if close[0] > high[5]: # 未来の5本を使っている
enter_long()
問題点: backtestingでは未来のデータが手元にある。実弾ではない。
実際: このコードは実弾ではそもそも動かない。あなたのbacktestは、存在しない戦略を検証している。
改善策: 判断した時点で手に入るデータだけを使うこと。
完璧な価格での完璧な約定を前提にする
backtestの前提: 「100.00ドルちょうどで買う」
実際: 成行注文は100.12ドルで約定する(スプレッド+slippage)
100トレードでの影響:
- backtestの利益:5,000ドル
- スプレッドのコスト(1トレード0.10ドル):-1,000ドル
- slippage(1トレード0.05ドル):-500ドル
- 手数料(1トレード2ドル):-200ドル
実際: 本当の利益 = 3,300ドル(backtestより34%少ない)
生き残ったものだけで検証する
どんな手口か: いまのS&P 500構成銘柄だけでbacktestingをする
問題点: 上場廃止や破綻で消えた200を超える銘柄を除外している
例:
- 2024年のS&P 500リストでbacktest:期待値1.8R、プロフィットファクター2.1
- だがその期間を通じて、あなたはHertz(2020年に破綻)やSVB Financial(2023年に破綻)をはじめ、ゼロになったあらゆる銘柄を買っていたはずだ。
実際: あなたの期待値は、上場廃止による壊滅的な損失を除外している。本当の期待値は-0.2R(負けるシステム)。
💡 腑に落ちる瞬間
backtestは現実ではない。シミュレーションだ。そしてシミュレーションにあり得ない前提が入っていれば、実弾の結果も同じくらいあり得ないものになる。
戦略を殺す隠れたコスト
大半のbacktestが無視しているのがこれだ。だからあなたのbacktestも、おそらく20〜40%は楽観的すぎる。
手順1:ビッド・アスクのスプレッドを見積もる
どんな手口か: 買値と売値の差
例:
- SPYのビッド:450.00ドル/アスク:450.01ドル → スプレッド = 0.01ドル
- 買うとき:450.01ドルを払う(スプレッドの半分=0.005ドル)
- 売るとき:450.00ドルを受け取る(スプレッドの半分=0.005ドル)
往復あたりのコスト: $0.01
1,000株なら: 0.01ドル × 1,000 = 1トレードあたり10ドル
100トレード: スプレッドコスト1,000ドル
手順2:slippageを見積もる
どんな手口か: 狙った価格と実際の約定価格の差
状況別の現実的なslippage:
- 通常の流動性: 0.01-0.02%
- 荒れた相場: 0.05-0.10%
- 流動性が薄い: 0.10-0.30%
- 建玉が大きい: 0.20-0.50%
保守的な前提: 1トレードあたり0.05%
1万ドルの建玉 × 0.05% = 片道5ドルのslippage = 往復10ドル
手順3:手数料を見積もる
例:Interactive Brokers
- 1株あたり0.005ドル、最低1ドル
- 200株 × 0.005ドル = 片道1ドル
- 往復 = 2ドル
100トレード: 手数料200ドル
手順4:現実的なコストの合計
1トレードあたり(往復):
- スプレッド:10ドル
- slippage:10ドル
- 手数料:2ドル
合計:1トレードあたり22ドル
あなたの戦略が1トレードあたり50ドルの粗利を生むなら → 手取り28ドル(44%減)
backtestを補正する例
現実的なコストの前と後
戦略:100トレード、1トレードあたり平均50ドルの利益
backtest(空想):
100トレード × 50ドル = 5,000ドルの利益
現実的なコストを引いた後:
- 粗利:5,000ドル
- スプレッド:-1,000ドル
- slippage:-1,000ドル
- 手数料:-200ドル
純利益:2,800ドル(44%減)
意味のある検証はこれだけ
プロが戦略を検証する手順はこうだ。
データを2つの期間に分ける。
- イン・サンプル(60〜70%): ここで戦略を組み立て、最適化する
- アウト・オブ・サンプル(30〜40%): 見たことのないデータで検証する
🎯 例:6年分のデータ(2018〜2024年)
イン・サンプル: 2018〜2022年(ここで最適化)
- いろいろなパラメータを試す
- 最も成績のよいルールを見つける
- エントリーとイグジットの論理を詰める
アウト・オブ・サンプル: 2023〜2024年(ここで検証)
- 戦略をいっさい変えずに走らせる
- 成績をイン・サンプルと比べる
- 似ていれば → 過剰適合ではない
- はるかに悪ければ → イン・サンプルのノイズに合わせ込んでいる
過剰適合の危険信号
🚩 あなたの戦略が曲線に合わせ込まれている兆候
- シャープが3.0超: 良すぎて信じられない
- 期待値が5R超: 極めてまれ(執行の前提を疑うこと)
- トレードが20〜30回しかない: 標本が小さすぎる(統計的に意味がない)
- 完璧な資産曲線: drawdownのない滑らかな線(あり得ない)
- 1銘柄でしか試していない: その相場状態に合わせ込んでいる可能性が高い
- 最適化したパラメータが10個以上: あなたが合わせ込んだのはノイズであって、シグナルではない
プロの検証手法
イン・サンプルとアウト・オブ・サンプルは良い。ウォークフォワードはもっと良い。
仕組み:
📊 ウォークフォワードの枠組み
期間1: 2018〜2019年で学習 → 2020年で検証
期間2: 2019〜2020年で学習 → 2021年で検証
期間3: 2020〜2021年で学習 → 2022年で検証
期間4: 2021〜2022年で学習 → 2023年で検証
すべての期間で一貫していれば: 頑健な戦略
成績が劣化するなら: 過剰適合か、相場状態に依存している
🎓 要点
- 現実的なコストを見積もる: スプレッド、slippage、手数料(利益が20〜40%減る)
- 過剰適合を避ける: パラメータを絞り、複数の市場で試す
- イン・サンプルとアウト・オブ・サンプル: 60〜70%で作り、30〜40%で検証する
- ウォークフォワード検証: 時期をまたいで一貫しているかを確かめる
- 危険信号: シャープ3.0超、期待値5R超、トレード30回未満
- 実弾の前に前向き検証する: 最低3〜6か月はデモで回す
🎯 backtest検証の実践
演習:危険信号の検出器で自分の戦略を検証する
いまの戦略(あるいは検討中の戦略)を取り、検証にかけてみよう。
- データの60%でbacktestする(イン・サンプル)。記録するもの:トレード数、期待値、シャープ、最大DD
- 使ったパラメータを書き出す(EMA、しきい値など)。複数の値を試して選んだものはあるか。
- 残り40%のデータで検証する(アウト・オブ・サンプル)。イン・サンプルの結果と比べる。
- ひな型の検証スコアカードを使う(8項目、満点60点)
- 点数を出す:50〜60=進める、40〜49=作り直す、40未満=捨てる
- 50点以上なら:実弾に出る前にデモで30〜60トレード回す
目的: 曲線への合わせ込み、先読みバイアス、非現実的な前提を、実際の口座が壊される前に捕まえる。実弾で本物の金を失うより、backtestingの段階で悪い戦略を捨てるほうがいい。
🎮 かんたん確認
問:ある戦略をbacktestした:期待値5.2R、シャープレシオ4.2、25トレードで検証、100通りの期間を試した結果が最も良かったのでEMA(47)を採用。何がまずいか。
2010〜2024年のSPYで平均回帰戦略をbacktestする。結果:期待値2.8R、勝率68%、利益12万ドル。データにはいまのS&P 500構成銘柄(今日その指数に入っている銘柄)しか含まれていない。2025年に実弾へ出て、失敗する。何が悪かったのか。
戦略をウォークフォワードで検証する:2018〜2020年で学習し2021年で検証(合格)。2018〜2021年で学習し2022年で検証(合格)。2018〜2022年で学習し2023年で検証(合格)。slippageも手数料も見積もっていない。この戦略を実弾で回すべきか。
backtestingでは、完璧さは疑いの対象だ。優位を生むのは現実主義である。コストを見積もり、過剰適合を避け、前向きに検証せよ——さもなければ実弾で崩れる。
関連レッスン
⏭️ 次回
レッスン#33:高度なリスク管理——プロの枠組み — ケリー基準、動的なポジションサイズ、そしてdrawdownへの対処手順を学ぶ。
教育目的のみ。 トレードには重大な損失リスクが伴います。過去の実績は将来の結果を保証するものではありません。
💬 ディスカッション (コメント0件)
コメントを読み込んでいます…
教育目的のみ。 トレードには重大な損失リスクが伴います。金融助言ではありません。過去の実績は将来の結果を保証するものではありません。