同じ勝率50%のEAでも、リスク2%なら破産確率0.6%・10%なら59%|モンテカルロ10万回で計算した

本記事は資金管理の計算記録であり、特定の金融商品や手法の推奨ではありません。詳しくは免責事項をご覧ください。

EAの成績表でまず見られるのは勝率やプロフィットファクターですが、実際に口座が生き残るかどうかを決めるのはロット(1トレードで資金の何%を賭けるか)です。今回は「勝率50%・リスクリワード1.2」という同一成績のEAを題材に、リスク設定だけを変えたときの破産確率を、数式とモンテカルロシミュレーション(10万パス)で計算しました。

先に結論

  • 勝率50%・リスクリワード1.2のEAで、1,000トレード以内に資金が半分になる確率は、1トレードのリスクが2%なら0.6%、5%なら19%、10%なら59%だった(モンテカルロ10万パス)。
  • EAのロジックが同じでも、ロットを5倍にすると破産確率は約100倍になる。破産確率はロットに対して指数関数的に悪化する。
  • 期待値がプラスマイナスゼロ(勝率50%・リスクリワード1.0)の場合、リスク2%でも1,000トレードで37%の確率で資金半減。「期待値ゼロならヨコヨコ」にはならない。
  • ケリー基準の最適値(この条件では8.3%)どおりに張っても、資金半減の確率は44%。理論上の最速成長と、精神的に耐えられるかは別問題。

破産確率とは何か|この記事の計算モデルと前提

破産確率(Risk of Ruin)は「決めた資金水準を割り込むまで負けが込む確率」です。古典的にはナウザー・バルサラ(Nauzer J. Balsara)が『Money Management Strategies for Futures Traders』(1992年、John Wiley & Sons)で体系化した考え方で、日本では「バルサラの破産確率表」として知られています。

本記事では、バルサラの表をそのまま引き写すのではなく、次のモデルを定義して自分で計算し直しました。

  • 資金管理方式:固定フラクショナル。毎回「その時点の資金の f %」を損切り幅に割り当てる(負ければ資金が f %減り、勝てば リスクリワード比 × f %増える)
  • EAの成績仮定:勝率 p、リスクリワード比(平均利益÷平均損失)b は一定。各トレードは独立
  • 破産の定義:資金が初期資金の50%を割った時点で「破産」とみなす(参考値として20%割れ=資金8割喪失も併記)
  • 期間:1,000トレード(1日1〜2回のEAなら2〜3年分に相当)
  • 試行回数:各条件につき10万パス(numpy、乱数シード固定)
  • 環境:Python 3 + numpy。スプレッド・スリッページ・複数ポジションは考慮しない

「口座残高ゼロ」ではなく「資金半減」を破産と定義したのは、固定フラクショナルでは数学上ゼロにはならないことと、実際には資金が半分になった時点でEAを止める人が大半だからです。

数式で近似する|対数ランダムウォークによる解析解

固定フラクショナルの資金推移は、対数を取るとランダムウォークになります。1トレードごとの対数リターンは、勝てば ln(1 + b·f)、負ければ ln(1 − f)。この平均をμ、分散をσ²とすると、ドリフト付きブラウン運動の到達確率の公式から、資金が初期の割合 d(今回は0.5)を割る確率は近似的に

破産確率 ≒ exp( −2μ · |ln d| / σ² ) (μ>0のとき)

で見積もれます。μ≦0(対数期待値がマイナス)なら、トレードを続ける限り破産確率は100%に向かいます。この解析近似が正しいかどうかを、モンテカルロで突き合わせたのが次の結果です。

結果①:同じEAでも、ロットで破産確率はここまで変わる

勝率50%・リスクリワード1.2(1トレードの期待値はリスクの+10%)という「わずかにエッジのあるEA」で、1トレードのリスク f だけを変えた結果です。

1トレードのリスク f 1トレード期待値 資金半減の確率
(モンテカルロ)
同・解析近似 資金8割喪失の確率
(モンテカルロ)
1% +0.10% 0.00%(10万パスで0回) ほぼ0 0.00%
2% +0.20% 0.59% 0.64% 0.00%
3% +0.30% 3.98% 4.33% 0.06%
5% +0.50% 18.63% 19.97% 2.12%
8% +0.80% 44.41% 47.25% 15.69%
10% +1.00% 59.04% 63.01% 30.10%

注目すべき点が3つあります。

第一に、期待値は f に比例して増えるのに、破産確率は指数関数的に悪化すること。リスク2%→10%でトレードあたり期待値は5倍になりますが、資金半減の確率は0.59%→59.04%と約100倍です。

第二に、解析近似とモンテカルロがよく一致していること(誤差は最大でも4ポイント程度、近似のほうがやや悲観的)。手元で電卓的に見積もるなら上の式で十分実用になります。

第三に、この条件のケリー基準の最適リスクは f* = (bp − q)/b = (1.2×0.5 − 0.5)/1.2 = 8.3% ですが、その付近(8%)で張ると資金半減の確率は44%もあること。ケリー基準は「対数資産の成長率を最大化する」だけで、途中のドローダウンには何の保証もしません。ハーフケリー以下が推奨される理由が数字で確認できます。

