【MQL5】資金管理を自動化!許容リスク%からエントリーロット数を自動計算する書き方

MQL5 開発講座

こんにちは、潤奈です( ゚Д゚)!

前回の記事では、急激な値動きから大切な資金を守るための「ストップロス(SL)」と「テイクプロフィット(TP)」の自動設定方法を解説しました。
安全にトレードをする準備が整ったら、次に実装したいのが「自動でのロット数(取引数量)計算ロジック」です!

EA開発を始めた最初のうちは、まずは分かりやすく「ロット数を0.1ロットで固定」したコードから作ることが多いと思います。しかし、固定ロットのままだと口座資金が増減した際のリスク管理が難しくなりますし、複利(資金の増加に合わせてロットを増やす)の恩恵も得られません。

今回は、設定した「許容リスク%」と「損切り幅」から、自動的に最適な取引ロット数を算出する安全で実践的な資金管理ロジックの書き方を分かりやすく解説します!


1. なぜロット数の自動計算(資金管理)が必要なのか?

自動売買において、ロット数を固定(例: 常に0.1ロット)して運用することには、以下のようなリスクがあります。

  • 損切り幅によって損失額がバラバラになる
    損切り幅が10pipsの時と50pipsの時で同じ0.1ロットでエントリーすると、負けた時の損失額が5倍も変わってしまいます。
  • 資金効率が悪くなる
    口座資金が10万円の時と100万円の時で同じ0.1ロットのままだと、資金が増えても利益の伸びが鈍くなってしまいます。

これを解決するのが、「1回の負けで失う金額を、口座残高の○%(例: 2%)に抑える」という資金管理方法(2%ルールなど)です。
これをEAに組み込むことで、損切り幅が広くても狭くても、また口座資金がいくらであっても、負けたときのダメージを常に一定に保つことができます。


2. ロット数を求めるための計算式

MQL5でロット数を自動計算するには、以下の数式を使用します。

取引ロット数 = 許容損失額 ÷ ( 損切り幅[ポイント換算] × 1ポイントあたりの価格価値 )

MQL5では、この計算に必要な情報を以下の関数を使って動的に取得します。

① 許容損失額の計算

まずは、現在の口座残高から1トレードで失ってよい最大金額を計算します。

② 損切り幅をポイントに変換

設定したpips単位の損切り幅を、プログラムが処理できる「ポイント数」に変換します。
この時、「pipsをポイントに換算する倍率は通貨ペアやブローカーによって変わるのか?」という疑問が湧くかもしれません。

結論として、現在主流の「3桁(クロス円)・5桁(ドルストレート)表示」のブローカーでは 1pips=10ポイント ですが、一部の特殊な「2桁・4桁表示」のブローカーでは 1pips=1ポイント になります。また、ゴールド(GOLD)や仮想通貨(BTC)などの銘柄では単位が大きく異なります。

そのため、以下のように小数点桁数(_Digits)に応じて動的に倍率(10倍または1倍)を自動判定・調整する処理を入れておくのが、バグを防ぐための最も安全な書き方です。

[!WARNING]
ゴールドやCFDなどの特殊銘柄での注意点
この pipAdjust の自動調整(3桁・5桁を10倍にする処理)は、一般的なFXの通貨ペア(クロス円やドルストレート)を想定した簡易的なものです。
ゴールド(XAUUSD:通常は小数点以下2桁または3桁表示)や、日経平均などの株価指数、ビットコイン(BTCUSD)といったCFD銘柄では、ブローカーによって小数点桁数が異なるうえに、pipsの定義自体が通貨ペアとは大きく異なります。そのため、FX以外の特殊な銘柄でEAを動かす場合は、この簡易判定では計算が狂ってしまうため、各銘柄に合わせた個別の換算処理が必要になる点に注意してください。

③ 1ポイントあたりの最小価格価値の計算

ここが少し複雑ですが、通貨ペアやブローカーの仕様が異なっても正しく計算するために、以下の情報から「1ポイント動いた時の口座通貨ベースの価値」を算出します。

これで、必要なパーツが揃いました!


3. ブローカーのルール(制限)に合わせる丸め処理

計算式で導き出されたロット数(例: 0.12345ロット)をそのまま注文に使うことはできません。ブローカーごとに「最小ロット」「最大ロット」「ロットの刻み幅(ステップ)」が厳格に決まっているためです。

そのため、必ず以下の処理を行って「注文可能なロット数」に整形(丸め処理)する必要があります。

PCの数値計算ではごくわずかな演算誤差が発生するため、本来0.10ロットになる計算が 0.099999... のように極小に下回ることがあります。これをそのまま MathFloor で切り捨てると 0.0 ロット(最小ロット未満)になってしまうため、微小値(0.00001)を足してから処理をするのが、予期せぬ計算バグを防ぐための安全な書き方です。


4. コピペで動く!ロット自動計算関数付きサンプルEA

それでは、実際の挙動を確認するためのサンプルコードを紹介します。
このコードは、「EAを起動した瞬間に、現在の口座残高から『許容リスク2.0%・損切り幅15pips』に基づいて最適なロット数を自動計算し、同時にSL/TPを設定して買いエントリーする」EAテンプレートです。

安全性を考慮し、ロット計算処理を再利用しやすいカスタム関数 CalculateLotSize() として綺麗に切り分けて実装しています。

このコードを MetaEditor でコンパイルしてデモチャートにセットしてみてください。
口座残高が多い状態と少ない状態でそれぞれセットすると、自動的に算出されるロット数(Calculated lot size)が資金量に合わせて変動する様子がログで確認できます!


5. まとめ&次のステップ

今回は、EAの安全な長期運用において極めて重要な「ロット数自動計算による資金管理ロジック」を解説しました。

  • 固定ロット運用は、口座資金の増減や損切り幅によって想定外の損失を招く。
  • 残高に対する%(リスク比率)と損切り幅から、取引ロット数を動的に計算する。
  • 計算結果はブローカーの制限(最小・最大ロット、ステップ幅)に合わせて必ず丸め処理を行う。
  • ロット計算を関数化しておくことで、どのようなEAにも簡単に資金管理機能を組み込める。

これまでに学んだ「注文」「決済」「インジケーター」「SL/TP設定」、そして今回の「資金管理」があれば、実用レベルのEA作成に必要なコア部分はすべてマスターしたことになります!

次回は、EAの安定性をさらに高めるための「複数通貨ペアを1つのチャートから監視・トレードするマルチ通貨監視EAの基本」、または実践で役立つテクニックについて解説します。

今回のロット計算式や、口座の通貨設定(日本円口座・ドル口座など)による挙動の違いなどで疑問があれば、YouTubeのコメント欄やXでお気軽にご連絡くださいね!

🎥 YouTubeチャンネル: 潤奈【FXチャンネル】
🐦 X (Twitter): @zyuna32246

コメント

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