測試頁面改一下滑點的設置
EA代碼也要調整下滑點
回測是完美交易環境 模擬盤跟實盤並不是完美交易環境
代码下单是有限制的,一个小时只下一次单,要考虑是否条件满足,但不到一小时的情况,仅供参考
EA没有按照自己的设计逻辑运行,那就需要逐步排查错误,最简单的排查方法就是在每个交易条件之后添加Alert来查看,比如第1个条件之后添加Alert("EA运行到位置1这里了",条件值1); 第2个条件之后添加Alert("EA运行到位置2这里了",条件值2);后面的条件依此类推,这样你就知道EA运作到哪个条件之后就停住不动了,对比打印出来的数值跟逻辑预期到底对不对,祝你好运。
感谢几位朋友的指点
反复找原因,发现问题是:Lot计算时用到月线最高价,而月K线数有时候未能获取到, 导致Lot为0
int bars=Bars(Symbol(),43200); if(bars<=0) //无有效月K线 { bool synchronized=false; int attempts=0; while(attempts<5) { if(SeriesInfoInteger(Symbol(),0,SERIES_SYNCHRONIZED)) { synchronized=true; break; } attempts++; Sleep(200); } if(!synchronized) { Print("Failed to get number of bars for ",Symbol()); idisplay("-1", "无法获取月K线数", 308,53,12, Clr); } } double HighPrice=0, Contract=MarketInfo(Symbol(),MODE_LOTSIZE); // 以基础货币计算的手数 即合约 if(bars>0) HighPrice=iHigh(Symbol(),43200,iHighest(Symbol(),43200,MODE_HIGH,bars-1,1)); // 本月之前最高价 if(HighPrice*Contract/100!=0) Lot=NormalizeDouble(AccountEquity()/(HighPrice*Contract/杠杆)*仓位比例,dit);
bool类型的 标示符SERIES_SYNCHRONIZED (同步数据) MT5文档有介绍,
但在MT4文档中 未列出该标示符。 不过对于MT4最新版,实际也是可用的。
针对MT4所写的EA, 加载到MT4平台服务器实盘,总是很多时候该下单而没有反应,也没有报错。
但用该平台该服务器的历史数据进行回测又十分准确,无一漏单。
郁闷中....