「この戦略は本当に有効か、それとも単なる偶然か?」——自動売買で最も難しいのは、バックテストやDry-Runの結果が統計的に意味のあるものかどうかを判断することだ。
勝率55%で10トレードの実績があっても、それは「偶然の結果」かもしれない。100トレードで同じ勝率ならかなり信頼できるが、どの時点で「有効」と判断すべきか?
本記事では、ポアソン分布、Wilson信頼区間(ウィルソン信頼区間)、シグナルスコア閾値感度分析を組み合わせた定量的なGo/No-Go判断基準の設計を記録する。
「感覚」による判断の危険性
よくある判断ミス
- 少ないサンプルで結論: 「5トレード中4トレード勝った(勝率80%)→有効だ」→ 偶然の可能性が極めて高い
- 結果だけを見る: 「3ヶ月で+10万円だった→成功」→ 市場環境が良かっただけかもしれない
- 連勝/連敗に過剰反応: 「4連敗した→戦略が壊れた」→ 勝率55%でも4連敗は13%の確率で発生する
これらの判断ミスを防ぐために、統計的な評価基準を明文化した。
ポアソン分布によるトレード頻度の評価
ポアソン分布とは
ポアソン分布(Poisson Distribution)は、「一定期間に特定のイベントが発生する回数」の確率分布だ。トレードの発生頻度が「期待通りか異常か」を判定するのに使える。
月平均5トレードの戦略で、ある月に0トレードだった場合:
P(X=0 | λ=5) = e^(-5) × 5^0 / 0! = 0.0067 = 0.67%
→ 1%未満の確率でしか起きない「異常事態」
→ 戦略の劣化か、市場環境の変化を調査すべき
実装
from scipy.stats import poisson
def evaluate_trade_frequency(
observed_count: int, # 実際のトレード数
expected_monthly: float, # 期待月間トレード数
observation_days: int, # 観測期間(日数)
) -> dict:
expected = expected_monthly * (observation_days / 30)
p_value = poisson.cdf(observed_count, expected)
if p_value < 0.01:
status = "CRITICAL" # 異常に少ない
elif p_value < 0.05:
status = "WARNING" # 要注意
else:
status = "NORMAL" # 正常範囲
return {"status": status, "p_value": p_value, "expected": expected}
Wilson信頼区間による勝率の評価
なぜ単純な勝率では不十分か
勝率 = 勝ちトレード数 / 総トレード数。しかしサンプル数が少ないと、この値は大きくブレる。
10トレード中7勝 → 勝率70%
100トレード中70勝 → 勝率70%
同じ70%でも、10トレードの70%と100トレードの70%では信頼度が全く異なる。
Wilson信頼区間とは
Wilson信頼区間は、「真の勝率がこの範囲にある確率が95%」という区間を計算する手法だ。サンプル数が少ない場合でも正確な区間推定が可能で、標準的な正規近似より優れている。
from scipy.stats import norm
def wilson_confidence_interval(
wins: int,
total: int,
confidence: float = 0.95,
) -> tuple[float, float]:
"""Wilson信頼区間を計算"""
if total == 0:
return (0.0, 1.0)
z = norm.ppf(1 - (1 - confidence) / 2) # z=1.96 for 95%
p_hat = wins / total
denominator = 1 + z**2 / total
center = (p_hat + z**2 / (2 * total)) / denominator
margin = z * ((p_hat * (1 - p_hat) / total + z**2 / (4 * total**2)) ** 0.5) / denominator
return (center - margin, center + margin)
具体例
10トレード中7勝(勝率70%):
Wilson 95%信頼区間: [39.7%, 89.2%]
→ 真の勝率は39.7%〜89.2%のどこか。非常に不確実。
100トレード中70勝(勝率70%):
Wilson 95%信頼区間: [60.5%, 78.0%]
→ 真の勝率は60.5%〜78.0%。かなり信頼できる。
30トレード中18勝(勝率60%):
Wilson 95%信頼区間: [42.3%, 75.4%]
→ 真の勝率は42.3%〜75.4%。まだ不確実。
Go/No-Go判断基準
Dry-Run → Practice Mode移行の条件
以下のすべてを満たすこと。
| 基準 | 条件 | 統計的根拠 |
|---|---|---|
| サンプル数 | ≥ 30トレード | Wilson信頼区間の幅が実用的(±15%以下)に収まる最低限 |
| 勝率下限 | Wilson下限 > 40% | 95%信頼区間の下限が40%以上(RR比1.5以上なら期待値プラス) |
| シャープ比 | ≥ 0.5 | リスク調整後リターンが最低限プラス |
| 最大DD | ≤ 20% | 精神的に耐えられるドローダウン上限 |
| MC破産確率 | ≤ 1.0% | 10,000試行MCシミュレーション |
| トレード頻度 | ポアソンp値 > 0.05 | 期待頻度から統計的に逸脱していない |
Practice Mode → 本番の条件
| 基準 | 条件 | 備考 |
|---|---|---|
| Practice期間 | ≥ 3ヶ月 | 異なる市場環境を含む |
| サンプル数 | ≥ 50トレード | Wilson幅 ±10%以下 |
| Wilson下限 | > 45% | より厳しい基準 |
| 月次損益 | 3ヶ月中2ヶ月以上プラス | 一貫性の確認 |
| バックテスト乖離 | < 30% | BT結果と実績の乖離が許容範囲 |
シグナルスコア閾値感度分析(NEW-29)
閾値の影響を定量化する
min_total_score(エントリーに必要な最低スコア)の値を変えると、トレード数と勝率がどう変化するかを分析した。
min_total_score=1.5: トレード数 150件, 勝率 52%, RR比 1.2
min_total_score=1.7: トレード数 120件, 勝率 55%, RR比 1.3
min_total_score=1.9: トレード数 90件, 勝率 58%, RR比 1.4
min_total_score=2.1: トレード数 60件, 勝率 62%, RR比 1.5
min_total_score=2.3: トレード数 30件, 勝率 65%, RR比 1.6
閾値を上げると勝率は上がるが、トレード数が減る。「勝率 × トレード数 × 平均利益」で月利を最大化する閾値が最適値だ。
この分析の結果としてmin_total_score=1.9を採用し、これがNEW-31(高確率局面閾値緩和)の設計根拠となった。
Parabolicの教訓:統計的にNO-GOだった事例(NEW-27)
すべての施策がGOになるわけではない。Parabolic SAR(ストップ&リバース)の改善施策は、統計的な評価の結果、全4ペアでNO-GOとなった。
Parabolic改善施策のバックテスト結果:
EUR_JPY: 勝率 42%, RR比 0.9, Wilson下限 32% → NO-GO
GBP_JPY: 勝率 38%, RR比 0.8, Wilson下限 28% → NO-GO
AUD_JPY: 勝率 40%, RR比 0.7, Wilson下限 30% → NO-GO
CAD_JPY: 勝率 36%, RR比 0.6, Wilson下限 26% → NO-GO
Wilson下限がすべて40%を下回っており、Go条件を満たさない。「Parabolic凍結継続」の判断を行い、この指標は無効化した。
重要な学び: NO-GOの判断ができることが、Go/No-Go基準の本当の価値だ。「ダメなものをダメと言える」仕組みがなければ、感覚的に「もう少し頑張れば良くなるかもしれない」と無駄な開発を続けてしまう。
学んだこと
1. 30トレードが「最低限の統計的信頼性」の境界
Wilson信頼区間の幅が±15%以下に収まるのが約30トレード。これ未満の結果は「偶然かもしれない」と扱うべきだ。
2. 「勝率」ではなく「信頼区間の下限」で判断する
勝率70%でも、Wilson下限が40%なら「真の勝率は40%かもしれない」。判断は常に「最悪ケース」で行う。
3. NO-GOの判断こそが基準の真価
GO判断は嬉しいが、NO-GO判断こそが損失を防ぐ。Parabolicの凍結判断は、この基準がなければ「もう少し改善すれば使えるかも」とリソースを浪費し続けていたはずだ。
まとめ
統計的戦略評価の設計で重要なのは以下の3点だ。
- ポアソン分布でトレード頻度を監視: 期待値から統計的に逸脱していないか自動チェック
- Wilson信頼区間で勝率を評価: サンプル数を考慮した真の勝率の範囲推定。「下限」で判断
- Go/No-Go基準の明文化: 感覚ではなく数値で判断。NO-GOが言えることが最大の価値
「この戦略は本当に有効か」に対して、統計学が答えを出す。感覚に頼った判断は、遅かれ早かれ大きな損失を招く。