Скачать MetaTrader 5

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

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

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

--== Торгуй Форекс Большой И Мальнький ==--
o_o
Модератор
23700
o_o 2010.04.11 19:46  
OrderClose
Костя
24
Костя 2010.04.11 19:47  
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 ??????????????
o_o
Модератор
23700
o_o 2010.04.11 19:48  
OrdersTotal
OrderSelect
OrderTicket
OrderClose
o_o
Модератор
23700
o_o 2010.04.11 19:49  
или вот готовое решение

//---------------------------------------------------------------   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);
}
o_o
Модератор
23700
o_o 2010.04.11 19:51  
if (a=1) // Если истина, идем дальше
{
CloseOrders(-1, 88888, Symbol()); // <--- ТУТ необходимо закрыть все ордера

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

}
Vasiliy Orlov
1175
Vasiliy Orlov 2010.04.11 19:53  
для тестера сойдет и такой вариант
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);
}
Костя
24
Костя 2010.04.11 19:59  
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 "
o_o
Модератор
23700
o_o 2010.04.11 20:06  
все ордера указанного маджика и указанной валюты.
Rustamzhan Salidzhanov
7684
Rustamzhan Salidzhanov 2010.04.11 20:36  

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

Vasiliy Orlov
1175
Vasiliy Orlov 2010.04.11 20:38  
xrust >>:

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

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

12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий