说句可能挨喷的话,MT5对冲账户的EA配置,八成以上的人第一步就错了——他们还在用MT4那套思维去填参数,结果跑起来不是爆仓就是频繁卡单。我去年从MT4迁到MT5,前前后后折腾了三个多月,踩了无数坑才把对冲EA调顺,今天把这些经验捋一捋,希望能让兄弟们少走点弯路。
先说说最核心的账户类型与EA兼容性问题。MT5里的“对冲”和“净持”是两套完全不同的底层逻辑,很多人以为在开户时选了“对冲账户”就万事大吉,其实EA代码里如果用了
我自己吃过亏:一个网格EA在净持账户上测试好好的,换到对冲账户后,因为没改 PositionIdentifier 的映射逻辑,导致同品种多单和空单互相抵消,最后变成单边敞口,一周亏了6%。所以
接下来讲配置步骤,重点说几个实操中容易忽略的细节。第一步,设置好“允许算法交易”和“自动交易”这两个开关,看似简单,但MT5每次更新后有时会重置,我遇到过两次半夜EA罢工,就是这个原因。第二步,在EA输入参数里,对冲价差阈值别设太小,我一般用 20-30 点(EURUSD),太小的会频繁开对冲单,手续费和点差就把利润吃光了。第三步,资金管理里的“总风险比例”建议控制在2%以内,尤其是对冲策略,两腿都占保证金,实际杠杆比看起来低,但浮亏叠加起来很吓人。
再说一个坑,就是MT5的订单填充模式。对冲账户下,很多时候你会遇到“重新报价”或者“部分成交”的情况,尤其是非农、利率决议这些大行情。我现在的做法是
之前我用限价单挂对冲,结果行情瞬间穿越,止损单没触发,对冲腿也没成交,直接变成裸单,那酸爽……后来学乖了,所有对冲触发单都用市价,宁可多付点成本也要确定性。
再说关于VPS和延迟的配置,这个对冲EA尤其敏感。因为两腿之间如果延迟不一致,可能造成短暂的单边暴露。我现在的配置是
另外,别忘了在MT5的“选项-EA交易”里,勾选 “允许DLL导入”(如果你的EA用了外部库),但注意别乱装来源不明的DLL,安全第一。
说到底,MT5对冲账户的EA配置,本质是把“方向”和“仓位”拆成两个独立维度管理,这和MT4的单腿思维完全不同。我最后悔的是当初没早点看官方文档里的 Position 和 Deal 的区别,导致调试时老是搞混持仓和成交记录。建议兄弟们先把 HistoryDealGetInteger(DEAL_ENTRY) 这三个枚举值(DEAL_ENTRY_IN/OUT/INOUT)搞清楚,再动手写或者调EA。
各位有没有遇到过对冲账户下EA平仓顺序错乱的问题?就是先平了后开的单,导致剩余仓位变成裸单那种?我最近在琢磨用 POSITION_TIME_UPDATE 来做平仓排序,但还没完全验证,有没有老哥试过这个思路?欢迎来交流。
先说说最核心的账户类型与EA兼容性问题。MT5里的“对冲”和“净持”是两套完全不同的底层逻辑,很多人以为在开户时选了“对冲账户”就万事大吉,其实EA代码里如果用了
- OrderSend() 旧函数,那在MT5里直接编译不过,必须改成 CTrade 类或者 OrderSend 的MQL5版本
- MagicNumber 的区分方式,MT5里在订单注释里也能识别,但如果你同时跑多个EA,建议用 magic 加后缀识别,不然平仓时容易误伤
我自己吃过亏:一个网格EA在净持账户上测试好好的,换到对冲账户后,因为没改 PositionIdentifier 的映射逻辑,导致同品种多单和空单互相抵消,最后变成单边敞口,一周亏了6%。所以
- 开仓前先确认账户类型:用 AccountInfoInteger(ACCOUNT_MARGIN_MODE) 判断,返回 0 是净持,1 是对冲
- 如果EA不支持动态识别,直接在同品种对冲时用 POSITION_IDENTIFIER 加前缀,比如 “HEDGE_EURUSD_1”
接下来讲配置步骤,重点说几个实操中容易忽略的细节。第一步,设置好“允许算法交易”和“自动交易”这两个开关,看似简单,但MT5每次更新后有时会重置,我遇到过两次半夜EA罢工,就是这个原因。第二步,在EA输入参数里,对冲价差阈值别设太小,我一般用 20-30 点(EURUSD),太小的会频繁开对冲单,手续费和点差就把利润吃光了。第三步,资金管理里的“总风险比例”建议控制在2%以内,尤其是对冲策略,两腿都占保证金,实际杠杆比看起来低,但浮亏叠加起来很吓人。
再说一个坑,就是MT5的订单填充模式。对冲账户下,很多时候你会遇到“重新报价”或者“部分成交”的情况,尤其是非农、利率决议这些大行情。我现在的做法是
- 在EA里用 SYMBOL_TRADE_FILLING_IOC 或者 FOK,别用 RETURN
- 如果经纪商支持,把 执行模式改为“市价”,虽然滑点可能大点,但至少保证成交
之前我用限价单挂对冲,结果行情瞬间穿越,止损单没触发,对冲腿也没成交,直接变成裸单,那酸爽……后来学乖了,所有对冲触发单都用市价,宁可多付点成本也要确定性。
再说关于VPS和延迟的配置,这个对冲EA尤其敏感。因为两腿之间如果延迟不一致,可能造成短暂的单边暴露。我现在的配置是
- VPS选离经纪商服务器最近的机房,用 延迟低于5ms 的,实测ping值超过15ms就能看到成交时间差
- EA里设置 最大延迟滑点容忍度,我设的是 50 毫秒,超过就放弃开仓,等下一根K线
- 日志里开启 ORDER_INFO_TIME_ORDER_OPEN 和成交时间对比,定期检查两腿时间差,如果经常超过30ms,就考虑换VPS或者调整EA逻辑
另外,别忘了在MT5的“选项-EA交易”里,勾选 “允许DLL导入”(如果你的EA用了外部库),但注意别乱装来源不明的DLL,安全第一。
说到底,MT5对冲账户的EA配置,本质是把“方向”和“仓位”拆成两个独立维度管理,这和MT4的单腿思维完全不同。我最后悔的是当初没早点看官方文档里的 Position 和 Deal 的区别,导致调试时老是搞混持仓和成交记录。建议兄弟们先把 HistoryDealGetInteger(DEAL_ENTRY) 这三个枚举值(DEAL_ENTRY_IN/OUT/INOUT)搞清楚,再动手写或者调EA。
各位有没有遇到过对冲账户下EA平仓顺序错乱的问题?就是先平了后开的单,导致剩余仓位变成裸单那种?我最近在琢磨用 POSITION_TIME_UPDATE 来做平仓排序,但还没完全验证,有没有老哥试过这个思路?欢迎来交流。
