MT scrip 里面本来就有一个close脚本,每次只能平仓一个订单,我加了个循环语句,就可以把所有open order 都平仓掉了。 这个还是放在Scrip目录里面。 int start() { bool result; double price; int i,cmd,error; //---- // for(i=0;i<OrdersTotal();i++) { if(OrderSelect(0,SELECT_BY_POS,MODE_TRADES)) { cmd=OrderType(); //---- first order is buy or sell if(cmd==OP_BUY || cmd==OP_SELL) { while(true) { if(cmd==OP_BUY) price=MarketInfo(OrderSymbol(),MODE_BID); else price=MarketInfo(OrderSymbol(),MODE_ASK); result=OrderClose(OrderTicket(),OrderLots(),price,3,CLR_NONE); if(result!=TRUE) { error=GetLastError(); Print("LastError = ",error); } else error=0; if(error==135) RefreshRates(); else break; } } } else Print( "Error when order select ", GetLastError()); } //---- return(0); }
顺势加码 兄厉害,一看就知道真的用程序为自己的交易服务,考虑的比较全面,实战派! 其中滑点参数 3,可以用marketinfo函数获取比较好,因为对黄金这样的单子来说,点差一般50-100,3点是否有点小? 另外,对死循环的情况,最好考虑一个次数或者时间限制。 对服务器端执行的程序,的确,相当的时间基本在考虑如何保证成交,保证程序得到执行了。
1)滑点参数可以用: MarketInfo(OrderSymbol(),MODE_SPREAD) ,这样就可以适应不同货币对的需求了。 2)这个程序本来就在 Script 目录下面的,我只是加了一个循环语句,在Script里面,程序只会执行一次,所以不会卡机的。 3)对于expert 和 indicator里面的循环语句,我发现用双核的机器运行起来比较流畅。