コンテンツにスキップ

ドローダウン管理

ドローダウン管理では、最大ドローダウン、連敗確率、ロット縮小、回復期間、心理的耐性、月次リスク上限を一体で設計し、USD/JPY 取引の破綻確率を下げます。 利益目標より先に、1回あたりの損失率、連敗時の縮小ルール、月次停止ラインを事前に固定します。 どこで小さくするか、どこで止めるかを先に決める設計であり、USD/JPY のデイトレ、スイング、裁量補助、システム売買の資金管理で使います。 とくに米CPI、FOMC、日銀会合、為替介入警戒局面では欠かせません。

定義

ドローダウン

ドローダウンは、資金曲線が過去最高値からどれだけ沈んだかを示します。

Ht=max0itEiH_t = \max_{0 \le i \le t} E_i DDt=HtEtHt=1EtHtDD_t = \frac{H_t - E_t}{H_t} = 1 - \frac{E_t}{H_t}

ここで EtE_t は時点 tt の有効証拠金または評価額、HtH_t は過去最高値です。 最大ドローダウンは期間中の最大値です。

MDD=maxtDDtMDD = \max_t DD_t

Goldberg and Mahmoud は最大ドローダウンを「ピークからボトムまでの最大累積損失」と定義しています。 実務では、勝率やPFよりも先に見ます。 理由は単純で、退場すると期待値は実現しないからです。

回復必要リターン

ドローダウン後に元本へ戻すための必要リターンは線形ではありません。

Rrecover=d1dR_{\text{recover}} = \frac{d}{1-d}
ドローダウン元に戻す必要リターン
5%5.26%
10%11.11%
20%25.00%
30%42.86%
50%100.00%

20% 以上のドローダウンは、心理面ではなく数学的に重いものです。 USD/JPY で「数回の大きな損切りを取り返すためにロットを上げる」行為は、回復必要リターンをさらに悪化させます。

USD/JPY での前提

BIS の 2025 年調査では、OTC FX 市場の1日平均売買高は 9.6 兆ドルです。 USD/JPY は 2025 年 4 月に 1日平均 1.372 兆ドル、全体の 14.3% を占める主要通貨ペアです。 流動性は高いですが、流動性が高いことは低リスクを意味しません。

USD/JPY の主なリスク源は次の通りです。

  • 米金利イベント: CPI、雇用統計、FOMC、米国債入札で値幅が広がる
  • 日本側イベント: 日銀会合、総裁会見、賃金や物価関連報道で円主導の急変が起きる
  • 介入警戒: 水準そのものよりも、急速な円安、円高に対する当局発言で流動性が薄くなる
  • 時間帯: 東京仲値、ロンドン入り、NY指標、NYカットでボラティリティ構造が変わる
  • 週跨ぎ: 地政学、政策報道、ギャップで逆指値が滑る

したがって USD/JPY のロットは「普段のスプレッド」ではなく、「滑った場合の損失」と「月次停止ライン」から決めます。

1回あたりのリスク

1回の損失率を rr とします。 固定比率でリスクを取る場合、kk 連敗後の資金残高は次の通りです。

Ek=E0(1r)kE_k = E_0(1-r)^k

連敗によるドローダウンは次の通りです。

DDk=1(1r)kDD_k = 1 - (1-r)^k
1回リスク5連敗10連敗15連敗
0.25%1.24%2.47%3.68%
0.50%2.48%4.89%7.24%
1.00%4.90%9.56%13.99%
2.00%9.61%18.29%26.14%

実務上の基準は次で十分です。

  • 通常運用: 1回リスクは 0.25% から 0.75%
  • 高信頼セットアップ: 上限は 1.00%
  • 指標前後、介入警戒、週跨ぎ: 0.25% 以下、または見送り
  • 月次損失が進行中: 通常ロットへ戻さない

1回あたりの損失額とロットの関係は ポジションサイズ計算ツール で確認できます。

USD/JPY のロット計算

JPY建て口座で USD/JPY を取引する場合、1 pip は通常 0.01 円です。 通貨数量 UU に対する 1 pip の損益は概算で次の通りです。

pipValueJPY=U×0.01\text{pipValueJPY} = U \times 0.01

許容損失を riskJPY\text{riskJPY}、損切り幅を stopPips\text{stopPips} とすると、数量は次で決まります。

U=riskJPYstopPips×0.01U = \frac{\text{riskJPY}}{\text{stopPips} \times 0.01}

例として、資金 1,000,000 円、1回リスク 0.5%、損切り 35 pips を考えます。

riskJPY=1,000,000×0.005=5,000\text{riskJPY} = 1{,}000{,}000 \times 0.005 = 5{,}000 U=5,00035×0.0114,285U = \frac{5{,}000}{35 \times 0.01} \approx 14{,}285

この場合は 1.4 万通貨程度が上限です。 10万通貨で入ると、同じ 35 pips の損切りで約 35,000 円、資金比 3.5% の損失になります。 これは資金管理ではなく、値ごろ感の賭けです。

