MQL4. Советник. Закрыть все ордера. HELP

 
Привет всем. Пишу советник 1й раз. Все круто, кроме 1го. Попал в тупик при необходимой команде "закрыть либо предыдущий ордер, либо все ордера" Вот суть кода:
  if (a=1)  // Если истина, идем дальше
{
  // <--- ТУТ необходимо закрыть все ордера 
OrderSend(Symbol(), OP_SELL, Lots, Bid, 3, Bid+StopLoss*Point, Bid-TakeProfit*Point, "Sell", 88888, 0, Green); //Открываем ордер на продажу
   
}

Как это можно организовать. Жду помощи. СПС.

--== Торгуй Форекс Большой И Мальнький ==--
 
OrderClose
 
bool OrderClose(    int ticket, double lots, double price, int slippage, color Color=CLR_NONE)

Параметры:ticket - Уникальный порядковый номер ордера.
lots - Количество лотов для закрытия.
price - Цена закрытия.
slippage - Значение максимального проскальзывания в пунктах.
Color - Цвет стрелки закрытия на графике. Если параметр отсутствует или его значение равно CLR_NONE, то стрелка на графике не отображается.

Пример:
if(iRSI(NULL,0,14,PRICE_CLOSE,0)>75)
{
OrderClose(order_id,1,Ask,3,Red);
return(0);
}



ДААА!!! но как мне узнать order_id ??????????????
 
OrdersTotal
OrderSelect
OrderTicket
OrderClose
 
или вот готовое решение

//---------------------------------------------------------------   CloseOrders
bool CloseOrders(int dir, int SysID, string smb)
{
  // Функция закрытия ордеров
        int i, total = OrdersTotal();   if (total<=0) return(true);
        int ticket[1000], nt=0; double op;

        nt=0;
        for (i=0; i<total; i++) 
        {       
                if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) return(false); 
                if ((OrderType()==dir||dir<0) && (OrderMagicNumber()==SysID) && (OrderSymbol()==smb))
                { ticket[nt]=OrderTicket(); nt++; }
        }
        for (i=0; i<nt; i++)
        {       
                OrderSelect(ticket[i], SELECT_BY_TICKET);       
                RefreshParam(OrderSymbol());
                if (OrderType()==OP_BUY) if (!OrderClose(ticket[i], OrderLots(), _Bid, Slip)) return(false);
                if (OrderType()==OP_SELL) if (!OrderClose(ticket[i], OrderLots(), _Ask, Slip)) return(false);
                if (OrderType()==OP_BUYLIMIT || OrderType()==OP_SELLLIMIT || OrderType()==OP_BUYSTOP || OrderType()==OP_SELLSTOP)
                        if (!OrderDelete(ticket[i])) return(false);
        }
        return(true);
}
 
if (a=1) // Если истина, идем дальше
{
CloseOrders(-1, 88888, Symbol()); // <--- ТУТ необходимо закрыть все ордера

OrderSend(Symbol(), OP_SELL, Lots, Bid, 3, Bid+StopLoss*Point, Bid-TakeProfit*Point, "Sell", 88888, 0, Green); //Открываем ордер на продажу

}
 
для тестера сойдет и такой вариант
extern int slippage=1000;
void close(){
for(int i=OrdersTotal()-1;i>=0;i--){
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderType()==OP_BUY)OrderClose(OrderTicket(),OrderLots(),Bid,slippage,0);
if(OrderType()==OP_SELL)OrderClose(OrderTicket(),OrderLots(),Ask,slippage,0);
}
 
sergeev >>:
if (a=1) // Если истина, идем дальше
{
CloseOrders(-1, 88888, Symbol()); // <--- ТУТ необходимо закрыть все ордера

OrderSend(Symbol(), OP_SELL, Lots, Bid, 3, Bid+StopLoss*Point, Bid-TakeProfit*Point, "Sell", 88888, 0, Green); //Открываем ордер на продажу

}


Немогу понять, что тут обозначает " -1 "
 
все ордера указанного маджика и указанной валюты.
 

и в тестере без нормализации не закроет

 
xrust >>:

и в тестере без нормализации не закроет

ну как сказать, закрывает же

Причина обращения: