解決済み

複利運用のリスク計算について

2025/09/04 12:20
27

いつも大変お世話になっております。
複利運用の下記のコードにつきまして
double MoneyManagement(double risk, double sl)
{
if(sl <= 0) return(0);

double tick_value = MarketInfo(Symbol(), MODE_TICKVALUE);
double tick_size = MarketInfo(Symbol(), MODE_TICKSIZE);
double acceptable_loss = AccountBalance() * (risk / 100);
double loss_per_lots = PipsToPrice(sl) / tick_size * tick_value;
double lots = acceptable_loss / loss_per_lots;

return(lots);
}

リスクの計算をストップロスではなく、200EMAを計算の起点とし、リスク%を計算してほしいです。

何卒よろしくお願い申し上げます。

コメント

GogoJungle
2025/09/04 16:44

「ストップロス幅ではなく“現在価格から200EMAまでの距離”を基準に、複利運用(リスク%)でロットを計算したい」というご要望ですね。


実現方針(EAつくーるの設定とロジックの考え方)

EAつくーる標準の「複利運用」は、 基本項目の「損切り」pips を使って損失額=リスク%になるようにロット数を計算します。
ご希望の「200EMAまでの距離」を損切り幅の代わりに使う設定は画面上では用意されていないため、 EAつくーるの機能のみでは難しいです。ただし、 出力されたコードを改造することで実現可能 であると存じます。

EAつくーる側の設定(おすすめ)

  • 「基本項目」

    • 損切り:0 (コード側で200EMA距離を採用するため)
    • 利食い:任意
    • ロット数:任意(複利ON時は上書き)
    • スリッページ:任意
  • 「オプション」

    • 複利運用:ON (リスク%はお好みで。例:3)
  • 「取引条件」

    • いつも通りで問題ありません(エントリー方向はロジックに依存)

この状態でEAを出力し、下記の手順でコードを最小限改修します。


コードの修正方法(最小限差し替え)

EAつくーるの機能のみでは200EMA起点のリスク計算は設定できませんが、 出力されたコードを改造することで実現可能であると存じます。
修正方法を考えてみましたので提案させていただきます。

# 準備

  1. EAつくーるで上記設定にしてEAを出力します(損切り=0、複利運用=ON)。
  2. MetaEditor でEAを開きます。
  3. 検索ボックスで double MoneyManagement(double risk, double sl) を検索してください。

変更のポイント

  • sl(pips)が 0以下 のときは、 現在価格と200EMAの価格差(pips) を損切り幅として採用します。
  • エントリー方向がまだ確定していなくても、 “現在値とEMAの絶対距離” を使えば方向に依存せず安全に計算できます。
  • 価格がEMAに一致して距離0pipsになると割り算が不可能になるため、 最低距離1pips のガードを入れます。
  • 5桁・3桁銘柄でも既存のPipsToPrice/PriceToPipsを使うことで自動対応します。

【修正前】(該当関数全体)

double MoneyManagement(double risk, double sl)
{
  if(sl &lt;= 0) return(0);

  double tick_value = MarketInfo(Symbol(), MODE_TICKVALUE);
  double tick_size  = MarketInfo(Symbol(), MODE_TICKSIZE);
  double acceptable_loss = AccountBalance() * (risk / 100);
  double loss_per_lots = PipsToPrice(sl) / tick_size * tick_value;
  double lots = acceptable_loss / loss_per_lots;

  return(lots);
}

【修正後】(同じ場所を差し替え)

double MoneyManagement(double risk, double sl)
{
  // --- 1) 200EMAとの距離(pips)を、sl&lt;=0 のときに採用する --------------------
  double sl_pips = sl;

  if(sl_pips &lt;= 0)
  {
    // 200EMA(終値ベース、現行足)の取得
    double ema200 = iMA(Symbol(), 0, 200, 0, MODE_EMA, PRICE_CLOSE, 0);

    // 現在価格(終値ベースでも可。約定価格との整合を重視するならBid/AskでもOK)
    // 方向非依存のため「絶対距離」を採用
    double current_price = iClose(Symbol(), 0, 0);

    // 価格差をpips化
    sl_pips = PriceToPips(MathAbs(current_price - ema200));

    // 価格がEMAに極端に近いと0pipsになり得るため、最低1pipsを確保
    if(sl_pips &lt; 1) sl_pips = 1;
  }

  // --- 2) 複利ロットの計算(既存ロジックと同じ考え方) -----------------------
  double tick_value = MarketInfo(Symbol(), MODE_TICKVALUE);
  double tick_size  = MarketInfo(Symbol(), MODE_TICKSIZE);

  // 許容損失額(口座残高×リスク%)
  double acceptable_loss = AccountBalance() * (risk / 100.0);

  // 1ロットあたりの損失額 =(損切り幅の価格換算 / tick_size)× tick_value
  double loss_per_lots = PipsToPrice(sl_pips) / tick_size * tick_value;

  // ガード:万一ブローカー仕様で0になるケースを防止
  if(loss_per_lots &lt;= 0) return(0);

  double lots = acceptable_loss / loss_per_lots;

  return(lots);
}

補足・よくあるつまずき(こうなっていませんか?)

  • 基本項目の「損切り」が0以外 になっている
    → 本修正は「sl&lt;=0ならEMA距離を使う」前提です。 損切り=0 にしてください。
  • EMAの適用価格や時間足を変えたい
    → 上記コードの iMA(Symbol(), 0, 200, 0, MODE_EMA, PRICE_CLOSE, 0)第2引数(時間足)や第6引数(適用価格) を変更してください。例:H1なら PERIOD_H1、Ask/Bid基準にしたい場合は current_priceAsk / Bid に変更するなど。
  • 価格とEMAがほぼ一致してロットが異常に大きい
    → 1pipsガードを入れていますが、さらに安全側にするなら if(sl_pips &lt; 3) sl_pips = 3; のように下限を増やしてください。
  • スプレッドが広い銘柄
    → 方向別で正確性を高めたい場合、買い想定なら current_price = Ask;、売り想定なら current_price = Bid; に変えると、現実の約定価格に近づきます(ただしエントリー方向をここで確定できない場合は、終値ベースのままでも運用可能です)。

参考:このロジックでの運用イメージ

  • 価格と200EMAの距離が 広いとロットは小さく近いとロットは大きく なります。
  • トレンド相場で価格がEMAから乖離しているときは保守的、レンジで接近しているときは攻撃的になるため、 リスク特性が相場環境に連動 します。必要に応じて「最小距離の下限」を少し大きめにし、過度なロット増加を抑えると扱いやすくなります。

【コードのサンプル】に対する適用位置

添付のサンプルでは、ファイル末尾付近に既に MoneyManagement が定義されています。
前述のdouble MoneyManagement(double risk, double sl)で検索して該当関数を【修正後】で置き換えてください。
その他の関数(PipsToPrice/PriceToPips等)はそのまま活用できます。

以上で、200EMAを起点にしたリスク%計算の複利運用が実装できます。

YAMA
2025/09/05 08:50

ありがとうございました_;

関連トピックス

検索結果がありません。

ノーコードで誰でも簡単EA開発!MQL言語学習にも使える! | GogoJungle

注目トピックス

検索結果がありません。