USD建て口座の場合、USD/JPY の pip 価値は概算で次の通りです。

pipValueUSD=U×0.01S\text{pipValueUSD} = \frac{U \times 0.01}{S}

ここで SS は USD/JPY レートです。 損切り幅とロットからの損失額は、損切りの設計とあわせて先に固定します。

連敗確率

勝率を pp、負け率を q=1pq = 1 - p とします。

次の kk 回がすべて負ける確率は単純に次になります。

P(k losses in next k trades)=qkP(\text{k losses in next k trades}) = q^k

ただしこれは「任意の N 回の中で k 連敗が一度でも出る確率」ではありません。 後者はかなり高くなります。

近似として、重なりを無視すれば次を使えます。

P(at least one k-loss streak in N trades)1(1qk)Nk+1P(\text{at least one k-loss streak in N trades}) \approx 1 - (1 - q^k)^{N-k+1}

この近似は厳密ではありません。 連敗区間が重なるため、正確に見るなら動的計画法で計算します。

目安

勝率 50%、100 トレード中に 5 連敗以上が一度でも出る確率は高いものです。 5連敗を「異常」と扱う戦略は、最初から運用に耐えません。

勝率負け率次の5回が全敗次の10回が全敗
40%60%7.78%0.60%
50%50%3.13%0.10%
55%45%1.85%0.03%
60%40%1.02%0.01%

「次の10回が全敗」は低く見えます。 しかし、200回の取引履歴のどこかで 8連敗、9連敗が出る確率は無視できません。 裁量トレードで勝率を過大評価すると、ここを必ず見誤ります。

連敗時のロット縮小ルール

連敗時にロットを増やしてはいけません。 ナンピン、マーチンゲール、倍掛けは、回復ではなく破綻速度の加速です。

基本ルールは次の通りです。

状態取引可否1回リスク
通常r0r_0
2連敗0.5r00.5\,r_0
3連敗条件付き0.25r00.25\,r_0
4連敗原則停止0
月次 -3%縮小運用0.25r00.25\,r_0
月次 -5%停止0
資金最高値更新通常復帰r0r_0

復帰条件は「1勝したら戻す」では弱いものです。 次のいずれかを満たすまで縮小を継続します。

  • 資金曲線が直近高値を更新した
  • 連敗後の損失の 50% 以上を通常リスク以下で回復した
  • 20 トレード以上の検証で期待値が崩れていない
  • 主要イベント週が終わり、スプレッドと滑りが通常化した

月次リスク上限

月次リスク上限は、戦略の良し悪しではなく、運用者の生存ラインとして決めます。

推奨設計は次の通りです。

月次損益状態ルール
0% から -2%通常予定通り運用
-2% から -3%警戒新規ロットを半分にする
-3% から -5%防御A級セットアップのみ、1回リスク 0.25% 以下
-5% 到達停止月末まで実弾停止、検証のみ
-7% 到達破綻扱い戦略、執行、心理ログを全面レビュー

月次上限は「守れたらよい」ではなく、発注システムまたはチェックリストに組み込みます。 裁量で解除できる停止ルールは停止ルールではありません。

資金曲線と回復期間

資金曲線は損益グラフではなく、運用継続可否の計器です。 見るべき項目は次の通りです。

  • MDD: 最大の深さ
  • DD duration: 高値更新までの日数またはトレード数
  • Ulcer Index: ドローダウンの深さと長さを同時に見る補助指標
  • Recovery factor: 純利益を MDD で割る
  • Equity slope: 右肩上がりでも急すぎる場合は過剰リスクを疑う

回復期間は次で測ります。

Trecovery=tnew hightpeakT_{\text{recovery}} = t_{\text{new high}} - t_{\text{peak}}

ドローダウンが浅くても、回復に長くかかる戦略は心理的に壊れやすいものです。 USD/JPY のレンジ相場でトレンドフォローを続けると、浅い損切りが長く続き、資金曲線が横ばいから下向きになります。 この期間にロットを上げると、トレンド再開前に停止ラインへ到達します。

心理的耐性の設計

心理的耐性は気合いではなく、数値で設計します。

まず、次を事前に書き出します。

  • 許容できる最大月次損失
  • 許容できる最大連敗数
  • 連敗時に見送る条件
  • 取引を再開する条件
  • 損失後に禁止する行動

次に、実際の耐性は半分で見積もります。 バックテスト上の MDD が 12% なら、実運用では 18% から 24% を想定します。 スプレッド、滑り、約定遅延、裁量ミス、指標回避漏れが加わるためです。

CFTC は FX について「変動が大きく相当なリスクがある」と警告しています。 さらに、失って困る資金を入れるなとも明記しています。 この警告は詐欺対策だけでなく、通常のレバレッジ取引にもそのまま当てはまります。

ルール例

保守型

  • 1回リスク: 0.25%
  • 月次警戒: -2%
  • 月次停止: -4%
  • 3連敗: ロット半分
  • 4連敗: 当日停止
  • 重要指標: 30分前から30分後まで新規禁止

