🛡️
自定义追踪止损类封装(SAR/NRTR)
用指标算止损位,封装成可换子类、零改主逻辑的追踪止损
#EA#追踪止损#SAR#NRTR#OOP
价格朝盈利方向移动时,定期把止损拉近,锁定利润、减少回吐。MT5 内置标准追踪,本文教你用指标(SAR/NRTR)算更聪明的止损位,封装成可复用类。
一、追踪止损解决什么问题
MT5 内置标准追踪只在达收支平衡后按固定距离跟;自定义可用 SAR/NRTR 等跟随趋势,趋势反转前就把止损推到更合理的位置。
二、基类 CTrailingStop 设计
- 通用:判定持仓类型/当前止损、算新止损、检查是否要改、发修改请求;
- 方法:Init/On/Off/StartTimer/StopTimer/EventHandle/Deinit/DoStoploss;
- 虚方法 Refresh/Trend/BuySellStoploss 由子类实现。
三、两个子类
- CParabolicStop(SAR):Trend 看价与 SAR 线上下,买卖止损都取 SAR 值;
- CNRTRStop(NRTR):sup ≠ 0 上升、res ≠ 0 下降,买卖止损取 sup/res。
四、集成到 EA 的七步
包含 .mqh → 声明参数 → 建实例 → OnInit 里 Init/SetParameters/StartTimer/On → OnTimer 调 Refresh → OnTick 调 DoStoploss → OnDeinit 调 Deinit。
✦ 换指标零改主逻辑
把追踪止损做成类,EA 里只调 DoStoploss(),换指标(SAR→NRTR→自己写的)只需换子类,主逻辑一行不改。
五、技术细节与回测
- 最小距离看 SYMBOL_TRADE_STOPS_LEVEL;
- 卖单止损要加点点差(按买价平);
- NormalizeDouble 标准化;
- MqlTradeRequest 填 TRADE_ACTION_SLTP 发修改;
- 文中回测 SAR 版盈利优于 NRTR。
⚠ 卖单止损加点点差
卖单止损加点点差这一步极易漏——漏了修改会被拒或平在错误价;用 MathMin/MathMax 把止损夹在允许区间内。
常见问题
内置只在达收支平衡后按固定距离跟;自定义可用 SAR/NRTR 等跟随趋势,趋势反转前就把止损推到更合理的位置。
基类管通用流程,子类只管指标怎么给止损价,换指标零改主逻辑;还能多品种多策略同时挂不同追踪类。
卖单按买价(Bid)平仓,而止损价挂在卖价侧,两者差一个 spread;不加的话止损位会偏,触发异常或被拒。
每 tick 改止损既耗资源又可能因最小距离限制被拒;文中有每 tick / 每 bar 两种模式,震荡市用每 bar 更稳。
文中样例 SAR 版盈利改善更明显,NRTR 接近但偏弱;但结论依赖具体品种与时段,换市场要重测,别当成铁律。