MQL5で実効レバレッジを返す関数

MQL5で実効レバレッジを返す関数を作った。

実効レバレッジは取引金額が資金(正確には有効証拠金)の何倍かを示す。

例えば資金が100万円として、ドル円のレートが1ドル150円のときに1万通貨のポジションを持っていたとする。このときの実効レバレッジ

実効レバレッジ = 150円 × 1万通貨 ÷ 100万円 = 1.5倍

となる。

環境

  • OANDA MetaTrader 5: 5.00 build 4040
  • MetaEditor: 5.00 build 4040

実効レバレッジを返す関数

通貨ペアのクオート通貨(ドル円なら後ろにある円)は何か、口座は何建てか(円建てか、ドル建てか、それともそれ以外か)など、いくつも組み合わせがあって、実効レバレッジの計算は難しい。価格が変化すると損益が生じて有効証拠金も変化するので余計に難しくなる。

下のサンプルコードでは実効レバレッジの予測値と関数が計算した値が微妙に一致しなかったが(ただし無視できる程度の差)、計算式は合っていると思う。

//+------------------------------------------------------------------+
//| 実効レバレッジ(2023/11/11動作確認。比較が難しいが予測値とほぼ一致)               |
//+------------------------------------------------------------------+
double EffectiveLeverage()
 {
  double margin=AccountInfoDouble(ACCOUNT_MARGIN); // 必要証拠金
  double leverage=(double)AccountInfoInteger(ACCOUNT_LEVERAGE); // レバレッジ(アカウント上限のレバレッジ。通常は25倍)
  double equity=AccountInfoDouble(ACCOUNT_EQUITY); // 有効証拠金
  //--- 必要証拠金=取引金額÷レバレッジなので、取引金額=必要証拠金×レバレッジになる
  double transaction_amount=margin*leverage; // 取引金額
  //--- 実効レバレッジ=取引金額÷有効証拠金
  double res=transaction_amount/equity; // 戻り値
  //---
  return(res);
 }

使用例

実効レバレッジが5倍未満のときのみ、新規注文を出すには以下のようにする。

if(EffectiveLeverage()<5 && 他のエントリー条件)
  新規注文;

ただし、新規注文が加わったことにより実効レバレッジが5倍以上になる可能性がある点には注意。もし新規注文が実効レバレッジ1倍分に相当する場合、

if(EffectiveLeverage()<4 && 他のエントリー条件)
  新規注文;

としておけば、新規注文が加わっても実効レバレッジを5倍未満に抑えることができる。