標準型

  • 1回リスク: 0.50%
  • 月次警戒: -3%
  • 月次停止: -5%
  • 2連敗: ロット半分
  • 3連敗: A級のみ
  • 4連敗: 48時間停止

攻撃型

  • 1回リスク: 1.00%
  • 月次警戒: -4%
  • 月次停止: -7%
  • 2連敗: ロット半分
  • 3連敗: 0.25%へ縮小
  • 5連敗: 月内停止

攻撃型は推奨しません。 十分な検証、低い執行ミス、明確な優位性、停止ルールの自動化がある場合だけ使います。

落とし穴

  • 勝率からロットを決める: 勝率 60% でも連敗は起きる。ロットは MDD と月次停止ラインから逆算する。
  • 5連敗を異常扱いする: 5連敗は普通に起きる。5連敗で崩れるルールは実運用に向かない。
  • 損切り幅を狭めてロットを増やす: USD/JPY は指標時に滑る。形式上の損切り幅だけで数量を増やすと実損が跳ねる。
  • 含み損をドローダウンから除外する: 有効証拠金ベースで見る。確定損益だけを見ると危険を遅れて認識する。
  • 月次停止を裁量で解除する: 停止ライン到達後の「今回は例外」が最大損失を作る。
  • 回復のためにロットを上げる: 必要リターンが増えた状態でリスクを増やすため、破綻確率が上がる。
  • バックテストの MDD をそのまま信じる: 実運用では滑り、スプレッド、未約定、心理ミスが加わる。
  • USD/JPY の流動性を安全性と誤解する: 流動性が高い通貨ペアでも、イベント時の値幅と滑りは別問題。

Python 実装スケッチ

from __future__ import annotations
import numpy as np
import pandas as pd
def drawdown(equity: pd.Series) -> pd.DataFrame:
peak = equity.cummax()
dd = 1.0 - equity / peak
return pd.DataFrame({
"equity": equity,
"peak": peak,
"drawdown": dd,
"max_drawdown_to_date": dd.cummax(),
})
def max_drawdown(equity: pd.Series) -> float:
return float((1.0 - equity / equity.cummax()).max())
def recovery_return(drawdown_rate: float) -> float:
if not 0 <= drawdown_rate < 1:
raise ValueError("drawdown_rate must be in [0, 1).")
return drawdown_rate / (1.0 - drawdown_rate)
def loss_streak_drawdown(risk_per_trade: float, losses: int) -> float:
return 1.0 - (1.0 - risk_per_trade) ** losses
def usdjpy_units_jpy_account(
equity_jpy: float,
risk_rate: float,
stop_pips: float,
pip_size: float = 0.01,
) -> float:
risk_jpy = equity_jpy * risk_rate
return risk_jpy / (stop_pips * pip_size)
def probability_next_k_losses(win_rate: float, k: int) -> float:
q = 1.0 - win_rate
return q ** k
def probability_at_least_one_loss_streak_exact(
win_rate: float,
trades: int,
streak: int,
) -> float:
"""
Exact DP for Bernoulli trials.
State j means current consecutive losses length is j, where j < streak.
Once j reaches streak, the path is excluded from 'no streak' probability.
"""
q = 1.0 - win_rate
p = win_rate
states = np.zeros(streak)
states[0] = 1.0
for _ in range(trades):
nxt = np.zeros(streak)
# Win resets loss streak to zero.
nxt[0] += states.sum() * p
# Loss moves j -> j + 1, unless that would hit the forbidden streak.
for j in range(streak - 1):
nxt[j + 1] += states[j] * q
states = nxt
probability_no_streak = states.sum()
return 1.0 - probability_no_streak
def apply_lot_reduction(base_risk: float, consecutive_losses: int, monthly_pnl_rate: float) -> float:
if monthly_pnl_rate <= -0.05:
return 0.0
if monthly_pnl_rate <= -0.03:
return min(base_risk * 0.25, 0.0025)
if consecutive_losses >= 4:
return 0.0
if consecutive_losses == 3:
return base_risk * 0.25
if consecutive_losses == 2:
return base_risk * 0.5
return base_risk

検証手順

  1. 取引履歴から有効証拠金ベースの equity を作る。
  2. max_drawdown(equity) で過去最大ドローダウンを出す。
  3. 勝率ではなく、平均損失、最大損失、連敗数、DD duration を見る。
  4. probability_at_least_one_loss_streak_exact() で、100回、200回、500回の連敗発生確率を確認する。
  5. 月次 -3%、-5% の停止ルールを過去履歴に当て、MDD と利益がどう変わるか比較する。
  6. USD/JPY の指標時、週跨ぎ、急変時を別タグにして、通常時と分けて検証する。
  7. バックテストの MDD に 1.5 倍から 2.0 倍の安全係数を掛ける。
  8. その数値に心理的に耐えられないなら、ロットを下げる。

参考