Skip to content
Go back

戦略の有効性を統計的に評価する:Go/No-Go判断のための定量基準

Edit page

「この戦略は本当に有効か、それとも単なる偶然か?」——自動売買で最も難しいのは、バックテストやDry-Runの結果が統計的に意味のあるものかどうかを判断することだ。

勝率55%で10トレードの実績があっても、それは「偶然の結果」かもしれない。100トレードで同じ勝率ならかなり信頼できるが、どの時点で「有効」と判断すべきか?

本記事では、ポアソン分布、Wilson信頼区間(ウィルソン信頼区間)、シグナルスコア閾値感度分析を組み合わせた定量的なGo/No-Go判断基準の設計を記録する。


「感覚」による判断の危険性

よくある判断ミス

  1. 少ないサンプルで結論: 「5トレード中4トレード勝った(勝率80%)→有効だ」→ 偶然の可能性が極めて高い
  2. 結果だけを見る: 「3ヶ月で+10万円だった→成功」→ 市場環境が良かっただけかもしれない
  3. 連勝/連敗に過剰反応: 「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点だ。

  1. ポアソン分布でトレード頻度を監視: 期待値から統計的に逸脱していないか自動チェック
  2. Wilson信頼区間で勝率を評価: サンプル数を考慮した真の勝率の範囲推定。「下限」で判断
  3. Go/No-Go基準の明文化: 感覚ではなく数値で判断。NO-GOが言えることが最大の価値

「この戦略は本当に有効か」に対して、統計学が答えを出す。感覚に頼った判断は、遅かれ早かれ大きな損失を招く。


Edit page
Share this post on:

Previous Post
レンジ相場を収益化する:ADX+NATR+BBWによるレジーム判定とBBバウンス逆張り
Next Post
シグナル品質の地道な改善:スコア計算整合とGranville新カテゴリ