Скачать MetaTrader 5

Функция OrderClose - Error 4051

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

Добрый День. 

 Решил начать программировать на mql. Написал советник, проверяя как открываются и закрываются ордера. Открывается ордер при соответствующих условиях нормально, а при закррытии появляется Error 4051 - Invalid ticket to OrderClose Function. Помогите пожалуйста разобраться, что я делаю не так. Код советника ниже.

 

 


double MA;
MA=iMA(NULL,0,MA_Period,0,MODE_SMA,0,0);
int T;
T=OrdersTotal();
int ticket;
bool a;

if(Ask>MA+2*Point && T==0)
{ticket=OrderSend(Symbol(),0,0.01,Ask,3,0,0);
}

if (Bid<MA && T>0)
{OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES);
RefreshRates();
a=OrderClose(ticket,0.01,Bid,5);
}

Alexander
4069
Alexander  

После открытия позиции тикет у Вас не сохраняется. И при следующем запуске start переменная ticket инициализируется нулём. Нужно объявить ею как статическую или глобальную чтобы её значение сохранялось. Также полезно контролировать выполнение функции OrderSelect, например:

if {OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) {
      RefreshRates();
      a=OrderClose(ticket,0.01,Bid,5);
   }
else Print("Ticket=", ticket);
} 
Alex-xx
5
Alex-xx  

Что я не так зделал, подскажите плиз

выбираю ордер, узнаю тип, узнаю тиккет, пытаюсь удалить отложенный ордер - выдаёт ошибка 4051

Недопустимое значение параметра функции


OrderSelect(1,SELECT_BY_POS);

a2=OrderType();
ticket2=OrderTicket() ;

if (a2>1)
OrderDelete(ticket2);
Alert (GetLastError()); // Сообщение об ошибке 4051

Alex-xx
5
Alex-xx  
P.S. это второй ордер по счёту, параметр: OrderSelect(1,SELECT_BY_POS); верный
Alex-xx
5
Alex-xx  
приведите пример как правильно удалить отложенный ордер )))
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий