尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

MT5 图上交易面板开发(三):按风险额度自动计算手数的 MQL5 实现

MT5 图上交易面板开发(三):按风险额度自动计算手数的 MQL5 实现 本文是「MT5 图上交易面板开发」系列第 3 篇讨论手数的三种模式与按风险额度反推手数的完整实现。系列总览见第一篇。免责声明本文内容仅用于技术交流与学习参考不构成任何投资建议。金融市场存在不确定性过往表现不代表未来结果。请读者独立判断、审慎决策自行承担投资风险。1. 问题固定手数掩盖了风险差异常见的手数习惯是统一值小账户一律 0.01资金多些改 0.1。问题在点值差异——不同品种每点价值不同同样 0.1 手在两个品种上的单笔风险可能相差数倍。手数与风险的关系单笔风险 ≈ 止损点数 × 每点价值 × 手数把这个关系反推就是风险手数模式的思路先固定这一单最多亏多少再解出对应手数。2. 三种手数模式主面板手数输入框支持三种模式在设置窗 → 显示中切换模式输入含义行为手数固定手数填多少下多少余额风险%余额的百分比如 1%按当前余额换算风险额度风险金额绝对金额如 20 美元直接作为单笔风险上限后两种模式下手数框的语义反转不是用户填手数而是面板算手数。3. MQL5 实现换算函数这是本篇的核心实现思路示意基于 MQL5 公开 API// 按风险金额反推手数返回 0 表示低于最小手数拒绝下单 double CalcLotByRisk(double riskMoney, int slPoints, string symbol) { double tickValue SymbolInfoDouble(symbol, SYMBOL_TRADE_TICK_VALUE); double tickSize SymbolInfoDouble(symbol, SYMBOL_TRADE_TICK_SIZE); double point SymbolInfoDouble(symbol, SYMBOL_POINT); double lotStep SymbolInfoDouble(symbol, SYMBOL_VOLUME_STEP); double lotMin SymbolInfoDouble(symbol, SYMBOL_VOLUME_MIN); double lotMax SymbolInfoDouble(symbol, SYMBOL_VOLUME_MAX); // 每 1 手、价格波动 1 点的亏损额点值口径统一 double lossPerPointPerLot tickValue * point / tickSize; // 止损打掉时每 1 手的亏损额 double lossPerLot slPoints * lossPerPointPerLot; if(lossPerLot 0) return 0; double lot riskMoney / lossPerLot; lot MathFloor(lot / lotStep) * lotStep; // 对齐步长向下取整 if(lot lotMin) return 0; // 低于最小手数拒绝 return MathMin(lot, lotMax); }四个实现要点点值口径SYMBOL_TRADE_TICK_VALUE是每 tick、每手的价值与point/tickSize相乘才换算成每点、每手——直接用 tickValue 当点值是这类代码最常见的 bug向下取整对齐步长MathFloor而不是四舍五入保证实际风险不超设定额度最小手数兜底返回 0换算结果低于lotMin时拒绝下单而不是抬到最小手数——后者会偷偷放大风险风险% 模式只是额度来源不同double riskMoney AccountInfoDouble(ACCOUNT_BALANCE) * riskPercent / 100.0;4. 换算结果的动态特性交给面板两个输入——SL 点数与风险值——之后止损距离设远 → 手数自动变小止损距离设近 → 手数自动变大无论伸缩打掉止损时的亏损被约束在设定额度附近。5. 两道内置保护的设计逻辑保护一风险模式强制止损。风险% 与风险金额模式要求面板 SL 已填写——没有止损距离风险无从计算slPoints 0直接返回 0。这是逻辑必然不是功能限制。保护二最小手数兜底。即第 3 节代码中的if(lot lotMin) return 0——面板弹 Alert 提示用户可缩小止损距离或提高风险额度后重试。宁可拒绝下单不放大风险。下单确认窗提供可视化核对风险模式下手数标签显示为手数(按风险%)“或手数(按风险$)”区分算出来的与手动填的。6. 边界说明风险模式约束的是单笔风险额度管理的是仓位大小这一个环节它不改变行情的不确定性与盈亏没有因果关系。下一篇持仓多了以后批量平仓与订单管理的实现。风险提示杠杆交易外汇、贵金属、差价合约等具有高风险可能导致损失全部本金请充分了解相关风险后再参与交易本文介绍的是交易辅助工具的实现仅提供操作与信息展示功能不生成交易信号不构成任何投资建议所有交易决策由使用者自行做出手数换算结果与保本触发价等显示值均为测算参考值实际成交与盈亏以经纪商服务器为准新工具请先在模拟账户Demo上充分测试确认功能与预期一致后再考虑用于实盘过往表现不代表未来结果任何参数设置都无法保证盈利。版权声明本文为原创内容作者超哥量化。
返回列表