| / | 论坛 |
|
010
2010.01.27 18:48
您好Loong,经上面两种情形的测试,iexe的结果相同,都是9161,这么说就没有重复执行start()的情况出现。 // 23:25:14 2009.12.01 23:59 AA EURUSD,M1: iexe=9161 |
|
010
2010.01.28 05:31
为了说明问题把程序控制在只执行一小段时间内,代码附后,改变中断就会出现不同的情况。 double Lot=0.01; int start() { //---- if(!(TimeCurrent()>=StrToTime("2009.12.01 16:00") && TimeCurrent()<=StrToTime("2009.12.01 16:20"))) return(0); static int iexe = 0; iexe++; Print("iexe=", iexe); if(OpenSellS(PERIOD_M1)) OpenSellOk(111); if(OpenSellS(PERIOD_M5)) OpenSellOk(222); return(0); } //+------------------------------------------------------------------+ void OpenSellOk(int MagicNu) { int SOK; if(OrdersTotal()==0) SOK=OrderSend(Symbol(),OP_SELL,Lot,Bid,3,Bid+50*Point,Bid-5*Point,"HaHa",MagicNu,0,Blue); else { for(int i=OrdersTotal()-1;i>=0;i--) { Print("i=", i, ", OrdersTotal()=", OrdersTotal()); if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)==true) { if(OrderSymbol() == Symbol() && OrderType()==OP_SELL && OrderMagicNumber()==MagicNu && OrderOpenPrice( )<Bid) { Lot=OrderLots( )+0.01; SOK=OrderSend(Symbol(),OP_SELL,Lot,Bid,3,Bid+50*Point,Bid-5*Point,"HaHa",MagicNu,0,Blue); // break; } break;//----为什么中断放在这里才能正确在不同价位开仓 } else return(0); } } } bool OpenSellS(int _Period) { if(_Period==1 && TimeCurrent()>=StrToTime("2009.12.01 16:05") && TimeCurrent()<=StrToTime("2009.12.01 16:09")) return(true); else return(false); if(_Period==5 && TimeCurrent()>=StrToTime("2009.12.01 16:05") && TimeCurrent()<=StrToTime("2009.12.01 16:15")) return(true); else return(false); } |
|
Loong
2010.01.28 12:11
解决办法:
1.不用break,直接return试试。 2.不要在for结构里调OrdersTotal,在外面调,存在变量里,这样至少不会被OrderSend影响。但是不能保证完全遍历Orders。 3.不要在for循环里调OrderSend,只置个标志变量,然后break,这样应该能保证退出循环,再根据标志变量决定要不要OrderSend。 任何一种应该都可以,1最简单,2有漏洞,3逻辑清晰。 |
|
Loong
2010.01.28 12:11
时间限制条件定义成输入参数比较方便
extern datetime timeBegin = D'2009.12.01 16:00'; extern datetime timeEnd = D'2009.12.01 16:20'; int start() { if(!(TimeCurrent()>=timeBegin && TimeCurrent()<=timeEnd)) return(0); http://docs.mql4.com/basis/types/datetime |
|
010
2010.01.28 19:46
我想明白了,为什么中断放在判断句后结果是正确的,即始终只要最后成交的那一单,其它没有必要看。 // 再次感谢Loong的热心帮助。 |