止损水平与冻结水平|SL设不上的真正原因
SL设不上,不一定是EA的故障
先说结论。SL设不上或无法移动,多数情况下并不是EA逻辑的问题,而是品种规格中规定的“最小距离”。MT5有两个相关设置:一是“止损水平”(Stop Level),规定SL、TP必须离当前价格至少多远;二是“冻结水平”(Freeze Level),规定当价格接近SL、TP或挂单时,禁止修改订单。
麻烦的是,这个距离并不总是固定不变。平时能正常通过的SL距离,可能只在经济指标发布之后被拒绝。我们开发EA时,发单前一定会检查这个距离。本文整理了其中的机制、确认步骤,以及EA端对策的局限。
推荐经纪商比较 →
🎁 免费下载EA📧 免费邮件课程(共 8 封)+ 订阅者专享 MT5 指标 13 款合集
※ 严格保护隐私。可随时取消订阅。
机制:两个“最小距离”
止损水平
止损水平(SYMBOL_TRADE_STOPS_LEVEL)是从当前价格到SL、TP的最小距离,以点(point)为单位。多单从平仓基准的Bid开始测量,空单从Ask开始测量。如果设置的SL比这个距离更近,订单会被服务器拒绝,MT5返回的代码是“Invalid stops”(10016)。
冻结水平
冻结水平(SYMBOL_TRADE_FREEZE_LEVEL)是当价格接近SL、TP或挂单价格时,禁止修改、删除该订单的距离。移动止损类EA在即将平仓前想移动SL却被拒绝,多半就是这个原因。返回代码是“Frozen”(10029)。
| 项目 | 含义 | 受影响的操作 | 主要拒绝代码 |
|---|---|---|---|
| 止损水平 | 当前价格到SL、TP的最小距离 | 新开仓时指定SL/TP、修改SL | Invalid stops(10016) |
| 冻结水平 | 价格接近SL、TP或挂单时禁止修改的距离 | 修改SL/TP、修改或取消挂单 | Frozen(10029) |
“0”并不代表没有限制
即使品种规格中的止损水平显示为0,也不代表可以随意靠近放置。止损水平为0时,有些经纪商似乎会在服务器端采用其他规则(例如以点差为基准的距离)。我们并没有确认过每家经纪商的实现,所以保守地按**“0=至少离开一个点差以上”**来处理。
经济指标发布时距离会扩大
止损水平和冻结水平并非固定值,经纪商可能根据自己的判断调整。有些经纪商会在重要经济指标发布前后、周一开盘刚开始时、展期(rollover)时段临时扩大。同一时段点差也会扩大,因此从Ask开始测量的空单SL,需要离得比实际行情波动更远。
也就是说,即使按平时的品种规格判断“这个距离没问题”,在最关键的时刻仍可能被拒绝。如果EA的设计是没有SL也能成功开仓,还可能留下毫无保护的持仓。
确认步骤与检查清单
请在你使用的账户上确认以下项目。
- 打开品种规格:在报价窗口中右键点击品种 →“规格”。记下“止损水平”和“冻结水平”的数值(单位为点)。
- 把点换算成价格:XAUUSD和USDJPY的1点价格幅度不同,请先确认小数位数,再换算成价差。
- 与EA的SL距离比较:确认EA设置或逻辑中使用的SL距离,是否明显大于止损水平加上点差的距离。
- 在指标发布前后再看一次:在发布前夕再打开同一个界面,确认数值是否变化。哪些经纪商会变化,不实际看是不知道的。
- 查看日志:在“操作日志”标签和“专家”标签中,确认是否出现“Invalid stops”或“Frozen”。订单被拒绝时的排查方法,也整理在EA・MT5知识库中。
EA本身的设置方法请参考EA设置方法,不同经纪商的交易条件差异请参考外汇经纪商比较。
EA端的最小距离检查
我们的EA在发单之前,会按以下顺序进行检查。
- 每次都获取当时的止损水平、冻结水平和点差(不使用启动时只获取一次的数值)
- 最小距离取“止损水平与冻结水平中较大者”,再加上点差和少量余量
- 如果SL比这个距离更近,不擅自放宽SL,而是放弃这次入场
不采用自动放宽SL的设计,是因为放宽SL会使单笔亏损金额超出设计值。如果手数是根据SL距离反推出来的,只放宽SL就会打乱风险百分比。放弃入场会减少机会,但我们认为这比承担预期之外的风险更好。
局限与注意事项
这项检查并不能防止所有问题。
- 回测难以复现:据我们的理解,MT5的策略测试器使用的是品种规格中的当前设置,无法复现过去经济指标发布时距离被扩大的情况。SL越短的EA,测试结果与实际结果的差距可能越大。例如GOLD TRIPWIRE在回测中的平均持仓时间只有0:21:12,属于较短的类型,我们认为它比较容易受到这类差异的影响。
- 放弃入场会改变业绩:被检查拦下的交易中,也包含本来会盈利的单子。加入检查后,交易内容就会和回测不同。
- 发单瞬间条件也会变:通过检查后到订单抵达服务器之间,条件也可能发生变化,因此无法让拒绝彻底归零。
- SL本身会滑点:即使SL设置成功,行情急变时也可能以比SL更不利的价格成交。最小距离检查并不是滑点对策。
总结
- SL设不上的多数原因,是品种规格中的止损水平(最小距离)和冻结水平(禁止修改的距离)
- 被拒绝时,返回代码为“Invalid stops”或“Frozen”
- 止损水平为0不一定代表“没有限制”,至少要离开一个点差以上
- 有些经纪商会在指标发布前后等时段扩大距离和点差,在最关键的时刻可能被拒绝
- 在EA端,每次都获取当时的数值进行检查,不足时不放宽SL而是放弃入场,这是我们的设计
- 回测难以复现过去距离的变化。SL越短的EA,越要注意实盘中的差异
相关文章
📧 免费邮件课程(共 8 封)+ 订阅者专享 MT5 指标 13 款合集
※ 严格保护隐私。可随时取消订阅。