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

Position sizing from risk, using the broker's own tick value and volume step - MetaTrader 5程序库

Ralph Ivan Simeon
Ralph Ivan Simeon
I build and audit automated trading systems for MetaTrader 5, with most of my work on XAUUSD.
| Chinese English Русский Español Deutsch 日本語 Português 한국어 Français Italiano Türkçe
显示:
9
等级:
(2)
已发布:
MQL5自由职业者 需要基于此代码的EA交易或指标吗?请在自由职业者服务中订购 进入自由职业者服务

任何假设1个点值10美元的仓位计算器,在黄金、指数、日元交叉盘以及任何非美元计价的账户上都是错误的——而这正是仓位过大造成损失的原因所在。本标题部分则根据服务器实际发布的该交易品种数据进行计算。

功能说明CalcLots() 的返回值,包括大多数尺寸计算例程常出错的情况

CalcLots() 接受以账户货币计价的风险金额、入场价和止损价作为参数,并返回应交易手数以及在应用经纪商限制后该手数实际承担的风险金额。

  • 它始终将交易量向下舍入 至经纪商的最小交易单位。向上舍入会悄无声息地导致实际风险超过您的要求,而这是仓位计算程序绝不能做的事情。
  • 当请求的风险值小于最小手数时,该函数不会进行伪装。 它将返回最小手数,设置 clamped_min,并报告该头寸实际承担的风险——该风险值将大于请求值。
  • 该函数不依赖于具体交易平台。 止损位可以位于入场价上方或下方。

它还会返回止损距离(以点为单位)以及每 1.00 手对应 1 点的值,以便调用方可展示其计算过程,而非仅显示一个数字。

为何将数学计算放在单独的头文件中

Calc.mqh 不保存任何终端状态。它接受一个 SymbolSpec 结构体——点数、 tick 大小、 tick 值、成交量最小值/最大值/步长、小数位数——因此整个仓位计算逻辑均可离线针对合成交易品种进行测试。

SpecFromSymbol() 是连接实时数据的唯一桥梁。 它首先读取 SYMBOL_TRADE_TICK_VALUE_LOSS,因为这是服务器在交易对您不利时使用的数值,而这恰恰是止损单所在的一方;对于将亏损变量设为零的经纪商,它会回退到 SYMBOL_TRADE_TICK_VALUE。

正是这种分离,才使得随附的测试脚本成为可能。

测试脚本

RiskLotCalculatorTests.mq5 可在任何图表上运行,无需连接经纪商,也无需历史数据。它验证了 41 种情况: 成交量步长舍入、两种限制条件及其标志、当点值与点差不同时的点值缩放、5位数主要货币对、黄金、步长为0.1手指数、两种交易方向,以及所有拒绝路径——零风险、负风险、止损位于入场点,以及缺失的点差数据。

将其拖放到图表上,并查看“专家”选项卡。测试结果将显示“全部通过”,通过数=41,失败数=0。

这两个文件都是自包含的:将它们放入同一个文件夹中,测试脚本即可直接编译运行。

由MetaQuotes Ltd译自英文
原代码: https://www.mql5.com/en/code/77488

RiskPilot Pro — 支持拖拽下单的风险面板,具备盈亏平衡、追踪止损和每日亏损保护功能 RiskPilot Pro — 支持拖拽下单的风险面板,具备盈亏平衡、追踪止损和每日亏损保护功能

将止损位拖动到您真正想要的位置,点击“买入”或“卖出”,手数就会自动调整正确——无需计算器,也无需电子表格。该功能支持设置盈亏平衡点和追踪止损,并在触及止损限额时自动结束当日交易。

点差监控器 点差监控器

Spread Monitor — 一款适用于 MetaTrader 5 的简易信息指标。

Contract Sizer: ladder, floor and a breaker that survives a deposit Contract Sizer: ladder, floor and a breaker that survives a deposit

三种起作用不同的仓位规模保护机制;正是因为混淆了它们,才导致如此多的账户被清零: - 阶梯式:每X的余额对应一份合约,始终作为上限(CAP)应用,即使手动设定手数也是如此; - 底限(floor):余额低于最低资本要求时停止交易;需进行新的入金; - 断路器(breaker):无论账户规模大小,当余额跌破峰值X%时触发止损,且不会自动重置。 本库解决了一个几乎所有其他库都未解决的问题:入金不等于盈利,提现不等于亏损。 断路器是根据账户余额峰值来衡量跌幅的。如果不加以处理,在回撤期间进行的入金会同时推高余额和峰值,导致保护机制恰恰在最需要发挥作用的时候无法识别跌幅。在此情况下,入金和出金会以相同幅度改变峰值。 峰值会被保存到文件中:如果一个止损机制在终端重启后会忘记峰值,那它就称不上是止损机制。 该演示程序模拟了在回撤谷底进行入金的情况。请分别开启和关闭入金功能运行程序,并比较“跌幅”列的数据。

离散 离散

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