結果②:勝率×リスクリワード別の破産確率マップ

今度はリスクを2%に固定し、EAの成績(勝率×リスクリワード比)の側を動かしました。数値は1,000トレード以内に資金が半減する確率(モンテカルロ10万パス)です。

勝率\リスクリワード 0.8 1.0 1.5 2.0
30% 100% 100% 100% 98.9%
40% 100% 100% 49.8% 0.2%
50% 99.8% 36.8% 0.0% 0.0%
60% 0.2% 0.0% 0.0% 0.0%

この表から読み取れるのは、破産確率が「ほぼ0か、ほぼ100か」に二極化することです。期待値がわずかでもマイナスの組み合わせ(勝率30%×RR2.0は期待値−0.2%)は、1,000トレードでほぼ確実に資金半減に到達します。逆に期待値が明確にプラスなら、リスク2%での破産確率は一気にほぼ0へ落ちます。

興味深いのは対角線上の「期待値ゼロ」付近です。勝率50%×RR1.0(期待値ちょうど0)で36.8%、勝率40%×RR1.5(算術期待値0)では49.8%が資金半減しました。後者のほうが悪いのは、固定フラクショナルでは算術期待値がゼロでも対数期待値はマイナスになるためです(値幅の大きい賭けほど複利では不利に働く)。バックテストで期待値ギリギリのEAを「トントンだから回しておくか」と放置すると、確率的にはコイントスより分の悪い勝負をしていることになります。

なお、ここで使っている勝率やリスクリワードはバックテストで得た数字がそのまま将来も続く前提です。その前提自体がどれだけ揺らぐかはバックテストの数字が信用できない3つの理由で検証したとおりで、実際にはこの表より悪い側に倒れると考えておくべきです。

ロットへの落とし込み|リスク%からロット数を計算する手順

「リスク2%」を実際のロット数に変換する手順は次のとおりです(MT5での運用を想定)。

  1. 1トレードの許容損失額 = 資金 × f(例:資金50万円 × 2% = 1万円)
  2. EAの損切り幅をpipsで確認(例:SL 30pips)
  3. 1ロットあたりのpips価値を確認(例:USDJPYは1ロット=10万通貨で1pips ≒ 1,000円)
  4. ロット = 許容損失額 ÷(SL幅 × pips価値)= 10,000 ÷(30 × 1,000)≒ 0.33ロット

ポイントは、ロットが先にあるのではなく、破産確率として許容できる f を先に決めて、ロットは逆算で出すという順序です。ナンピンやマーチンゲールのように1セットで複数ポジションを持つEAでは、「1トレード」を「1セットの最大同時損失」に読み替えないとこの計算は成立しません。

この計算の限界と実運用での注意

このモデルは意図的に単純化しています。実運用との主なズレは次のとおりです。

  • 勝率・リスクリワードは一定ではない。相場つきの変化でエッジ自体が消えることがある。押し目買いEAの年別バックテストでは、同じEAでも年によって成績が大きく入れ替わることを確認済み
  • トレードの独立性は近似。連敗がクラスター化する戦略(ナンピン系・トレンドフォロー系)では、実際の破産確率はこの計算より高くなる方向にズレる
  • スプレッド拡大・スリッページ・週末ギャップは未考慮。SLを置いていても想定以上の損失が出ることがあり、これも悪化方向のズレ要因
  • 1,000トレードという有限期間での確率であり、続ければ破産確率は単調に増える

つまり本記事の数字は「少なくともこれだけの確率で資金半減する」という下限側の目安として読むのが安全です。

まとめ

破産確率はEAのロジックではなくロット設定でほぼ決まり、しかもロットに対して指数関数的に悪化します。バックテストの成績が同じでも、リスク2%と10%では「2〜3年でほぼ無傷」と「6割の確率で資金半減」ほどの差になりました。EAを選ぶ時間の1割でも、fの設定に使う価値はあると考えています。

検証に使ったモンテカルロのコア部分は以下です(Python 3 + numpy)。

lw = log(1 + rr*f)   # 勝ちの対数リターン
ll = log(1 - f)      # 負けの対数リターン
wins = rng.random((n_paths, 1000)) < p
cum = np.cumsum(np.where(wins, lw, ll), axis=1)
ruin = (cum.min(axis=1) <= log(0.5)).mean()

出典・参考

  • Nauzer J. Balsara『Money Management Strategies for Futures Traders』John Wiley & Sons, 1992(破産確率の枠組み)
  • 破産確率・ケリー基準の数値はすべて本記事内のモデルで筆者が計算

【注記】本記事の数値はすべて計算値(シミュレーション値)であり、実際の口座での実測値ではありません。また、過去の成績や計算上の確率は将来の成果を保証しません。本記事は投資助言ではなく、検証記録の公開を目的としています。

タイトルとURLをコピーしました