开仓及平仓的程序问题

 

请教一下,

void CheckForOpen()
{
if(Time[0]==lasttime) return; //每时间周期检查一次
lasttime=Time[0];
nowbuyorsell=buyorsell(); //获取交易信号
if (nowbuyorsell==1) //如果之前有卖单未平仓,则先平卖单后开多单
{
if(OrdersTotal()>0)
{
for (int i=OrdersTotal()-1;i<0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) break;
if(OrderType()==OP_SELL)
{
OrderClose(OrderTicket(),OrderLots(),Bid,3,White);
}
}
}
OrderSend(Symbol(),OP_BUY,LotsOptimized(),Bid,3,Ask-sp*Point,0,"",MAGICMA,0,Blue);
}
if (nowbuyorsell==-1) //如果之前有买单未平仓,则先平卖单后开空单
{
if(OrdersTotal()>0)
{
for (i=OrdersTotal()-1;i<0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) break;
if(OrderType()==OP_BUY)
{
OrderClose(OrderTicket(),OrderLots(),Ask,3,White);
}
}
}
OrderSend(Symbol(),OP_SELL,LotsOptimized(),Ask,3,Bid-sp*Point,0,"",MAGICMA,0,Red);
}
return;
}

我主要是想在获得交易信号后,先把以前未平仓的单先平仓,后再开反方向单.因为没有设置止赢位,只设止损位,用移动止损来确定赢利

例如.现在的交易信号可以做多,那就先把以前开的空仓,平掉,同时开多单.

但执行这段代码后没反应.

原因: