- 显示:
- 18
- 等级:
- 已发布:
-
需要基于此代码的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
适用于MT5的实时风险计算器和手数保护HUD。根据账户余额、目标风险百分比以及动态ATR止损,计算出精确的手数,并提供最小手数超额警告。
RJO Daily Pivot Levels Classic and Fibonacci for MT5
适用于MetaTrader 5的日线枢轴点指标,支持经典法和斐波那契法。基于前一根已收盘的日线K线显示枢轴点(PP)、R1-R3和S1-S3。
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(反转变化)— 趋势反转 强势突破/强势反转(大级别结构)
离散
离散技术指标由价格和交易量的变化决定。