MT5 EAにDaily Loss Limitを実装する方法:日次損失・Equity・新規注文停止を一元管理する設計

EAの損失拡大を防ぐには、売買ロジックとは独立した日次リスク管理が必要です。本記事ではDaily Loss Limitの考え方と、Balance・Equity・実現損益を使った判定方法、新規注文停止や翌日リセットまでのMT5実装設計を解説します。

なぜEAにDaily Loss Limitが必要なのか

EAでは売買ルールが正常でも、特定の市場環境で連敗が集中すると1日で大きな損失が発生することがあります。特に高ボラティリティ、重要指標、スプレッド急拡大時には、通常のストップロスだけでは口座全体の損失を十分に制御できません。

そこで有効なのがDaily Loss Limitです。これは1日の損失が設定値へ到達した時点で、新規エントリーを停止するリスク管理機能です。売買ロジックとは独立したRisk Managerとして実装することで、複数戦略にも共通利用できます。

日次損失を何で判定するか

最初に決めるべきなのは損失の定義です。

代表的には次の3種類があります。

  • 実現損益のみ
  • Equityの減少額
  • 実現損益+含み損

実現損益だけを見る方法は単純ですが、大きな含み損を抱えていても停止しません。実運用ではEquityを基準にした方が、現在の口座リスクを反映しやすくなります。

BalanceとEquityの違い

Balanceは決済済み取引を反映した口座残高です。一方、EquityはBalanceに現在の含み損益を加えた値です。

例えば朝のEquityが100万円で、現在95万円なら、日次損失は5万円と計算できます。

Daily Loss Rateは次のように考えられます。

日次損失率 = (開始時Equity − 現在Equity)÷ 開始時Equity

上限を3%と設定した場合、97万円を下回った時点で新規取引を停止します。

開始時Equityを保存する

EA起動時のEquityをそのまま日次基準にすると、EAを再起動するたびに損失計算がリセットされる問題があります。

そのため、日付が変わったタイミングでその日の基準Equityを保存する設計が必要です。

保存方法としては、

  • Global Variable
  • ファイル
  • EA内部の永続化データ

などが考えられます。

VPS再起動やMT5再起動後も同じ基準値を復元できる構造が重要です。

新規注文だけを停止するか

Daily Loss Limitへ到達した場合、既存ポジションをどう扱うかも事前に決めます。

代表的な設計は次の3つです。

1. 新規注文のみ停止

2. Pending Orderもキャンセル

3. 全ポジションを強制決済

最も穏当なのは新規注文停止です。既存ポジションは通常のStop LossやExit Logicへ任せます。

一方、絶対的な損失上限を設けたい場合は、一定水準を超えた時点ですべてのポジションを閉じるHard Stopも有効です。

Pending Orderも忘れずに管理する

新規注文フラグを停止しても、既に配置されたBuy StopやSell Stopが残っていると、その後に約定する可能性があります。

Daily Loss Limit発動時には、

  • 新規Market Order禁止
  • Limit Order禁止
  • Stop Order禁止
  • 既存Pending Order削除

までまとめて制御する方が安全です。

MQL5での基本的な処理フロー

実装は次のように分離すると保守しやすくなります。

1. 日付変更を検出

2. Daily Start Equityを保存

3. 現在Equityを取得

4. 日次損失率を計算

5. 上限到達ならTradingEnabledをfalseにする

6. Pending Orderを削除

7. 新規発注前にTradingEnabledを確認

売買シグナル生成とは別モジュールで管理することで、戦略変更後も同じリスク制御を利用できます。

日次利益後の損失も考慮する

開始Equityだけを基準にすると、一度大きく利益が出た後、その利益をすべて失ってもDaily Loss Limitへ到達しない場合があります。

より厳格な設計ではHigh Water Markを利用します。

例えば朝100万円から105万円まで増加した後、101万円まで減少した場合、開始時からはプラスですが、高値からは約3.8%下落しています。

このため、

  • Start Equity Loss Limit
  • Intraday Peak Drawdown Limit

を併用すると、利益を守る仕組みも構築できます。

複数EA運用では口座全体で管理する

複数EAが同じ口座で動いている場合、各EAが独立してDaily Loss Limitを持つだけでは不十分です。

EA Aが2%、EA Bが2%損失すれば、口座全体では4%の損失になるためです。

実運用では、Magic Number単位の戦略損失上限と、Account Equityベースの口座全体上限を二層で管理する方法が有効です。

まとめ

Daily Loss Limitは、EAの売買ロジックとは独立して口座全体の損失拡大を防ぐ重要なリスク管理機能です。

実装では、BalanceではなくEquityを含めて損失を評価し、日次基準値の永続化、新規注文停止、Pending Order削除、翌日リセットまで一貫して設計する必要があります。

さらにHigh Water Mark、Magic Number別制限、口座全体のHard Stopを組み合わせることで、単一EAだけでなく複数戦略を運用する環境でも再利用可能なRisk Managerを構築できます。

ABOUTこの記事をかいた人

当サイトは、システムトレードに関する専門的な知識、技術、経験を皆様と共有することで、真剣なトレーダーの方々にインスピレーション(アイデアの源泉)の供給をいたします。トレーダーの競争力強化に焦点をあて、トレーディングシステムの構築を目的としてその普及に貢献します。 詳細は「概要とサービス内容」をご覧下さい。 ご要望はこちらで承ります。