这类错误,是因为Ordermodify()中,止损止盈点的设置有问题,过小所致
将止损止盈加大1个Point就可以了
下面的例子能够解决:
原来的代码段如下——————
//+------------------------------------------------------------------+ int _MoveStopCZ(int MAGIC, double BASE,int ORDERTYPE)//_MoveStop(MAGIC, MOVE); { //---- double BaseTemp=NormalizeDouble(BASE,Digits); for ( int z = OrdersTotal() - 1; z >= 0; z -- ) { if ( !OrderSelect( z, SELECT_BY_POS ) ) { Print("OrderSelect(", z, ",SELECT_BY_POS) - Error #",GetLastError() ); continue; } if (OrderSymbol()!=Symbol())continue; if (OrderMagicNumber() != MAGIC )continue; if (OrderType()==ORDERTYPE) { if (ORDERTYPE==OP_BUY && OrderStopLoss()<BaseTemp-1*Point) if(!OrderModify(OrderTicket(),OrderOpenPrice(),BaseTemp,OrderTakeProfit(),OrderExpiration())) { return(-1); } if (ORDERTYPE==OP_SELL && OrderStopLoss()>BaseTemp+1*Point) if(!OrderModify(OrderTicket(),OrderOpenPrice(),BaseTemp,OrderTakeProfit(),OrderExpiration())) { return(-1); } } } //---- return(0); } //+------------------------------------------------------------------+
修改之后的代码段:——
//+------------------------------------------------------------------+ int _MoveStopCZ(int MAGIC, double BASE,int ORDERTYPE)//_MoveStop(MAGIC, MOVE); { //---- double BaseTemp=NormalizeDouble(BASE,Digits); for ( int z = OrdersTotal() - 1; z >= 0; z -- ) { if ( !OrderSelect( z, SELECT_BY_POS ) ) { Print("OrderSelect(", z, ",SELECT_BY_POS) - Error #",GetLastError() ); continue; } if (OrderSymbol()!=Symbol())continue; if (OrderMagicNumber() != MAGIC )continue; if (OrderType()==ORDERTYPE) { if (ORDERTYPE==OP_BUY && NormalizeDouble(OrderStopLoss(),Digits)!=NormalizeDouble(BaseTemp,Digits)) if(!OrderModify(OrderTicket(),OrderOpenPrice(),BaseTemp,OrderTakeProfit(),OrderExpiration())) { return(-1); } if (ORDERTYPE==OP_SELL && NormalizeDouble(OrderStopLoss(),Digits)!=NormalizeDouble(BaseTemp,Digits)) if(!OrderModify(OrderTicket(),OrderOpenPrice(),BaseTemp,OrderTakeProfit(),OrderExpiration())) { return(-1); } } } //---- return(0); } //+------------------------------------------------------------------+
代码中加入了修改订单止损的条件:
NormalizeDouble(OrderStopLoss(),Digits)!=NormalizeDouble(BaseTemp,Digits)
意义在于:如果当前的止损价没有被修改时,那么就进行修改。
否则如果当前的止损价已经被修改了,那么就不往下执行(就不进行修改了)
这个ordermodify error 1到底是怎么回事,是不是检测的问题?因为在模拟服务器上运行都没有问题的???
请高手指点!