Мы уже знаем, как можно выставить отложенный ордер. Для этого надо использовать функцию OrderSend(). Также мы умеем изменять параметры отложенных ордеров с помощью функции OrderModify().
В данной статье будет рассказано о том, как можно удалить отложенный ордер. Это можно сделать с помощью функции OrderDelete().
bool OrderDelete(int ticket)
Эта функция удаляет отложенный ордер с тикером ticket. Функция возвращает true в случае успешного удаления и false - в случае возникновения ошибки. Код ошибки можно получить, вызвав функцию GetLastError().
Применение функции OrderDelete() рассмотрим на следующем примере:
Предположим, что наш эксперт по какой-то логике (не будем здесь вдаваться в подробности) выставляет по одному инструменту сразу два отложенных ордера - Buy Limit и Sell Limit. Наша задача - если один из ордеров сработал, то удалить оставшийся отложенный ордер. Предположим, что по данному инструменту работает только наш эксперт. |
// просмотрим все открытые позиции и выставленные ордера int pos; for(pos=0; pos<OrdersTotal(); pos++) { // выделим текущий ордер, чтобы получить о нем информацию if (OrderSelect(pos, SELECT_BY_POS)) { // Если "магическое" число совпадает и это открытая позиция if ((OrderMagicNumber()==MyMagicNumber) && (OrderType()<=OP_SELL)) { // найти второй отложенный ордер int i; for(i=0; i<OrdersTotal(); i++) { if (OrderSelect(i, SELECT_BY_POS)) { if ((OrderMagicNumber()==MyMagicNumber) && (OrderType()>OP_SELL)) { // ордер найден - удалим его if (OrderDelete(OrderTicket())) { Print("Ордер удален"); } else { Print("Ошибка ", GetLastError(), " при удалении ордера"); } } } } // выйти из цикла break; } } }
В следующем выпуске мы продолжим рассмотрение торговых функций и расскажем о функции OrderClose().
Есть что сказать? Не стесняйтесь!
Последние статьи:
Видео по теме:
УГОЛОК АДМИНИСТРАТОРА