- Главное событие экспертов: OnTick
- Основные принципы и понятия: ордер, сделка, позиция
- Типы торговых операций
- Типы ордеров
- Режимы исполнения ордеров по цене и объемам
- Сроки действия отложенных ордеров
- Расчет залога для будущего ордера: OrderCalcMargin
- Оценка прибыли торговой операции: OrderCalcProfit
- Структура торгового запроса MqlTradeRequest
- Структура проверки запроса MqlTradeCheckResult
- Проверка корректности запроса: OrderCheck
- Результат отправки запроса: структура MqlTradeResult
- Отправка торгового запроса: OrderSend и OrderSendAsync
- Совершение покупки или продажи
- Модификация уровней Stop Loss и/или Take Profit позиции
- Трейлинг стоп
- Полное и частичное закрытие позиции
- Полное и частичное закрытие встречных позиций (хедж)
- Установка отложенного ордера
- Модификация отложенного ордера
- Удаление отложенного ордера
- Получение списка действующих ордеров
- Свойства ордеров (действующих и в истории)
- Функции для чтения свойств действующих ордеров
- Отбор ордеров по свойствам
- Получение списка позиций
- Свойства позиций
- Функции для чтения свойств позиций
- Свойства сделок
- Выборка ордеров и сделок из истории
- Функции для чтения свойств ордеров из истории
- Функции для чтения свойств сделок из истории
- Типы торговых транзакций
- Событие OnTradeTransaction
- Синхронные и асинхронные запросы
- Событие OnTrade
- Контроль за изменениями торгового окружения
- Особенности создания мультисимвольных экспертов
- Ограничения и преимущества экспертов
- Создание заготовки эксперта в Мастере MQL
Удаление отложенного ордера
Удаление отложенного ордера выполняется на программном уровне с помощью операции TRADE_ACTION_REMOVE: эту константу следует присвоить полю action структуры MqlTradeRequest перед вызовом одной из разновидностей функции OrderSend. Единственным обязательным полем, помимо action, является order, куда следует записать тикет удаляемого ордера.
В связи с этим метод remove в прикладной структуре MqlTradeRequestSync из файла MqlTradeSync.mqh довольно простой.
struct MqlTradeRequestSync: public MqlTradeRequest
|
Проверка факта удаления ордера делается по традиции в методе completed.
bool completed()
|
Ожидание фактического удаления ордера производится в методе removed структуры MqlTradeResultSync, также по привычной схеме.
struct MqlTradeResultSync: public MqlTradeResult
|
Пример эксперта (PendingOrderDelete.mq5), демонстрирующего удаление ордера, построим практически целиком на PendingOrderSend.mq5. Это обусловлено тем, что так проще гарантировать наличие ордера перед удалением. Таким образом, сразу после запуска эксперт создаст новый ордер с заданными параметрами, а его удаление осуществляется в обработчике OnDeinit. Если изменить входные параметры советника, символ или таймфрейм графика, старый ордер также будет удален, а новый создан.
Для хранения тикета ордера заведена глобальная переменная OwnOrder, которая заполняется в результате вызова PlaceOrder (сама функция — без изменений).
ulong OwnOrder = 0;
|
Для удаления написана простая функция RemoveOrder, создающая объект request и вызывающая для него последовательно методы remove и completed.
void OnDeinit(const int)
|
В следующем фрагменте журнала показаны записи, появившиеся в результате размещения эксперта на графике EURUSD, после чего символ был переключен на XAUUSD, а затем эксперт удален.
(EURUSD,H1) Autodetected daily range: 0.0094 (EURUSD,H1) OK order placed: #=1284920879 (EURUSD,H1) TRADE_ACTION_PENDING, EURUSD, ORDER_TYPE_BUY_STOP, V=0.01, ORDER_FILLING_FOK, » » @ 1.11011, ORDER_TIME_GTC, M=1234567890 (EURUSD,H1) DONE, #=1284920879, V=0.01, Request executed, Req=1 (EURUSD,H1) OK order removed (EURUSD,H1) TRADE_ACTION_REMOVE, EURUSD, ORDER_TYPE_BUY, ORDER_FILLING_FOK, #=1284920879 (EURUSD,H1) DONE, #=1284920879, Request executed, Req=2 (XAUUSD,H1) Autodetected daily range: 47.45 (XAUUSD,H1) OK order placed: #=1284921672 (XAUUSD,H1) TRADE_ACTION_PENDING, XAUUSD, ORDER_TYPE_BUY_STOP, V=0.01, ORDER_FILLING_FOK, » » @ 1956.68, ORDER_TIME_GTC, M=1234567890 (XAUUSD,H1) DONE, #=1284921672, V=0.01, Request executed, Req=3 (XAUUSD,H1) OK order removed (XAUUSD,H1) TRADE_ACTION_REMOVE, XAUUSD, ORDER_TYPE_BUY, ORDER_FILLING_FOK, #=1284921672 (XAUUSD,H1) DONE, #=1284921672, Request executed, Req=4 |
Мы рассмотрим другой пример удаления ордеров для реализации стратегии "One Cancel Other" (OCO) в разделе о событиях OnTrade.