Функция CloseAll() — Закрыть все открытые ордера. Из названия уже становиться понятно, какую функцию он выполняет.
Функция учитывает Magic ордера, поэтому её необходимо использовать с учётом названия параметра вашего магического номера, либо удалить из условия
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
часть && OrderMagicNumber() == Magic
Т.е. условие будет выглядеть так:
if (OrderSymbol() == Symbol())
Итак, функция:
//+------------------------------------------------------------------+ //| Expert function | //+------------------------------------------------------------------+ void CloseAll() { bool IsClosed; int err = 0, counter = 0, MaxTry = 100; // количество попыток на закрытие ордера for (int trade = OrdersTotal() - 1; trade >= 0; trade--) { if (OrderSelect(trade, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) { if (OrderType() == OP_BUY) { IsClosed = false; counter = 0; while(!IsClosed) { IsClosed = OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, Black); if (!IsClosed) { err = GetLastError(); Print("Ошибка закрытия ордера " + IntegerToString(OrderTicket()) +", код ошибки: "+ IntegerToString(err)); counter++; if (counter >= MaxTry) break; Sleep(100); RefreshRates(); } } } if (OrderType() == OP_SELL) { IsClosed = false; counter = 0; while(!IsClosed) { IsClosed = OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, Black); if (!IsClosed) { err = GetLastError(); Print("Ошибка закрытия ордера " + IntegerToString(OrderTicket()) +", код ошибки: "+ IntegerToString(err)); counter++; if (counter >= MaxTry) break; Sleep(100); RefreshRates(); } } } } Sleep(100); } } } //+------------------------------------------------------------------+