トレードのバックテスト:戦略を検証する方法
実際のお金を賭ける前に、過去データでトレード戦略を検証する方法を解説します。先物向けの手動バックテストと自動バックテストを、手順を追って説明します。
トレードのアイデアが浮かびました。うまくいく気がします。チャートでいくつか例も見つけて、有望に思えます。ここで問われるのはひとつです。その手応えだけを根拠に $5,000 を賭けられますか。
答えははっきり「いいえ」であるべきです。1ドルでもリスクにさらす前に、過去データで戦略を検証する必要があります。バックテストがしてくれるのはまさにそれです。過去に何百回もトレードをシミュレーションして、そのアイデアに本物の統計的優位性があるのか、それとも錯覚にすぎないのかを教えてくれます。
バックテストとは何ですか
バックテストとは、トレード戦略を過去の市場データにあてはめて、それが過去にどう機能したかを評価する作業です。戦略のためのタイムマシンのようなもので、数週間、数か月、数年さかのぼって、リアルタイムでやるのと同じように計画を実行します。
たとえば戦略が「前日の POC を強気のピンバーで再テストしたら買う」というものなら、直近6か月分のセッションを見返し、その条件が満たされた場面をすべて拾い、結果を記録していくことになります。100回以上のシミュレーショントレードを終えたころには、その戦略が儲かるのか損をするのかについて、具体的なデータが手元に残ります。
バックテストは未来を予測しません。バックテストが与えてくれるのは統計的な自信です。過去200回のトレードで一貫して機能してきた戦略なら、市場環境が根本から変わらないかぎり、これからも機能すると考える確かな根拠があります。
バックテストが欠かせない理由
優位性(エッジ)を検証できます。バックテストをしなければ、本物の優位性があるのか、目にした5回の勝ちトレードがただの運だったのかがわかりません。勝つトレーダーと負けるトレーダーの差は、たいてい検証済みのエッジを持つ戦略と、勘に頼った戦略の差です。
自信を作れます。実際のお金で3連敗すると、戦略を捨てたくなる誘惑は相当なものです。しかし、同じ程度のドローダウンとその後の回復がバックテストにも出ていたと知っていれば、規律を保てます。データへの信頼は、感情から来る迷いに勝ちます。
弱点を見つけられます。バックテストは戦略の死角を映し出します。トレンド相場では絶好調なのにレンジ相場ですべて失うのかもしれません。勝率は高いのに損益比が低すぎて、1回の負けで5回分の利益が消えるのかもしれません。データがなければ、そのどれも気づけません。
手動バックテスト:リプレイを使う方法
手動バックテストとは、プラットフォームのリプレイ(再生)機能を使って過去データを1本ずつ進めながら、リアルタイムで取引しているのと同じように判断していく方法です。
手順は次のとおりです。
- プラットフォームを設定します。NinjaTrader なら Market Replay を有効にします。TradingView なら Bar Replay を使います。検証したい期間の先頭まで戻ります。
- ルールを文章にします。始める前に、どこで入るのか、ストップをどこに置くのか、どこで利益を取るのか、どの条件が満たされている必要があるのかを、あいまいさなく書き出します。
- 1本ずつ進めます。この先どうなるかを覗いてズルをしてはいけません。その時点で見えている情報だけで判断します。
- すべてのトレードを記録します。表計算ソフトに、日付、銘柄、方向(買い/売り)、エントリー価格、ストップ、ターゲット、結果(ティックとドルでの損益)、セットアップの質についてのメモを残します。
- 正直にやります。リアルタイムでも本当にそのトレードを取ったか自信がない場合は「疑わしい」と印をつけて、別に集計します。
手動バックテストの利点は次のとおりです。
- チャートを読む目が育ちます
- 不確実な状況で判断を下す訓練になります
- プログラミングが要りません
- 実際の運用でどの戦略にもつきまとう主観的な部分を拾えます
欠点は次のとおりです。
- 時間がかかります(1か月分のデータに数時間かかることもあります)
- 無意識のバイアスが入りやすいです(脳は戦略に成功してほしいと願っています)
- とても長い期間で繰り返すのが難しいです
自動バックテスト:機械に働かせる方法
自動バックテストでは、戦略のルールをプログラムに書き、ソフトウェアが過去データ上で自動的に実行します。速く客観的ですが、技術的なスキルが必要です。
先物向けの主なツールは次のとおりです。
| プラットフォーム | 言語 | 向いている用途 |
|---|---|---|
| NinjaTrader Strategy Analyzer | NinjaScript (C#) | 先物の機械的な戦略 |
| TradingView Pine Script | Pine Script | 素早い試作、インジケーターを使う戦略 |
| Sierra Chart | ACSIL (C++) | 複雑な戦略、高頻度取引 |
| Python (backtrader/zipline) | Python | 踏み込んだ統計分析、ポートフォリオ |
自動バックテストの流れは次のとおりです。
- エントリー、ストップ、ターゲットのルールをコードにします
- 銘柄と検証する期間を選びます
- バックテストを実行します
- 結果のレポートを分析します
- 必要ならパラメーターを調整します(カーブフィッティングに落ちないよう慎重に)
自動バックテストは数秒で何千回ものトレードを回せるので、統計的な標本がはるかに大きくなります。ただし重要な限界があります。主観的な部分をうまく拾えません。「文脈を読む」「モメンタムを感じる」といった要素に依存する戦略は、プログラムにしづらいのです。
必ず測るべき主要指標
戦略が「勝つ」か「負ける」かを知るだけでは足りません。その質を評価するための具体的な指標が必要です。
| 指標 | 何を測るか | 望ましい値 |
|---|---|---|
| Win Rate | 勝ちトレードの割合 | R:R 1:1 なら50%超、R:R 2:1 なら40%超 |
| Average R:R | 平均の利益/損失の比率 | 1.5:1 超が理想、1:1 超が最低ライン |
| Profit Factor | 総利益 / 総損失 | 1.5 超で良好、2.0 超で優秀 |
| Max Drawdown | 高値からの最大の資金の落ち込み | 許容度しだい。20%未満なら保守的 |
| Expectancy | 1トレードあたりの平均利益 | プラス(正の数であればよい) |
| Sharpe Ratio | ボラティリティで調整した収益 | 1.0 超で及第点、2.0 超で優秀 |
Expectancy の計算式は次のとおりです。
Expectancy = (Win Rate x Avg Win) - (Loss Rate x Avg Loss)
Expectancy がプラスなら、その戦略には統計的な優位性があります。高いほど良好です。1トレードあたりの Expectancy が $50 なら、負けも織り込んだうえで、トレードを1回開くたびに平均 $50 の利益が期待できるという意味です。
Profit Factor はおそらく最も直感的な指標です。2.0 であれば、1ドル失うごとに2ドル稼いでいるという意味になります。1.0 を下回る Profit Factor は、その戦略が損をしていることを示します。
標本の大きさ:何回のトレードが必要ですか
これは最もよくある誤りのひとつです。20回だけ検証し、そのうち14回が勝ちだったのを見て、戦略が有効だと結論づけてしまうのです。それだけ小さな標本では、単なる運を見ているおそれがあります。
目安は最低100トレードです。100トレードあれば統計的な意味が出はじめます。200〜300あれば頑健な標本です。50未満では、結論はほぼ役に立ちません。
さらに、標本にさまざまな相場環境が含まれているかを確認してください。強い上昇トレンド、下降トレンド、横ばいのレンジ、ボラティリティの高い時期と低い時期です。上昇トレンドでしか機能しない戦略は、完成した戦略ではありません。
実践的なアドバイス:日中の戦略なら最低6か月分、スイングトレードなら2〜3年分のデータで検証してください。株価指数先物(NQ、ES)を取引するなら、重要イベントを含む期間(FOMC、NFP、決算発表)も入れてください。
避けるべき重大なミス
カーブフィッティング(過剰最適化)
最大のミスです。過去データで完璧な結果が出るまで、戦略のパラメーターを何度も調整してしまいます。問題は、未来ではなく過去に向けて最適化してしまったことです。
カーブフィッティングの兆候は次のとおりです。
- 調整できるパラメーターが10個以上ある
- パラメーターを1ティック変えるだけで結果が崩壊する
- 結果が「できすぎ」に見える(Profit Factor が5以上)
- ある期間では完璧なのに、別の期間ではひどい
避け方:アウトオブサンプルの手法を使います。データを2つに分け、前半(インサンプル)で戦略を作り、後半(アウトオブサンプル)で検証します。両方で結果が似ていれば、カーブフィッティングは起きていません。
スリッページと手数料を無視する
バックテストでは、完璧な約定を前提にしたくなります。しかし現実にはスリッページ(注文を出してから約定するまでに価格が動くこと)があり、1トレードごとに手数料もかかります。スキャルピングでは、この摩擦だけで勝てる戦略が負ける戦略に変わります。
先物での実践ルール:1トレードあたり1ティックのスリッページと、使っているプラットフォームやブローカーの実際の手数料を加えます。そのコストを乗せても利益が残るなら、その戦略は頑健です。
生存バイアス
「うまくいったとわかっている」銘柄や期間でしか検証しない状態です。無意識のうちに、難しい期間を避けてしまいます。解決策は単純で、使えるデータの全期間を例外なく検証することです。
フォワードテスト:実戦への橋渡し
バックテストが教えてくれるのは、その戦略が過去に機能したという事実です。フォワードテスト(ペーパートレードやデモ取引とも呼ばれます)は、それが今この瞬間、リアルタイムで、バイアスなしに機能することを確かめる作業です。
手順は単純です。
- バックテストを終え、良好な結果が出ています
- リアルタイムで戦略を実行しますが、実際のお金は使いません(デモまたはペーパー)
- バックテストとまったく同じ形式で1回ごとに記録します
- 30〜50トレードを終えたら、フォワードテストの指標をバックテストの指標と比べます
指標が(妥当な誤差の範囲で)似ていれば、その戦略は検証済みです。フォワードテストの結果が明らかに悪いなら、カーブフィッティング、判断における感情のバイアス、あるいは相場環境の違いが疑われます。
身銭を切るフォワードテストとしてのプロップファーム
プロップファームがこの流れにぴたりとはまるのはここです。戦略がバックテストとデモでのフォワードテストを通過したら、プロップファームのチャレンジが次の段階の検証として機能します。
チャレンジでは、実際のルール(最大ドローダウン、Profit Target、最低取引日数)に従わなければならず、チャレンジの費用を失うプレッシャーもかかります。まとまった実資金を動かす前の、決定版のフォワードテストです。
この段階に最も向いているのは、柔軟なルールと良好なコスパを備えた口座です。バックテストで戦略を検証してあれば、常識的なルールのチャレンジは障害にならないはずです。
プロップファームが初めてならはじめての方へのガイドを、検証済みの戦略に合う口座を探すなら比較ツールをご覧ください。最初のチャレンジの費用を抑えたい場合は、利用できる割引も確認できます。
検証の全体の流れ
はっきりさせるために、本気のトレーダーがたどるべき流れを通しで示します。
- アイデア → トレードの仮説を立てる
- 手動バックテスト → リプレイで検証する(100トレード以上)
- 指標の分析 → 勝率、R:R、Profit Factor、最大ドローダウン
- 自動バックテスト(任意) → プログラムが書けるなら標本を広げる
- デモでのフォワードテスト → お金を使わずリアルタイムで30〜50トレード
- プロップファームのチャレンジ → 身銭を切る最初のテスト
- Funded Account → 預かった資金での実戦
段階を飛ばせば、その分だけお金で払うことになります。近道はありません。
よくある質問
実戦に入る前に、バックテストにどれくらいの時間をかけるべきですか?
日中の戦略なら、集中したバックテストに最低2〜4週間です。良好な指標を伴うシミュレーショントレードが少なくとも100回は必要です。急げば、実際の口座で避けられたはずの損失として代金を払うことになります。
手動バックテストと自動バックテストのどちらが優れていますか?
どちらにも役割があります。主観的な要素を含む戦略(プライスアクション、文脈の読み)には手動が向いています。厳密なルールで完全に機械的な戦略には自動が向いています。理想は、まず手動で戦略を理解し、そのあと自動でより大きな標本を使って検証することです。
バックテストにプロップファームの手数料も含めるべきですか?
はい、必ず含めてください。プラットフォーム利用料、マーケットデータ料、スリッページも入れます。摩擦コストを抜いたときしか利益が出ない戦略は、実用に耐える戦略ではありません。先物の手数料は、往復1枚あたり $3-5 程度が一般的です。
バックテストの結果が平凡だった場合はどうすればよいですか?
Profit Factor が 1.0 から 1.3 のあいだなら、実際の環境では生き残れないかもしれない、ぎりぎりの優位性です。どこで損をしているのかを分析してください。レンジ相場でしょうか。高ボラティリティの場面でしょうか。その条件を弾くフィルターを足すか、エントリーとイグジットのルールを見直します。調整しても平凡なままなら、その戦略は捨てて別のアイデアを試してください。
先物のバックテストに TradingView を使えますか?
はい。TradingView には先物の過去データがあり、Bar Replay 機能で手動バックテストができます。自動化なら、試作用途では Pine Script で十分です。ただし、ティック単位のデータを使う本格的なバックテストでは、より細かいデータを扱える NinjaTrader や Sierra Chart のほうが優れています。
