無料でロボットをダウンロードする方法を見る
Facebook上で私たちを見つけてください。
私たちのファンページに参加してください
興味深いスクリプト?
それではリンクにそれを投稿してください。-
他の人にそれを評価してもらいます
スクリプトを気に入りましたか?MetaTrader 5ターミナルの中でそれを試してみてください。
ライブラリ

Universal Pip Value and Dynamic Lot Calculator Class for MQL5 - MetaTrader 5のためのライブラリ

ビュー:
15
評価:
(2)
パブリッシュ済み:
\MQL5\Include\
MQL5フリーランス このコードに基づいたロボットまたはインジケーターが必要なら、フリーランスでご注文ください フリーランスに移動

CRiskCalculatorは、エキスパートアドバイザーや取引ツールのリスク管理および取引量の計算を処理するために設計された、オブジェクト指向のMQL5ヘッダーライブラリです 。このライブラリは、特定の口座のリスク額とストップロスまでの距離(ピップ単位)に基づいて、1ピップあたりの金銭的価値と正確なロットサイズを算出します 。

自動取引においてよく見られる課題の一つは、クロス通貨ペア(例えば、ユーロ建て口座でのGBPJPY取引など)におけるポジションサイズの算出です 。このクラスは、MetaTrader 5のネイティブなシンボルプロパティと、クロス通貨ペア用のフォールバック変換システムを組み合わせることで、この課題に対処しています 。

主な機能

  • デュアルエンジン計算: 主要な計算方法として、ブローカー固有のプロパティ(SYMBOL_TRADE_TICK_VALUE および SYMBOL_TRADE_TICK_SIZE)を使用します 。これらのパラメータが利用できない場合や、ブローカーによって初期化されていない場合は、自動的に手動による基軸通貨/提示通貨の抽出および為替レートの照会に切り替わります 。

  • ブローカーパラメータの正規化: 計算された出来高を自動的に SYMBOL_VOLUME_MIN と SYMBOL_VOLUME_MAX の範囲内に収め、SYMBOL_VOLUME_STEP に揃えることで、ブローカーによる拒否エラー(TRADE_RETCODE_INVALID_VOLUME など)を回避します 。

  • クリーンなOOP設計: CRiskCalculatorクラス内にカプセル化されており、グローバルスコープが煩雑になることがなく、既存のEAプロジェクトやカスタムインジケーターに簡単に組み込むことができます 。

  • 自動設定: 初期化時に、現在の口座の基軸通貨(ACCOUNT_CURRENCY)を自動的に検出します 。

統合例

このクラスをエキスパートアドバイザーやスクリプトで使用するには、CRiskCalculator.mqh を MQL5/Include/ ディレクトリ内に配置し、オブジェクトをインスタンス化してください :

#include <CRiskCalculator.mqh>

// チャート上に高コントラストのパネルを表示するためのヘルパー関数
void DrawChartPanel(const string &lines[])
  {
   int x = 20, y = 30;
   int width = 280, lineHeight = 18;
   int height = (ArraySize(lines) * lineHeight) + 20;

   // 1. 背景ボックスの作成(白、黒、またはカスタム色のチャートで表示されます)
   string bgName = "RiskCalc_BG";
   if(ObjectFind(0, bgName) < 0)
      ObjectCreate(0, bgName, OBJ_RECTANGLE_LABEL, 0, 0, 0);

   ObjectSetInteger(0, bgName, OBJPROP_CORNER, CORNER_LEFT_UPPER);
   ObjectSetInteger(0, bgName, OBJPROP_XDISTANCE, x);
   ObjectSetInteger(0, bgName, OBJPROP_YDISTANCE, y);
   ObjectSetInteger(0, bgName, OBJPROP_XSIZE, width);
   ObjectSetInteger(0, bgName, OBJPROP_YSIZE, height);
   ObjectSetInteger(0, bgName, OBJPROP_BGCOLOR, clrDarkSlateGray);
   ObjectSetInteger(0, bgName, OBJPROP_BORDER_COLOR, clrDodgerBlue);
   ObjectSetInteger(0, bgName, OBJPROP_BORDER_TYPE, BORDER_FLAT);
   ObjectSetInteger(0, bgName, OBJPROP_SELECTABLE, false);

   // 2. パネル内のテキスト行を描画する
   for(int i = 0; i < ArraySize(lines); i++)
     {
      string lblName = "RiskCalc_Lbl_" + IntegerToString(i);
      if(ObjectFind(0, lblName) < 0)
         ObjectCreate(0, lblName, OBJ_LABEL, 0, 0, 0);

      ObjectSetInteger(0, lblName, OBJPROP_CORNER, CORNER_LEFT_UPPER);
      ObjectSetInteger(0, lblName, OBJPROP_XDISTANCE, x + 12);
      ObjectSetInteger(0, lblName, OBJPROP_YDISTANCE, y + 10 + (i * lineHeight));
      ObjectSetString(0, lblName, OBJPROP_TEXT, lines[i]);
      ObjectSetString(0, lblName, OBJPROP_FONT, "Segoe UI");
      ObjectSetInteger(0, lblName, OBJPROP_FONTSIZE, 9);
      ObjectSetInteger(0, lblName, OBJPROP_COLOR, (i == 0) ? clrYellow : clrWhite);
      ObjectSetInteger(0, lblName, OBJPROP_SELECTABLE, false);
     }

   ChartRedraw(0);
  }

