bool CloseAll()
{
bool error=true;
int err,nn,OT;
string Symb;
while(true)
{
for (int j = OrdersTotal()-1; j >= 0; j--)
{
if (OrderSelect(j, SELECT_BY_POS))
{
Symb = OrderSymbol();
if ((Symb == Symbol() || AllSymbol) && (Magic==0 || Magic==OrderMagicNumber()))
{
OT = OrderType();
if (OT>1)
{
OrderDelete(OrderTicket());
}
if (OT==OP_BUY)
{
error=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(Symb,MODE_BID),MarketInfo(Symb,MODE_DIGITS)),3,Blue);
if (error) if(Alert_ON) Alert(Symb," Закрыт ордер N ",OrderTicket()," прибыль ",OrderProfit(),
" ",TimeToStr(TimeCurrent(),TIME_SECONDS));
}
if (OT==OP_SELL)
{
error=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(Symb,MODE_ASK),MarketInfo(Symb,MODE_DIGITS)),3,Red);
if (error) if(Alert_ON) Alert(Symb," Закрыт ордер N ",OrderTicket()," прибыль ",OrderProfit(),
" ",TimeToStr(TimeCurrent(),TIME_SECONDS));
}
if (!error)
{
err = GetLastError();
if (err<2) continue;
if (err==129)
{ if(Comment_ON) Comment("Неправильная цена ",TimeToStr(TimeCurrent(),TIME_MINUTES));
Sleep(5000);
RefreshRates();
continue;
}
if (err==146)
{
if (IsTradeContextBusy()) Sleep(2000);
continue;
}
if(Comment_ON) Comment("Ошибка ",err," закрытия ордера N ",OrderTicket(),
" ",TimeToStr(TimeCurrent(),TIME_MINUTES));
}
}
}
}
int n=0;
for (j = 0; j < OrdersTotal(); j++)
{
if (OrderSelect(j, SELECT_BY_POS))
{
if ((OrderSymbol() == Symbol() || AllSymbol) && (Magic==0 || Magic==OrderMagicNumber()))
{
OT = OrderType();
if (OT==OP_BUY || OT==OP_SELL) n++;
}
}
}
if (n==0) break;
nn++;
if (nn>10) { if(Alert_ON) Alert(Symb," Не удалось закрыть все сделки, осталось еще ",n);return(0);}
Sleep(1000);
RefreshRates();
}
return(1);
}