Чтобы закрыть ордер, долго «висящий» в рынке можно данной функцией. Параметр функции — количество баров, после прохождения которых ордер будет закрыт.
void CloseTradesBarsAgo(int bars)
{
int count = 0;
for(int i = OrdersTotal()-1; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(iBarShift(Symbol(),0,OrderOpenTime(),false)>=bars)
{
if(OrderSymbol()==Symbol() && OrderType()<=1 && OrderMagicNumber()==Magic)
{
if(OrderType()==OP_BUY)
OrderClose(OrderTicket(),OrderLots(),Bid,30,clrRosyBrown);
if(OrderType()==OP_SELL)
OrderClose(OrderTicket(),OrderLots(),Ask,30,clrRosyBrown);
}
}
}
}
}