backtest-expert について
システマティックトレーダー向けのバックテスト用スキルです。見かけの収益より、ストレス条件下での堅牢性を重視します。評価スクリプトがサンプル数、期待値、リスク管理、頑健性、約定の現実性を採点し、判定を出します。
主な機能
- 01曖昧さのない戦略ルールの定義
- 02パラメーターと相場局面への感度検証
- 03スリッページ、手数料、約定摩擦のモデル化
- 04アウトオブサンプルとウォークフォワード検証
- 05スクリプトによる評価とリスク検出
活用シーン
- 01戦略の実運用への適性確認
- 02過剰最適化や先読みバイアスの点検
- 03コストや約定条件の影響検証
- 04戦略を修正するか断念するかの判断
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ wind-alice/ alicemarket --skill backtest-expertインストール後、Claude Code で/backtest-expertを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/failed_tests.mdmethodology.mdscripts/evaluate_backtest.pyscripts/tests/conftest.pytest_evaluate_backtest.py詳細
バックテストのエキスパート
楽観的な結果よりも堅牢性を優先する、専門的な手法に基づいた取引戦略の体系的なバックテストのアプローチです。
中核となる理念
目標:「最も利益を上げる」戦略ではなく、「最も崩れにくい」戦略を見つけます。
原則:摩擦を加え、前提条件をストレステストし、何が持ちこたえるかを確認します。悲観的な条件下でも戦略が機能するなら、実際の取引でも成功する可能性が高まります。
このスキルを使う場面
以下の場合にこのスキルを使います。
- システム取引戦略を開発または検証する
- 取引アイデアが実運用に耐えうるほど堅牢か評価する
- バックテストが誤解を招く理由を調べる
- 適切なバックテスト手法を学ぶ
- よくある落とし穴(カーブフィッティング、先読みバイアス、生存者バイアス)を避ける
- パラメーター感度と市場レジームへの依存度を評価する
- スリッページと執行コストについて現実的な期待値を設定する
前提条件
- Python 3.9+(評価スクリプト用)
- API キーは不要です
- 外部データへの依存はありません。指標はユーザーが提供します
ワークフロー
1. 仮説を立てる
優位性を一文で定義します。
例:「決算発表時に3%を超えるギャップアップが発生し、最初の1時間以内に前日の終値まで押し戻された株式は、平均回帰の機会となります。」
優位性を明確に説明できない場合は、テストに進まないでください。
2. 裁量の余地なくルールを定める
以下を完全に具体化します。
- エントリー:正確な条件、タイミング、価格の種類
- エグジット:損切り、利益確定目標、時間ベースの決済
- ポジションサイズ:固定額、ポートフォリオ比率、ボラティリティ調整
- フィルター:時価総額、出来高、セクター、ボラティリティ条件
- 対象ユニバース:対象となる金融商品
重要:主観的な判断は一切認められません。すべての判断をルールに基づき、曖昧さのないものにする必要があります。
3. 初期バックテストを実施する
以下の条件でテストします。
- 最低5年間(できれば10年以上)
- 複数の市場レジーム(強気相場、弱気相場、高ボラティリティ、低ボラティリティ)
- 現実的なコスト:手数料と保守的なスリッページ
初期結果を確認し、基本的な実現可能性を評価します。根本的な問題がある場合は、仮説を見直します。
4. 戦略をストレステストする
テスト時間の80%を費やすべき段階です。
パラメーター感度:
- 損切り幅を基準値の50%、75%、100%、125%、150%でテストする
- 利益確定目標を基準値の80%、90%、100%、110%、120%でテストする
- エントリー/エグジットのタイミングを±15~30分変える
- 狭い範囲の急上昇ではなく、安定したパフォーマンスが続く「プラトー」を探す
執行時の摩擦:
- スリッページを一般的な推定値の1.5~2倍に増やす
- 最悪の約定条件をモデル化する(買いは売り気配値+1ティック、売りは買い気配値-1ティック)
- 現実的な注文拒否のシナリオを追加する
- 悲観的な手数料体系でテストする
時間的な堅牢性:
- 年ごとのパフォーマンスを分析する
- 大半の年で期待値がプラスになることを求める
- 1~2回の例外的な期間に依存していないことを確認する
- 異なる市場レジームごとに個別にテストする
サンプルサイズ:
- 絶対的な最低数:30件の取引
- 推奨:100件以上の取引
- 高い信頼度:200件以上の取引
5. アウトオブサンプル検証
ウォークフォワード分析:
- 学習期間(例:1~3年目)で最適化する
- 検証期間(4年目)でテストする
- 期間を先に進めて繰り返す
- インサンプルとアウトオブサンプルのパフォーマンスを比較する
警告サイン:
- アウトオブサンプルのパフォーマンスがインサンプルの50%未満
- 頻繁なパラメーターの再最適化が必要
- 期間ごとにパラメーターが大幅に変化する
6. 結果を評価する
答えるべき質問:
- 悲観的な仮定でも優位性は維持されますか?
- パラメーターを変えてもパフォーマンスは安定していますか?
- 複数の市場レジームで戦略は機能しますか?
- 統計的な信頼性を得るのに十分なサンプル数がありますか?
- 結果は現実的で、「出来すぎ」ではありませんか?
判断基準:
- ✅ デプロイ:許容できるパフォーマンスを保ち、すべてのストレステストをクリアする
- 🔄 改善:中核となるロジックに問題はないが、パラメーターの調整が必要
- ❌ 断念:ストレステストに失敗する、または脆弱な仮定に依存している
評価スクリプトを使って、体系的かつ定量的に評価します。
python3 skills/backtest-expert/scripts/evaluate_backtest.py \
--total-trades 150 \
--win-rate 62 \
--avg-win-pct 1.8 \
--avg-loss-pct 1.2 \
--max-drawdown-pct 15 \
--years-tested 8 \
--num-parameters 3 \
--slippage-tested \
--output-dir reports/
このスクリプトは、5 つの観点(サンプル数、期待値、リスク管理、堅牢性、執行の現実性)を評価し、危険信号を検出して、「デプロイ/改善/断念」の判定を出力します。
主なテスト原則
戦略を厳しくテストする
あらゆる場面で摩擦を追加します。
- 実際より高い手数料
- 一般的なスリッページの 1.5〜2 倍
- 最悪の約定条件
- 注文の拒否
- 部分約定
理由:悲観的な仮定に耐えられる戦略は、実運用でも優れたパフォーマンスを発揮することが多いためです。
ピークではなく、安定した範囲を探す
パフォーマンスが急上昇する最適値ではなく、パフォーマンスが安定するパラメーターの範囲を探します。
良い例:ストップロスが 1.5%から 3.0%の範囲なら、どの値でも利益が出る 悪い例:ストップロスがちょうど 2.13%の場合にしか機能しない
パフォーマンスの安定は真の優位性を示します。一方、最適値が狭い場合はカーブフィッティングが疑われます。
えり好みせず、すべてのケースをテストする
誤った方法:うまくいった「市場のリーダー」を手作業で選んで調べる 正しい方法:基準を満たした銘柄を、失敗したものも含めてすべてテストする
都合のよい事例だけを選ぶとサバイバーシップバイアスが生じ、戦略の質を過大評価してしまいます。
アイデアの創出と検証を分ける
直感:仮説の生成に役立つ 検証:純粋にデータに基づいて行う必要がある
アイデアへの思い入れによって、テスト結果の解釈が左右されないようにしてください。
よくある失敗パターン
早期に次のパターンを認識すれば、時間を節約できます。
- パラメーター感度:特定のパラメーター値でしか機能しない
- 特定の市場レジームへの依存:特定の年は好成績だが、別の年はひどい結果になる
- スリッページへの感度:現実的なコストを加えると利益が出なくなる
- サンプル数が少ない:統計的な信頼性を得るには取引数が少なすぎる
- 先読みバイアス:「出来すぎ」な結果になる
- 過剰最適化:パラメーターが多く、アウトオブサンプルの結果が悪い
詳しい例と診断フレームワークについては、references/failed_tests.md を参照してください。
出力
reports/backtest_eval_<timestamp>.json— 次元別のスコア、危険信号、判定を含む、体系化された評価reports/backtest_eval_<timestamp>.md— 次元別の表、主要指標、危険信号の詳細を含む、人が読みやすいレポート
リソース
方法論のリファレンス
ファイル:references/methodology.md
参照するタイミング:個別のテスト手法について詳しく知りたい場合。
内容:
- ストレステストの手法
- パラメーター感度分析
- スリッページと摩擦のモデル化
- 必要なサンプル数
- 市場レジームの分類
- よくあるバイアスと落とし穴(サバイバーシップ、先読み、カーブフィッティングなど)
失敗したテストのリファレンス
ファイル:references/failed_tests.md
参照するタイミング:戦略がテストに失敗した場合や、過去の失敗から学ぶ場合。
内容:
- 失敗に価値がある理由
- よくある失敗パターンとその例
- ケーススタディの文書化フレームワーク
- バックテスト評価用の危険信号チェックリスト
重要な注意事項
時間配分:アイデアの考案に20%、そのアイデアを徹底的に検証することに80%を費やしてください。
コンテキストに依存しない要件:「完璧なコンテキスト」がないと機能しない戦略は、体系的なトレードに使うには十分な堅牢性がありません。
危険信号:バックテストの結果が良すぎる場合(勝率が90%超、ドローダウンが最小、タイミングが完璧など)は、先読みバイアスやデータの問題がないか、慎重に監査してください。
ツールの制約:使用するバックテストプラットフォーム特有の挙動(補間方法、流動性の低い市場の扱い、データのアラインメントに関する問題)を把握してください。
統計的有意性:小さな優位性を証明するには、大きなサンプル数が必要です。トレードごとに5%の優位性を偶然の結果と区別するには、100件以上のトレードが必要です。
裁量取引とシステムトレードの違い
このスキルでは、以下の特徴を持つシステムトレード/定量的なバックテストに焦点を当てています。
- すべてのルールが事前にコード化されている
- 実行に裁量や「感覚」が介在しない
- 厳選した事例だけでなく、過去のすべての事例を対象にテストする
- コンテキスト(ニュース、マクロ経済)は意図的に排除されている
裁量トレーダーは異なる方法で検証します。主観的な判断が必要なセットアップには、このスキルが適用できない場合があります。