刚把EA挂上实盘跑了两天,结果今天打开MT4一看,日志里一堆报错,头都大了。我用的是一套基于均线金叉死叉的简单策略,代码是网上找的模板改的,主要逻辑就是当EMA12上穿EMA26时开多单,下穿时平多开空,加了移动止损和追踪止盈。之前回测跑了一个月,数据看着还行,胜率大概在60%左右,最大回撤也控制在15%以内,想着实盘应该问题不大。
但实际跑起来,日志里频繁出现“OrderSend error 130”和“OrderModify error 1”这两类错误。130我知道是无效止损或止盈,可我检查了代码里的止损设置,是用当前价格加减一个ATR倍数算出来的,应该不会超出经纪商允许的范围啊。难道是点差波动导致价格偏移,止损价被判定成无效?还有那个Error 1,查了下说是没有错误,但订单修改就是不成功,我怀疑是条件判断里用了MarketInfo(Symbol(), MODE_SPREAD)来调整开仓价,结果实盘时点差变化太快,导致修改请求发送时价格已经变了。
另外,我还发现EA有时候会连续开单,明明已经有一个多单持仓了,系统又开了一个同方向的新单,导致仓位重叠。我明明在开仓条件前加了if(OrdersTotal()==0)的检查,为啥还会这样?是不是因为服务器响应延迟,或者OrderSelect函数没有正确筛选出当前品种的单子?我用的MQL4,OrderSelect参数设置的是SELECT_BY_POS,MODES_TRADES,按理说应该只选持仓单啊。
止损设置、重复开单、订单修改失败,这三个问题搞得我头大。哪位大佬帮忙看看是哪里逻辑出错了?是代码里时间控制不够,还是应该用OrderMagicNumber来区分信号?我贴一下关键部分的代码片段,跪求指点,实在不想让实盘资金就这么打水漂了。
但实际跑起来,日志里频繁出现“OrderSend error 130”和“OrderModify error 1”这两类错误。130我知道是无效止损或止盈,可我检查了代码里的止损设置,是用当前价格加减一个ATR倍数算出来的,应该不会超出经纪商允许的范围啊。难道是点差波动导致价格偏移,止损价被判定成无效?还有那个Error 1,查了下说是没有错误,但订单修改就是不成功,我怀疑是条件判断里用了MarketInfo(Symbol(), MODE_SPREAD)来调整开仓价,结果实盘时点差变化太快,导致修改请求发送时价格已经变了。
另外,我还发现EA有时候会连续开单,明明已经有一个多单持仓了,系统又开了一个同方向的新单,导致仓位重叠。我明明在开仓条件前加了if(OrdersTotal()==0)的检查,为啥还会这样?是不是因为服务器响应延迟,或者OrderSelect函数没有正确筛选出当前品种的单子?我用的MQL4,OrderSelect参数设置的是SELECT_BY_POS,MODES_TRADES,按理说应该只选持仓单啊。
止损设置、重复开单、订单修改失败,这三个问题搞得我头大。哪位大佬帮忙看看是哪里逻辑出错了?是代码里时间控制不够,还是应该用OrderMagicNumber来区分信号?我贴一下关键部分的代码片段,跪求指点,实在不想让实盘资金就这么打水漂了。
专注交易策略编程实现,分享MQL开发技巧与代码优化方案