之前用EA跑黄金的时候,我图省事挂了个距离现价特别近的buy stop,结果MT5直接弹窗拒单,当时没当回事就手动补了一单,没想到这个坑后面越踩越深。最近写了个专门做欧美M15突破的EA,回测的时候信号都正常,一上模拟盘就频繁出现挂单失败,日志里清一色刷的是 invalid price 或者 TRADE_RETCODE_INVALID_PRICE,搞得我头都大了。
具体现象是这样的:我EA里用的是OrderSendAsync发挂单,buy stop设在Ask上方大概15个点,sell stop设在Bid下方15个点,按理说这个距离不算离谱,欧美点差正常也就1到2个点。但实际跑起来,有时候能挂上,有时候直接被拒,尤其是非农前后那几分钟几乎必挂。我试过把距离拉大到30点、50点,情况好一点但偶尔还是报错。也试过用SymbolInfoDouble去取Ask和Bid,加个NormalizeDouble处理小数位,5位报价的欧美我按3位归一化,理论上没问题。
然后我怀疑是不是经纪商那边有最小挂单距离限制,就去查了SYMBOL_TRADE_STOPS_LEVEL,返回的是0,按理说没有硬性限制。又试了把OrderSendAsync换成同步的OrderSend,报错信息一样。现在有点懵,到底是我的价格计算逻辑有问题,还是这家经纪商的撮合引擎对挂单距离有隐藏要求?有没有汇友遇到过类似的情况,你们是怎么排查的?
具体现象是这样的:我EA里用的是OrderSendAsync发挂单,buy stop设在Ask上方大概15个点,sell stop设在Bid下方15个点,按理说这个距离不算离谱,欧美点差正常也就1到2个点。但实际跑起来,有时候能挂上,有时候直接被拒,尤其是非农前后那几分钟几乎必挂。我试过把距离拉大到30点、50点,情况好一点但偶尔还是报错。也试过用SymbolInfoDouble去取Ask和Bid,加个NormalizeDouble处理小数位,5位报价的欧美我按3位归一化,理论上没问题。
然后我怀疑是不是经纪商那边有最小挂单距离限制,就去查了SYMBOL_TRADE_STOPS_LEVEL,返回的是0,按理说没有硬性限制。又试了把OrderSendAsync换成同步的OrderSend,报错信息一样。现在有点懵,到底是我的价格计算逻辑有问题,还是这家经纪商的撮合引擎对挂单距离有隐藏要求?有没有汇友遇到过类似的情况,你们是怎么排查的?
