FXのドローダウン(DD)とは?EA運用における最大許容範囲の設定方法と停止判断フレームワーク
最終更新: 2026年6月29日
Photo by Maxim Hopman on Unsplash
[AEO直接回答] Q: FX EA運用での最大ドローダウン(MDD)の許容範囲はどう設定すべきか? A: バックテストMDDの1.5〜2.0倍を許容上限の基準とするのが一般的。スキャルピングEAは5〜10%、デイトレードEAは10〜20%、スイングEAは20〜30%が目安。モンテカルロシミュレーション(2,000〜10,000回試行)で99パーセンタイルのDDを確認した上で設定するのが最も堅牢な方法だ。
FXのドローダウン(DD)とは、資産(残高または口座資産)が過去の最高値からどれだけ下落したかを示す指標だ。 EA(自動売買)の運用で最も重要な判断のひとつが「いつEAを止めるか」だ。含み損が膨らんでいるとき、「もう少し待てば戻るのか」それとも「今すぐ停止すべきなのか」を感情でなく数字で判断できるかどうかが、長期的な資産保全に直結する。
MDD(Maximum Drawdown)の計算方法から、戦略タイプ別の許容幅の設定、MQL5による自動停止の組み込み、そして「EAが壊れた」かどうかを統計的に見極めるフレームワークまで——私がEA設計で実際に用いている手順をそのまま示す。モンテカルロシミュレーションとの組み合わせは、大半のDD解説記事では触れられていない部分だ。
最大ドローダウン(MDD)の定義と計算方法
直接回答: 最大ドローダウン(MDD)とは、EA運用期間中の口座資産がピークを記録した時点から最安値に至るまでの下落率(%)を指す。バックテストレポートの「最大残高ドローダウン%」がこれに相当し、EA設計の堅牢性を測る最重要指標だ。
2種類のドローダウンを混同しない
「ドローダウン」という語は文脈によって意味が異なる。整理しておく。
**絶対ドローダウン(Absolute Drawdown)**とは、初期入金額から現在の最安値までの下落幅を示す。入金額100万円に対して残高が87万円まで落ちた場合、絶対DDは13万円(13%)だ。
**相対ドローダウン(Relative Drawdown)**は、運用期間中に到達した最高残高を起点として、その後の最安値との差を%で表す。入金100万円→最高140万円→最安112万円と推移した場合、相対DDは(140-112)/140×100=20%となる。
MT4/MT5ストラテジーテスターのレポートでは両方が並記されている。EA評価において「MDD」と呼ぶ場合、一般に相対ドローダウンを指すことが多い。これは「最も好調だった時点からどれだけ失ったか」を示す指標であり、戦略の頑健性(ロバストネス)を評価する上でより重要な数値だ。
MT4/MT5でのMDD確認場所
ストラテジーテスターを実行後、「レポート」タブを開くと 最大残高ドローダウン(Maximal Balance Drawdown)と 最大残高ドローダウン %(Maximal Balance Drawdown %)が表示される。バックテスト結果をXMLまたはHTMLでエクスポートすれば、外部ツールでの再集計も容易だ。
リアルタイム監視にはmyfxbookの活用が実践的だ。口座をmyfxbookに接続すると、Drawdownグラフでピーク→谷の推移がリアルタイムで可視化される。アラート機能を設定すれば、DDが指定%を超えた時点でメール通知を受け取れる。
許容ドローダウンをどう決めるか
Photo by Sasun Bughdaryan on Unsplash
「資金の何%を失ったら停止するか」——この問いに事前に答えておくことが、EA運用における最重要事項だ。感情が入り込む余地を先に潰しておく行為でもある。
バックテストMDDの1.5〜2倍を基準にする
実務で広く使われているのが「リアル運用でのDD許容上限をバックテストMDDの1.5〜2倍に設定する」というルールだ。バックテストMDDが15%のEAであれば、リアルDDの許容上限は22.5〜30%に設定する。
なぜ2倍まで見るのか。直感的には「バックテストと同じ結果が出るはず」と思いたくなるが、数理的にはスリッページ・スプレッド変動・流動性の低下・過去データへのオーバーフィッティングといった現実要因がリアル運用でのDD拡大を不可避にする。
さらに重要な数字がある。BacktestBaseの調査によると、バックテストMDD23.23%のEAをモンテカルロシミュレーション(2,000〜10,000回の試行が推奨される)にかけた場合、モンテカルロが推計するMax Drawdownは85.19%(バックテスト値の約3.67倍)に達しうるというデータがある(出典:BacktestBase - Monte Carlo Stress Testing)。
この数字は衝撃的だ。
バックテストで20%程度に見えていたMDDが、現実の確率分布を考慮すると中央ケースでも数倍に膨らみうることを意味する。したがって「バックテストMDDの1.5倍程度なら安全」という認識は楽観的すぎる可能性がある。少なくとも1.5〜2倍の許容範囲は、モンテカルロシミュレーションで99パーセンタイルのDDをシミュレートした上で設定するのが本来正しい。
リカバリーファクターとの関係
リカバリーファクター(RF)はEAの「自己修復力」を示す指標だ。
RF = 純利益 / 最大ドローダウン(金額)
RFが1.5未満のEAは、DD発生時に回復するまでの時間が長くなる傾向がある。RFが3以上のEAは、DD局面からの復帰が比較的早いとみなされる。ただし、これもバックテスト上の数値であり、リアル運用での保証にはならない。
心理的許容限度と資金管理上の許容限度を一致させる
MDD許容上限を決める際、私は二つの限度を別々に計算して低い方を採用することにしている。
- 資金管理上の許容限度: 損失の非対称性から逆算して「ここ以上の損失は回収不可能と判断するライン」
- 心理的許容限度: 実際にその数字が画面に表示されたとき、冷静にEAを動かし続けられる最大の損失%
「30%まで許容できる」と事前に言っていたトレーダーが、実際に20%のDDに直面すると感情的になって不合理な操作をする——正直、これは珍しいことではない。どちらの限度を実際に運用するか、自己評価は甘く見積もらずに決めるべきだ。
免責: ここで示した数値はあくまで参考目安であり、実際の運用結果を保証するものではありません。FX取引は元本割れリスクを伴います。
戦略タイプ別の合理的なMDD許容範囲
戦略の性質によって「同じ%のDD」が意味するリスクの重さは大きく異なる。
スキャルピングEA:MDD許容上限5〜10%程度
1回の取引で狙う利益が小さく(数pips〜十数pips)、トレード頻度が高い戦略だ。バックテストMDDが大きければロジック設計の問題を疑うべきで、リアルDD許容上限は5〜10%程度に設定するのが現実的だ。許容上限を超えた時点でスプレッド環境の悪化・約定遅延が原因であることが多く、ブローカー環境の見直しも並行して行う。
デイトレードEA:MDD許容上限10〜20%程度
数時間〜日中に完結するポジションを扱う戦略。スキャルピングより1取引あたりの利益が大きいため、DD振れ幅も自然に広くなる。10〜20%程度を許容範囲の上限と設定し、バックテストMDDとの乖離を定期的に確認する。
スイングトレードEA:MDD許容上限20〜30%程度
数日〜数週間ポジションを保有する戦略。週またぎのギャップリスクを内包するため、DDが一時的に大きく膨らむことがある。20〜30%の許容範囲でもバックテストに基づく設計であれば合理的な範囲内だ。
ナンピン・マーチンゲール系EA:上限設定が極めて困難
これは別格の警告が必要だ。
ナンピン・マーチンゲール戦略は、損失ポジションに追加エントリーしてコストを平均化する手法だ。通常のEAとは異なり、相場が一方向に動き続けた場合の最大損失が理論上無限大になりうる。バックテストでのMDDが小さく見えるのは、過去データに「都合よく反転する相場」が多かったに過ぎない。
金融先物取引業協会(FFAJ)の公表データによると、2026年5月の店頭FX出来高は8,239,575億円に達するほど流動性の高い市場だが(出典:FFAJ 店頭FX月次速報)、それは一方向のトレンドが長期間継続するリスクも同時に内包する。2015年のスイスフランショック、2022年の円安トレンドなどの極端な相場では、ナンピン系EAが短期間で壊滅的なDDを記録した事例が多数報告されている。
ナンピン・マーチンゲール系EAを使うなら、追加エントリー回数の上限と最大ロットサイズを必ずコード上で制限すること。許容DDはスキャルピングEAと同等の5〜10%程度まで絞るべきで、この基準を緩めることは私は勧めない。
免責: ナンピン・マーチンゲール系EAは短期間で大きな損失が発生するリスクが高く、元本の大部分を失う可能性があります。FX取引の元本割れリスクを十分に理解した上で運用してください。
ドローダウン管理の自動化(MQL5実装)
Photo by Ilya Pavlov on Unsplash
感情を排除して機械的にEAを止めるには、停止判断をコードに委ねるのが一番確実だ。以下のMQL5実装は、実際に稼働させているものをベースにしている。
基本的なDD監視関数
まず、口座のリアルタイムDDを計算するユーティリティ関数だ。「口座残高(Balance)」ではなく「口座資産(Equity)」を使うことで、未決済ポジションの含み損益を含むDDを正確に計算できる。
//+------------------------------------------------------------------+
//| ドローダウン計算・停止判定関数 |
//+------------------------------------------------------------------+
double g_peakEquity = 0; // 過去最高資産(グローバル変数)
double GetCurrentDrawdownPct()
{
double currentEquity = AccountInfoDouble(ACCOUNT_EQUITY);
// ピーク更新
if(currentEquity > g_peakEquity)
g_peakEquity = currentEquity;
// ピークがゼロの場合(初回起動時)はDDなし
if(g_peakEquity <= 0)
return 0.0;
// 相対ドローダウン%を計算
double ddPct = (g_peakEquity - currentEquity) / g_peakEquity * 100.0;
return MathMax(ddPct, 0.0); // 負の値は0として返す
}
bool CheckDrawdown(double maxDDPct)
{
double currentDD = GetCurrentDrawdownPct();
if(currentDD >= maxDDPct)
{
// 全ポジション強制決済
CloseAllPositions();
// アラートメール送信
string subject = StringFormat("[EA停止] DDが許容上限を超過: %.2f%%", currentDD);
string message = StringFormat(
"EA: %s\n口座: %d\n現在DD: %.2f%%\n許容上限: %.2f%%\n時刻: %s",
MQLInfoString(MQL_PROGRAM_NAME),
(int)AccountInfoInteger(ACCOUNT_LOGIN),
currentDD,
maxDDPct,
TimeToString(TimeCurrent(), TIME_DATE|TIME_MINUTES)
);
SendMail(subject, message);
Print("【EA停止】DD許容上限超過: ", currentDD, "% / 上限: ", maxDDPct, "%");
return true; // 停止フラグ
}
return false;
}
void CloseAllPositions()
{
for(int i = PositionsTotal() - 1; i >= 0; i--)
{
ulong ticket = PositionGetTicket(i);
if(ticket > 0)
{
MqlTradeRequest request = {};
MqlTradeResult result = {};
request.action = TRADE_ACTION_DEAL;
request.position = ticket;
request.symbol = PositionGetString(POSITION_SYMBOL);
request.volume = PositionGetDouble(POSITION_VOLUME);
request.type = (PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY)
? ORDER_TYPE_SELL : ORDER_TYPE_BUY;
request.price = (request.type == ORDER_TYPE_SELL)
? SymbolInfoDouble(request.symbol, SYMBOL_BID)
: SymbolInfoDouble(request.symbol, SYMBOL_ASK);
request.deviation = 20;
OrderSend(request, result);
}
}
}
段階的DD制御パターン
単純な「超えたら全停止」より実用的なのが、DDレベルに応じて段階的に制御を変える実装だ。
//+------------------------------------------------------------------+
//| 段階的ドローダウン制御 |
//| DD < 警告ライン : 通常運用 |
//| DD >= 警告ライン : 新規エントリー停止(ポジションは保持) |
//| DD >= 停止ライン : 全ポジション強制決済・EA停止 |
//+------------------------------------------------------------------+
input double InpWarningDDPct = 15.0; // 警告ライン(%)
input double InpStopDDPct = 25.0; // 強制停止ライン(%)
bool g_newEntryAllowed = true; // 新規エントリー許可フラグ
bool g_eaStopped = false; // EA停止フラグ
void OnTick()
{
// EA停止済みなら何もしない
if(g_eaStopped) return;
double currentDD = GetCurrentDrawdownPct();
// 強制停止ライン超過
if(currentDD >= InpStopDDPct)
{
CloseAllPositions();
g_eaStopped = true;
string msg = StringFormat("[緊急] DD %.2f%% → 強制停止ライン(%.2f%%)超過。全ポジション決済。",
currentDD, InpStopDDPct);
SendMail("[EA緊急停止]", msg);
Alert(msg);
return;
}
// 警告ライン超過(新規エントリー停止)
if(currentDD >= InpWarningDDPct && g_newEntryAllowed)
{
g_newEntryAllowed = false;
string msg = StringFormat("[警告] DD %.2f%% → 警告ライン(%.2f%%)超過。新規エントリー停止。",
currentDD, InpWarningDDPct);
SendMail("[EA警告]", msg);
Print(msg);
}
// DDが警告ライン以下に回復した場合、エントリー再開
if(currentDD < InpWarningDDPct * 0.8 && !g_newEntryAllowed)
{
g_newEntryAllowed = true;
Print("[回復] DDが ", currentDD, "% に改善。新規エントリー再開。");
}
// 通常の売買ロジックへ
if(g_newEntryAllowed)
{
// ここにエントリーロジックを実装する
}
}
このパターンのポイントは二段構えの設計だ。警告ラインでは「新規エントリーをブロックするだけ」で既存ポジションは継続させる。これにより、一時的な相場変動による過剰反応を防ぎながら、本当に危険な水準になった時だけ全停止を実行できる。
OnTick()内でDD計算を毎Tick実行するとパフォーマンスに影響が出る。実運用ではTimeCurrent() % 60 == 0で毎分1回程度に間引くのが現実的だ。
ドローダウン局面での判断フレームワーク
Photo by Kaleidico on Unsplash
コードによる自動停止を実装した上で、人間が行う定性判断のフレームワークも必要だ。
「一時的な相場変動」と「EAが壊れた」の見分け方
これが最も難しい問いだ。DDが拡大しているとき、それが「戦略の想定誤差範囲内」なのか「ロジックが通用しない相場環境に入った」なのかを判断する必要がある。
統計的には2σ(標準偏差の2倍)を閾値として使う方法がある。バックテストから月次リターンの標準偏差σを計算し、現在の損失が期待値 - 2σを下回っている月が続いているなら、「通常の分布から外れた何かが起きている」と判断できる。
3ヶ月以上のフォワードテスト期間を経ていない段階でのDD判断は、サンプルサイズ不足から誤判断を招きやすい。私の見立てでは最低3ヶ月、できれば6ヶ月以上のフォワードデータが揃ってから動くのが正解だ。
ドローダウン深度別の対応アクション
| DDの深度(バックテストMDDとの比較) | 状態評価 | 推奨アクション |
|---|---|---|
| バックテストMDD未満 | 正常範囲 | 監視継続、変更なし |
| バックテストMDDの1.0〜1.5倍 | 要注意 | ロット縮小、相場環境の確認 |
| バックテストMDDの1.5〜2.0倍 | 警戒 | 新規エントリー停止、原因分析 |
| バックテストMDDの2.0〜2.5倍 | 一時停止基準 | EA停止、パラメーター再検証 |
| バックテストMDDの2.5倍超 | 廃止検討基準 | ストラテジーの根本的見直し |
「バックテストMDDの2倍で一時停止、2.5倍超で廃止を検討」という基準を先に決めておくことが肝要だ。
ドローダウンから回復する確率の計算
損失の非対称性:EA停止判断の数学的根拠
損失と回復の非対称性は、数字にしてみると想像以上に大きい。損失率と元本回復に必要な利益率のずれを確認してほしい。
| 損失率(DD%) | 元本回復に必要な利益率 |
|---|---|
| 10% | 11.1% |
| 20% | 25.0% |
| 25% | 33.3% |
| 30% | 42.9% |
| 40% | 66.7% |
| 50% | 100.0% |
| 60% | 150.0% |
| 70% | 233.3% |
計算式は 必要回復率 = DD% ÷ (1 - DD%) × 100 だ。
30%の損失から元本を取り戻すには42.9%の利益が必要になる。
これが意味することは何か。50%のDD(残高が半分)になってしまったEAを「もう少し待てば戻る」と動かし続けるには、残った資金で100%の利益を出さなければならない。そのEAが本当にそれだけのパフォーマンスを発揮できるのかを冷静に評価する必要がある。
この非対称性を理解した上でMDD許容上限を設定することで、「なぜ20〜30%を超えたら停止すべきか」の数学的根拠が明確になる。
理論回復期間の推計
期待月次利益率と現在のDDから理論上の回復期間を推計できる。
理論回復月数 = DD金額 ÷ 月次期待利益額
バックテスト上の月次利益率3%、バランス50万円のEAが10%(5万円)のDDに入った場合、理論回復期間は 5万円 ÷ (50万円×0.03) = 3.33ヶ月 となる。ただしこれはあくまで期待値の計算だ。確率分布の全体像を見るには、モンテカルロシミュレーションで分散を確認するのが筋だ。
STEP別: EA運用ドローダウン管理の実践手順
- 事前設定: バックテストMDDを確認し、警告ライン(×1.5倍)と停止ライン(×2.0倍)を決める
- コード組み込み: 上記MQL5コードを自作EAに追加するか、既存EAのOnTick冒頭に組み込む
- myfxbook連携: リアルタイム監視のためにmyfxbookへ口座を接続する
- 月次レビュー: フォワードテストの月次リターンを記録し、2σ基準で評価する
- 停止判断: アクション表に従い、感情を入れずに機械的に判断する
免責: 本稿のコードおよび設定値例は教育目的のサンプルです。実際の運用結果を保証するものではなく、FX取引には元本割れを含む重大な損失リスクがあります。
よくある質問(FAQ)
Q: FXのドローダウン(DD)とは何ですか? A: ドローダウン(Drawdown, DD)とは、資産(残高または口座資産)が過去の最高値からどれだけ下落したかを示す指標です。FXでは、含み損を含めた資産の目減り幅を把握し、EA運用や手動トレードを継続すべきか停止すべきかを判断する重要な基準として使われます。絶対ドローダウンと相対ドローダウンの違い、具体的な計算方法は本文の「最大ドローダウン(MDD)の定義と計算方法」で詳しく解説しています。
Q: バックテストMDDが5%のEAなのに、リアルで15%のDDになりました。停止すべきですか? A: バックテストMDDの3倍は統計的には「異常値」の範囲に入りつつある水準です。まず最近の相場環境がバックテスト期間と大きく異なっていないか(金利変動・経済イベント)を確認し、異常がなければ一時停止して詳細を分析するのが先決です。
Q: ナンピンEAでのMDD許容上限はどう設定すればよいですか? A: ナンピン・マーチンゲール系EAは通常のMDD許容範囲の考え方が適用しにくい戦略です。追加エントリー上限回数と最大ポジション量を必ずコードで制限すること。その上で許容DDはスキャルピングEAと同水準の5〜10%程度まで絞るのが、私の判断では最低ラインです。
Q: EA停止後、いつ再起動を判断すべきですか? A: 「一時停止」の場合は、DDが警告ライン以下に回復かつ市場環境の分析が完了した時点が目安です。「廃止検討」水準に達した場合は、パラメーターを変えて新たにバックテスト・最適化を行い、フォワードテスト期間(最低3ヶ月)を経てから再稼働させること——焦って再起動するほど次のDDが早く来ます。
Q: CheckDrawdown関数をEAのどこに配置すればよいですか?
A: OnTick()関数の冒頭(他のロジックより前)に配置し、CheckDrawdown()がtrueを返したら即座にreturnで処理を抜けてください。EA停止フラグをグローバル変数で管理することで、同一セッション内での誤再起動を防げます。
Q: モンテカルロシミュレーションはどこで実施できますか? A: MT4/MT5単体では対応していませんが、Quant Analyzerや専用Webサービス(BacktestBaseなど)にバックテストの取引履歴(CSV)をインポートすることで、2,000〜10,000回のシミュレーションが実施可能です。最悪シナリオ(95〜99パーセンタイル)のDDを確認し、それを踏まえてMDD許容上限を設定する方法が最も堅牢です。
Q: リアルDD%が許容上限に近づいていますが、相場が反転しそうです。もう少し待っても大丈夫ですか? A: 「反転しそう」という予測に基づいてルールを曲げることが、EA運用における最大の失敗パターンです。自動停止ロジックを実装している場合はそれに従い、手動判断する場合は事前に決めたアクション表の通りに動くことが長期的な資産保全につながります。損失の非対称性のテーブルを確認し、「今の損失額を回復するために必要な利益率」を冷静に計算してから動くべきです。
免責事項: 本記事はFX取引・EA運用に関する教育的情報を提供することを目的としており、特定の投資判断・取引を推奨するものではありません。FX取引はレバレッジを伴うため、元本の全部を失うリスクを含む高リスクな金融商品です。掲載されているコードや数値は参考目的であり、実際の損益を保証するものではありません。EAを含む自動売買システムの運用は、ご自身の責任のもとで行ってください。投資に際しては金融商品取引業者等が提供するリスク説明書を必ずご確認ください。
著者情報: hedgrow-media quantペルソナライター|金融工学・バックテスト・MQL5設計を専門とするFXコンテンツ執筆チーム
