"条件达到后不平仓" ---
那一定是条件没有达到,你应该表述下你的平仓条件,不然无法判断你代码逻辑是否正确。
for(i=0; i<=OrdersTotal(); i++) 应该写成 for(i=0; i<OrdersTotal(); i++)
"条件达到后不平仓" ---
那一定是条件没有达到,你应该表述下你的平仓条件,不然无法判断你代码逻辑是否正确。
"条件达到后不平仓" ---
那一定是条件没有达到,你应该表述下你的平仓条件,不然无法判断你代码逻辑是否正确。
非常感谢,不过我修改了一下,去掉等号。貌似还是不行。
说一下这个EA的思路:
这个EA是原油套利型的,
A策略是多布油,空美油,
B策略反过来空布油,多美油,
两套策略各自执行:
1、两油价差在各自的范围内执行A/B策略开单,(如:两油价差最低4.0最高9.0的范围内执行A策略——多布油,空美油)
2、如果A策略开仓以后,价差缩小一个“价差缩小”参数,加仓一次;B策略则是价差扩大加仓;
3、平仓条件是,AB策略各自的最后一对开仓盈利一个“止盈价差”,则各自平仓,
4、另外,周五如果不亏损则平保不再开仓。
策略其实比较简单,发布出来的是运行逻辑。
至于运行逻辑以外的功能函数都是也都是比较简单的函数,这些功能函数都是我在别的EA里面运行没有问题的,考虑到都贴出来篇幅扩大,看着杂乱,所以就没有贴出来。
问题出在运行逻辑上,我对代码是业余水平,里面估计会有一些语法错误,
本来这个EA运行起来的问题是开仓后立马就平仓,秒开秒平的,这个问题也是困扰了我一个月。有一天突然想到会不会是返回值的问题,于是在开仓逻辑和平仓逻辑的结尾各自加了一个return(0)——代码中除了最后一个return(0)之外的另4个return(0);
然后开仓就不会秒平了,但是变成了现在这样,不会平仓了。
3、平仓条件是,AB策略各自的最后一对开仓盈利一个“止盈价差”,则各自平仓,
--
你这个表示也不是很清晰,各自最后一对貌似还有看品种,然后还要看单子类型
看你代码中找各自最后一对单子和盈利是不对的,应该按照开仓时间找到最后的单子,另外你遍历单子时没有确认OrderSymbol(),
问题比较多,不是几句话就帮你解决。
//依据开仓时间最后,找到该单子,输入参数品种,单子类型,magic int GetLastOrderTicket(string sym,int orderType,int magic) { datetime ot = 0; int ticket = -1; for(int i=OrdersTotal()-1;i>=0;i--) { if(OrderSelect(i,SELECT_BY_POS)) { if(OrderSymbol()==sym && OrderType()==orderType && OrderMagicNumber()==magic) { if(OrderOpenTime()>ot){ot=OrderOpenTime();ticket=OrderTicket();} } } } return(ticket); } //根据单号,获得该单子的总盈利 double GetLastOrderProfit(int ticket) { double pft = 0; if(OrderSelect(ticket,SELECT_BY_TICKET)) { pft = OrderProfit()+OrderCommission()+OrderSwap(); } return(pft); }
开单正常,就是条件达到以后不会平仓。麻烦高手给指导一下吧,谢谢拉!