标题:EA运行报错了求帮助
正文:
各位汇友大佬好,小弟刚学EA编程不久,最近在跑一个简单的均线交叉策略时遇到了一个报错,折腾了两天没解决,特来求助。
问题是这样:我写了一个基于MA5和MA20的自动交易EA,在回测时一切正常,但挂到实盘模拟账户上跑了几分钟后,日志里频繁出现“OrderSend error 138”和“OrderSend error 130”的提示。我查过MT4错误码表,138是“需要重新报价”,130是“无效止损或止盈值”。但我明明在代码里用MarketInfo()函数检查了当前报价,并且止损止盈都是用NormalizeDouble()处理过的,不应该有格式问题啊。
附上关键代码片段(简化版):
double ma5 = iMA(NULL,0,5,0,MODE_SMA,PRICE_CLOSE,0);
double ma20 = iMA(NULL,0,20,0,MODE_SMA,PRICE_CLOSE,0);
if(ma5 > ma20 && OrdersTotal()==0) {
double ask = MarketInfo("EURUSD",MODE_ASK);
double sl = ask - 200*Point;
double tp = ask + 300*Point;
int ticket = OrderSend("EURUSD",OP_BUY,0.1,ask,3,sl,tp,"",0,0,Green);
}
我怀疑是不是因为网络延迟导致报价刷新不及时,或是止损设置离当前价格太近被平台拒绝了?另外,我尝试加了RefreshRates()函数在OrderSend前面,但报错依然出现。有前辈建议用OrderSelect()和OrderModify()重试机制,但我对这块不太熟。
望有经验的大佬指点一下,是参数设置问题还是需要加循环重试?先谢过各位了!
正文:
各位汇友大佬好,小弟刚学EA编程不久,最近在跑一个简单的均线交叉策略时遇到了一个报错,折腾了两天没解决,特来求助。
问题是这样:我写了一个基于MA5和MA20的自动交易EA,在回测时一切正常,但挂到实盘模拟账户上跑了几分钟后,日志里频繁出现“OrderSend error 138”和“OrderSend error 130”的提示。我查过MT4错误码表,138是“需要重新报价”,130是“无效止损或止盈值”。但我明明在代码里用MarketInfo()函数检查了当前报价,并且止损止盈都是用NormalizeDouble()处理过的,不应该有格式问题啊。
附上关键代码片段(简化版):
double ma5 = iMA(NULL,0,5,0,MODE_SMA,PRICE_CLOSE,0);
double ma20 = iMA(NULL,0,20,0,MODE_SMA,PRICE_CLOSE,0);
if(ma5 > ma20 && OrdersTotal()==0) {
double ask = MarketInfo("EURUSD",MODE_ASK);
double sl = ask - 200*Point;
double tp = ask + 300*Point;
int ticket = OrderSend("EURUSD",OP_BUY,0.1,ask,3,sl,tp,"",0,0,Green);
}
我怀疑是不是因为网络延迟导致报价刷新不及时,或是止损设置离当前价格太近被平台拒绝了?另外,我尝试加了RefreshRates()函数在OrderSend前面,但报错依然出现。有前辈建议用OrderSelect()和OrderModify()重试机制,但我对这块不太熟。
望有经验的大佬指点一下,是参数设置问题还是需要加循环重试?先谢过各位了!
专注交易策略编程实现,分享MQL开发技巧与代码优化方案