请观看如何免费下载自动交易
请在Twitter上找到我们!
加入我们粉丝页
有趣的脚本?
因此发布一个链接 -
让其他人评价
喜欢这个脚本? 在MetaTrader 5客户端尝试它
程序库

Universal Pip Value and Dynamic Lot Calculator Class for MQL5 - MetaTrader 5程序库

显示:
18
等级:
(2)
已发布:
\MQL5\Include\
MQL5自由职业者 需要基于此代码的EA交易或指标吗?请在自由职业者服务中订购 进入自由职业者服务

CRiskCalculator 是一个面向对象的 MQL5 头文件库,旨在为专家顾问和交易工具处理风险管理和交易量计算 。该库可根据特定的账户风险金额和以点为单位的止损距离,计算货币点值和精确的手数 。

自动交易中一个常见的问题是计算交叉货币对的仓位规模(例如,在以欧元为计价单位的账户上交易GBPJPY) 。该类通过将 MetaTrader 5 原生符号属性与针对交叉货币对的备用转换系统相结合,解决了这一难题 。

主要功能

  • 双引擎计算: 以经纪商原生属性(SYMBOL_TRADE_TICK_VALUE 和 SYMBOL_TRADE_TICK_SIZE)作为主要计算方法 。如果经纪商未提供或未初始化这些参数,系统将自动回退到手动提取基础货币/报价货币并查询汇率 。

  • 经纪商参数标准化: 自动将计算出的成交量限制在 SYMBOL_VOLUME_MIN 和 SYMBOL_VOLUME_MAX 之间,并将其调整为 SYMBOL_VOLUME_STEP,以避免经纪商拒绝错误(例如 TRADE_RETCODE_INVALID_VOLUME) 。

  • 简洁的面向对象设计: 封装在 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) 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的日线枢轴点指标,支持经典法和斐波那契法。基于前一根已收盘的日线K线显示枢轴点(PP)、R1-R3和S1-S3。

Smart Order Book Smart Order Book

智能订单薄(Smart Order Book) 智能订单薄 是一款基于 TradingView Pine Script 移植到 MetaTrader 5 的综合技术分析指标。它整合了机构级交易的核心概念,帮助交易者识别市场中的关键流动性区域、订单块、价格缺口和趋势结构。 🎯 核心功能 1. 订单块(Order Blocks) 自动识别机构买卖订单区域 支持多时间框架同步 Breaker Block(布林带)转换检测 订单块合并与成交量分布 2. 流动性水平(Liquidity) 买方/卖方流动性识别 Pivot High/Low 检测 流动性消化(被价格穿越)追踪 多时间框架支持 3. 价格缺口(FVG - Fair Value Gap) 公允价值缺口检测(3 根 K 线模式) 4 种回补方式:触及、影线、收盘、平均价 未回补缺口高亮显示 4. 趋势线(Trendlines) 基于 Pivot 点自动绘制 双线偏移显示 角度计算与过滤 向未来延伸(虚线部分) 5. 市场结构(Market Structure) 内部/外部结构识别 BOS(结构突破)— 趋势延续 CHOCH(反转变化)— 趋势反转 强势突破/强势反转(大级别结构)

离散 离散

离散技术指标由价格和交易量的变化决定。