void OnStart()
  {
   // リスク計算ツールをインスタンス化する
   CRiskCalculator riskCalc;

   string symbol     = _Symbol;
   double riskAmount = 100.0; // 口座通貨建ての目標リスク
   double slPips     = 25.0;  // ストップロスの距離(ピップス)

   // パラメータを計算する
   double lotSize      = riskCalc.CalculateLotSize(symbol, riskAmount, slPips);
   double pipValPerLot = riskCalc.GetPipValuePerLot(symbol);

   // 出力行の準備
   string info[6];
   info[0] = "=== RISK & POSITION CALCULATOR ===";
   info[1] = "Symbol: " + symbol;
   info[2] = "Account Currency: " + AccountInfoString(ACCOUNT_CURRENCY);
   info[3] = "Target Risk: $" + DoubleToString(riskAmount, 2);
   info[4] = "Calculated Lot Size: " + DoubleToString(lotSize, 2) + " lots";
   info[5] = "Pip Value (1 Lot): " + DoubleToString(pipValPerLot, 2);

   // チャート上にGUIパネルを表示する
   DrawChartPanel(info);
  }
グラフの例

クラスリファレンス

メソッド 戻り値の型 説明
GetPipValuePerLot(string symbol) double

口座通貨建ての1標準ロットにおける1ピップの金銭的価値を返します を返します。

GetPipValue(string symbol, double volume) double

指定された取引量における1ピップの合計金額を返します 。 CalculateLotSize( string symbol, double riskAmount, double slPips)

CalculateLotSize(string symbol, double riskAmount, double slPips) double

目標とするキャッシュリスクとストップロス(ピップ単位)に基づいて、ロットサイズを計算し、正規化します 。


MetaQuotes Ltdによって英語から翻訳されました。
元のコード: https://www.mql5.com/en/code/77130

Gueta Position Sizer: Risk and Lot Guard HUD Gueta Position Sizer: Risk and Lot Guard HUD

MT5用のリアルタイムリスク計算ツールおよびロットサイズガードHUD。口座残高、目標リスク率、および動的ATRストップロスに基づき、正確なロットサイズを算出し、ロットオーバーシュートの最小値に関する警告を表示します。

RJO Daily Pivot Levels  Classic and  Fibonacci for MT5 RJO Daily Pivot Levels Classic and Fibonacci for MT5

MetaTrader 5用の日足ピボットポイント指標。クラシック法とフィボナッチ法の両方を搭載しています。前日の終値に基づく日足ローソク足を用いて、PP、R1~R3、S1~S3を表示します。

Adaptive Moving Average (AMA) Adaptive Moving Average (AMA)

適応移動平均線は、ノイズの影響を受けにくい移動平均線を作るときに使われ、トレンドを検知する際にラグが最小に抑えられるという特徴を持ちます。

Accelerator Oscillator (AC) Accelerator Oscillator (AC)

アクセルレーション/デセレレーションインジケーター(AC)は現在の市場を動かす力の加速と減速を測ります。