BreakEvenTrailingMarket
- 实用工具
- 版本: 1.0
BreakEven Trailing 是一款用于 MetaTrader 5 的工具型 EA,用来管理您已持有仓位的止损。它可以把止损移动到保本位置,并让止损跟随价格移动,因此您不必一直盯盘也能保护已有的浮动盈利。
本 EA 不开仓,也不使用市价单平仓。它只修改已有仓位的止损。平仓发生在价格触及 EA 所设置的止损时。
功能说明
- 当仓位达到设定的盈利点数(pips)时,把止损移动到开仓价,或开仓价加上设定的偏移量。
- 当仓位达到设定的盈利点数时,让止损与当前价格保持固定距离并跟随移动。
- 保本移动和移动止损可以分别开启或关闭,也可以同时使用。
- 支持买入(BUY)和卖出(SELL)仓位。
- 绝不会把已有止损移动到更不利的位置。止损只向能保护更多盈利的方向移动。
- 修改止损时保持已有的止盈不变。
- 在图表上显示当前设置、账户类型和运行状态。
管理哪些仓位
EA 管理其所在图表品种上的所有仓位。
- 不检查 Magic 编号。手动开出的仓位、其他 EA 开出的仓位以及跟单产生的仓位都会被管理。
- 从不修改其他品种的仓位。
- 从不修改挂单。
- 只修改止损。手数、止盈和买卖方向保持不变。
由于 EA 不按 Magic 编号过滤,请不要同时运行两个修改同一品种止损的程序,它们会互相覆盖。每个品种只在一个图表上加载本 EA。
对冲账户与净持仓账户
在对冲账户上,每个仓位按其订单号(ticket)单独管理。同一品种的两个仓位可以有不同的保本位置,因为它们各自有自己的开仓价。
在净持仓账户上,平台对每个品种只保留一个合并仓位。多次成交会合并为一个具有平均开仓价的仓位,该平均价就是保本的基准。净持仓账户无法为每笔成交设置各自的保本位置,而且新的成交会改变整个仓位的平均开仓价。EA 在每个报价(tick)上重新读取当前的合并仓位,因此始终依据最新的平均价工作。
识别出的账户类型会在图表面板上显示为 Hedging 或 Netting。
止损如何选择
当保本移动和移动止损同时启用时,两个条件可能在同一时刻满足。此时 EA 不会发送两次修改请求。在每个报价上,它执行以下步骤:
1. 计算保本候选价:开仓价加上或减去朝向盈利方向的偏移量。
2. 计算移动止损候选价:当前价格减去或加上跟踪距离。
3. 把每个候选价按品种的最小价格变动单位取整,取整方向始终不会让止损比要求的位置更靠近当前价格。
4. 分别用品种的 stops level 和 freeze level 校验每个候选价。
5. 比较通过校验的候选价,只发送能保护更多盈利的那一个:买单取较高的止损,卖单取较低的止损。
如果其中一个候选价因经纪商限制无法设置,而另一个有效,则使用另一个。EA 不会为了让修改通过而把候选价替换成更不利的位置。
经纪商限制
许多经纪商不接受距离当前价格过近的止损,部分经纪商在价格处于冻结区间时禁止修改仓位。EA 在发送请求前检查 stops level 和 freeze level,发送后还会读取交易服务器返回的代码。
当止损无法设置时,EA 会等待并在下一个报价重新判断。它不会把止损移动到更不利的位置,也不会关闭该功能。原因会显示在图表面板上,因此您可以分辨 EA 是在等待市场条件,还是服务器拒绝了请求。
请注意,有些经纪商报告的 stops level 为零,但仍在服务器端施加动态限制。这种情况下最终结果由交易服务器的返回代码决定,EA 会把它显示在面板和日志中。
输入参数
保本移动
- Enable break-even(默认 true):开启或关闭保本功能。
- Profit to trigger break-even, in pips(默认 10.0):移动止损前仓位需要达到的浮动盈利。
- Offset beyond open price, in pips(默认 0.0):从开仓价朝盈利方向偏移的距离,可用于覆盖点差、手续费和隔夜利息。
移动止损
- Enable trailing stop(默认 true):开启或关闭移动止损功能。
- Profit to start trailing, in pips(默认 15.0):开始跟踪前仓位需要达到的浮动盈利。
- Distance from price to stop, in pips(默认 10.0):跟踪过程中当前价格与止损之间保持的距离。
图表面板
- Show settings and status on chart(默认 true)。
- Panel font size(默认 12):取值限制在 8 到 24 之间。
EA 启动时会校验参数。若参数无法工作,EA 会给出提示并且不启动。若组合允许但不常见,EA 会启动并在日志中写入警告。共有两种警告:偏移量大于保本触发值,意味着价格需要继续前进才能设置止损;跟踪起始值小于跟踪距离,意味着第一次移动止损可能比开仓价更不利。
图表面板
面板显示版本、品种、账户类型、两项功能的状态与设置、管理中的买卖仓位数量、当前报价上的修改次数以及当前状态。
状态取值包括:
- ACTIVE:EA 正在监控仓位。
- WAITING: NO POSITION:当前品种没有仓位。
- WAITING: NO QUOTE:尚未取得有效的买价和卖价。
- WAITING: STOP LEVEL:候选止损比经纪商允许的距离更靠近价格。
- BLOCKED: FREEZE LEVEL:价格处于经纪商禁止修改的区间内。
- WAITING: MARKET CLOSED、WAITING: PRICE OFF、WAITING: PRICE CHANGED、WAITING: TOO MANY REQUESTS:临时的市场或服务器状态。
- ALL FUNCTIONS OFF:两项功能均已关闭。
- AUTO TRADING OFF、EA TRADING DISABLED、ACCOUNT TRADE DISABLED、EXPERT TRADE DISABLED、SERVER AUTO TRADING OFF、DISCONNECTED:终端、该 EA 或该账户不允许交易,或终端未连接。
- ERROR: INVALID STOPS、ERROR: TRADE DISABLED、ERROR: SYMBOL SETTINGS、ERROR: MODIFY FAILED:请求被拒绝,返回代码会写入日志。
同一订单号上重复出现的错误,只在首次出现、返回代码变化时以及之后每分钟一次写入日志,以保持日志可读。仓位从错误中恢复时会写入一条恢复记录。
点数(pip)定义与支持的品种
所有距离以 pips 为单位设置,而不是 point。
- 报价为 3 位或 5 位小数的品种:1 pip 等于 10 point。
- 报价为 2 位或 4 位小数的品种:1 pip 等于 1 point。
该定义遵循标准外汇报价方式。金属、指数和加密货币不在 1.00 版本的支持范围内,因为不同经纪商对这些品种的 pip 定义并不一致。在这类品种上计算仍会运行,但 1 pip 的含义可能与您的预期不符,请先在模拟账户上确认实际距离。
本 EA 中「保本」的含义
本 EA 所说的保本,是指平台记录的仓位开仓价。它不包含手续费、隔夜利息、滑点以及平仓时买卖价之间的差额。因此,即使恰好在开仓价平仓,也不保证结果正好为零。
如果希望止损覆盖您自己的交易成本,请把开仓价偏移量设置为与该账户成本相当的数值。
使用方法
1. 把 EA 加载到需要管理的品种图表上。周期任选,EA 在每个报价上运行,与周期无关。
2. 在终端中启用算法交易。
3. 根据交易风格和该品种的常见波动幅度,以 pips 设置触发值和距离值。
4. 确认持仓时面板显示 ACTIVE,无持仓时显示 WAITING: NO POSITION。
5. 每个品种只开一个图表,不要在同一品种上重复加载。
EA 可以长期留在图表上。该品种没有仓位时,它不会做任何操作。
运行要求
- MetaTrader 5,已在终端版本 5836 上确认。
- 终端和 EA 均已启用算法交易。
- 账户允许修改持仓的止损。
- 不使用 DLL、WebRequest、外部文件,也不需要网络连接。
测试情况
1.00 版本在零售经纪商的模拟账户上进行了测试。
- 计算测试:通过 46 项自动检查,涵盖买单与卖单、保本移动、移动止损、两项功能同时工作、触发前一个报价与恰好触发、单个候选价违反 stops level、两个候选价均违反、对已有止损的保护、止损与止盈的 freeze level、2 位、3 位、4 位、5 位小数品种,以及按正确方向取整到最小价格变动单位。
- 与交易 API 的集成测试(对冲账户):买单和卖单的保本移动均以返回代码 10009(请求完成)执行,已有止盈得到保留,没有失败的请求。处理了约 360,000 个报价。
常见问题
EA 会开仓或平仓吗?
不会。它只修改已有仓位的止损。当价格触及该止损时,由经纪商完成平仓。
可以用于其他 EA 或跟单信号的仓位吗?
可以。EA 不检查 Magic 编号,因此该品种上的任何仓位都会被管理。也正因如此,请不要与另一个修改同一品种止损的程序同时使用。
终端关闭时会怎样?
终端关闭时 EA 无法工作。已经设置好的止损仍保留在服务器上并继续有效,因为它们是服务器端订单。
可以只用保本移动而不用移动止损吗?
可以,每项功能都有独立开关。两项都关闭时,EA 处于空闲状态并显示 ALL FUNCTIONS OFF。
盈利已达到条件,止损为什么没有移动?
最常见的原因是经纪商限制。请查看面板:WAITING: STOP LEVEL 表示请求的止损比经纪商允许的距离更靠近价格,EA 正在等待有效距离,而不是设置一个更不利的止损。
在净持仓账户上可以使用吗?
可以。净持仓账户每个品种只有一个合并仓位,其平均开仓价作为保本基准。
版本
1.00 - 首个版本。
