Daily Drawdownを基準に、残存損失枠から1回当たりの許容リスクとロットを逆算する方法を解説。含み損、手数料、連敗余力まで考慮し、プロップ口座の制約をEAへ実装するリスク管理設計を整理します。
固定リスク率だけでは口座制約を守れない理由
EAの資金管理では「1回の取引で残高の1%をリスクにする」といった固定リスク方式が広く使われる。しかしDaily Drawdownのような日次損失上限が存在する環境では、残高だけを基準にロットを決めると、連敗や複数ポジションによって日次上限へ急速に接近する可能性がある。
重要なのは、現在の残高に対する割合ではなく、その日にあとどれだけ損失を許容できるかという残存リスク枠からポジションサイズを逆算することである。
最初に残存損失枠を計算する
EAではまず、口座に設定されたDaily Loss Limitと当日の損益から残存枠を算出する。
概念的には「残存損失枠 = 日次許容損失額 − 当日確定損失 − 現在の含み損 − 予想取引コスト」と考えられる。
ここで含み損を無視すると、複数ポジション保有時に実際のリスクを過小評価しやすい。スプレッドやコミッションも、取引回数が増える戦略では無視できないため、一定のバッファとして差し引いておく方が安全側の設計になる。
残存枠を1回のトレードへ全部使わない
残存損失枠が500ドルあるからといって、次の1回で500ドルをリスクにする設計では、1回の損切りでその日の取引余力を失う。
そこで残存枠をexpected_trades_remainingやmaximum_losses_remainingで分割する。例えば残存損失枠が500ドルで、あと5回の損失まで許容したいなら、1回当たりの最大損失を100ドル以下に制限する考え方である。
さらに安全率を掛け、「許容リスク = 残存損失枠 ÷ 想定残存トレード数 × safety_factor」とすれば、突発的なスリッページや価格ギャップへの余裕を持たせられる。
ストップ距離からロットを逆算する
金額ベースの許容リスクが決まった後に、ストップロスまでの距離からロットを求める。
考え方は「ロット = 許容損失額 ÷ 1ロット当たりのストップ到達損失額」である。
MT5では銘柄ごとにTick Size、Tick Value、Contract Sizeなどが異なるため、FXと株価指数CFD、ゴールドなどで固定した換算式を共用すべきではない。SymbolInfoDoubleなどから銘柄仕様を取得し、実際の価格差に対する損益額を基準に数量を計算する方が汎用性を持たせやすい。
複数ポジションでは総リスクを見る
新規注文単体が小さくても、同方向のEURUSD、GBPUSD、EURGBPなどを同時保有すれば、実質的に同じ通貨リスクが集中する場合がある。
最低限EAでは、既存ポジションがストップへ到達した場合の想定損失額を合計し、新規ポジションを加えたportfolio_riskが残存損失枠を超えないか確認する必要がある。
さらに実運用では、通貨や指数の相関を考慮して同一方向へのポジション集中に上限を設ける方法も有効である。
損失が増えるほど自動的にサイズを縮小する
日次損失上限型のリスク管理では、損失が増えるにつれてポジションサイズを段階的に縮小する設計と相性が良い。
例えば日次損失枠の25%消化で通常サイズ、50%で0.75倍、75%で0.5倍、一定水準を超えたら新規エントリー停止とする。数値は戦略特性に応じて検証する必要があるが、残存余力が減っているのに同じリスク量を維持する構造を避けられる。
日付切り替えの定義を固定する
実装上注意したいのが「1日」の基準である。ローカル時刻、ブローカーサーバー時刻、評価ルール上の基準時刻が一致するとは限らない。
EA側ではdaily_start_equity、daily_realized_pnl、daily_floating_pnlなどを管理し、どの時刻で日次カウンターをリセットするかを明示的に設定できるようにする。評価条件が異なる環境へ展開する場合、この部分をハードコードしないことが重要になる。
まとめ
Daily Drawdownを前提とする場合、ポジションサイズは口座残高だけでなく、その時点の残存損失枠から決める必要がある。
EAでは日次許容損失、確定損益、含み損、取引コスト、既存ポジションの総リスクを集計し、そこから1回当たりの許容損失を逆算する。さらに損失枠の消化率に応じてサイズを縮小し、上限接近時には新規注文を停止することで、売買ロジックとは独立した口座レベルのリスク管理を構築できる。







