- Главное событие экспертов: OnTick
- Основные принципы и понятия: ордер, сделка, позиция
- Типы торговых операций
- Типы ордеров
- Режимы исполнения ордеров по цене и объемам
- Сроки действия отложенных ордеров
- Расчет залога для будущего ордера: OrderCalcMargin
- Оценка прибыли торговой операции: OrderCalcProfit
- Структура торгового запроса MqlTradeRequest
- Структура проверки запроса MqlTradeCheckResult
- Проверка корректности запроса: OrderCheck
- Результат отправки запроса: структура MqlTradeResult
- Отправка торгового запроса: OrderSend и OrderSendAsync
- Совершение покупки или продажи
- Модификация уровней Stop Loss и/или Take Profit позиции
- Трейлинг стоп
- Полное и частичное закрытие позиции
- Полное и частичное закрытие встречных позиций (хедж)
- Установка отложенного ордера
- Модификация отложенного ордера
- Удаление отложенного ордера
- Получение списка действующих ордеров
- Свойства ордеров (действующих и в истории)
- Функции для чтения свойств действующих ордеров
- Отбор ордеров по свойствам
- Получение списка позиций
- Свойства позиций
- Функции для чтения свойств позиций
- Свойства сделок
- Выборка ордеров и сделок из истории
- Функции для чтения свойств ордеров из истории
- Функции для чтения свойств сделок из истории
- Типы торговых транзакций
- Событие OnTradeTransaction
- Синхронные и асинхронные запросы
- Событие OnTrade
- Контроль за изменениями торгового окружения
- Особенности создания мультисимвольных экспертов
- Ограничения и преимущества экспертов
- Создание заготовки эксперта в Мастере MQL
Режимы исполнения ордеров по цене и объемам
При отправке торговых запросов нам нужно будет указать в алгоритме особым образом цену и объем покупки/продажи. При этом необходимо учитывать, что на финансовых рынках нет гарантии, что в данный момент по финансовому инструменту доступен весь запрашиваемый объем по желаемой цене. Поэтому проведение торговых операций регулируется с помощью режимов (или политик) исполнения по цене и объему. Они определяют правила для случаев, когда в процессе отправки запроса изменилась цена или его не удается удовлетворить в полном объеме.
В главе про символы, в разделе Торговые условия и режимы исполнения приказов мы уже встречались с настройками исполнения ордеров по цене (SYMBOL_TRADE_EXEMODE) и заливки ордеров по объему (SYMBOL_FILLING_MODE), которые устанавливает брокер. В соответствие с тем, какие режимы SYMBOL_FILLING_MODE доступны, MQL-программа должна выбрать режим заливки нового формируемого ордера в специальной структуре MqlTradeRequest (скоро мы увидим это на практике).
Варианты сведены в перечисление ENUM_ORDER_TYPE_FILLING: их идентификаторы перекликаются с идентификаторами SYMBOL_FILLING_MODE.
Политика исполнения (Значения) |
Описание |
---|---|
ORDER_FILLING_FOK (0) |
Все или Ничего (Fill or Kill) |
ORDER_FILLING_IOC (1) |
Немедленно и хотя бы Частично (Immediate or Cancel) |
ORDER_FILLING_RETURN (2) |
Вернуть (Return) |
При политике ORDER_FILLING_FOK ордер может быть исполнен исключительно в указанном объеме. Если на рынке в данный момент не присутствует достаточного объема финансового инструмента, то ордер не будет исполнен. Необходимый объем может быть составлен из нескольких предложений, доступных в данный момент на рынке. Возможность использования FOK-ордеров определяется наличием разрешения SYMBOL_FILLING_FOK.
При политике ORDER_FILLING_IOC трейдер соглашается совершить сделку по максимально доступному на рынке объему в пределах указанного в ордере. В случае невозможности полного покрытия ордер будет исполнен на доступный объем, а недостающий объем будет отменен. Возможность использования IOC-ордеров определяется наличием разрешения SYMBOL_FILLING_IOC.
При политике ORDER_FILLING_RETURN в случае частичного исполнения ордер с остаточным объемом не снимается, а продолжает действовать. Это — режим по умолчанию, доступный всегда. Однако есть одно исключение: Return-ордера не разрешены в режиме исполнения по рынку (SYMBOL_TRADE_EXECUTION_MARKET в свойстве символа SYMBOL_TRADE_EXEMODE).
Таким образом, перед отправкой рыночного (не отложенного) ордера MQL-программе следует правильно выставить одну из политик ORDER_TYPE_FILLING на основе свойства SYMBOL_FILLING_MODE соответствующего финансового инструмента: напомним, что в этом свойстве содержится комбинация битовых флагов разрешенных режимов.
Для отложенных ордеров независимо от режима исполнения SYMBOL_TRADE_EXEMODE необходимо использовать политику ORDER_FILLING_RETURN, так как такие ордера будут заполняться объемом позднее и по тем правилам, которые брокер установит на тот момент.
В отличие от политики заливки объема ордера, режим его исполнения по цене нельзя выбирать — он предопределен брокером для каждого символа, и это влияет на то, какие поля структуры MqlTradeRequest потребуется заполнять перед отправкой торгового запроса.
Применение политик заливки в зависимости от режимов исполнения можно представить в виде таблицы ('+' — разрешено, '-' — запрещено, '±' — зависит от настроек символа):
Политика заполнения Режим исполнения |
ORDER_FILLING _FOK |
ORDER_FILLING _IOC |
ORDER_FILLING _RETURN |
---|---|---|---|
SYMBOL_TRADE_EXECUTION_INSTANT |
+ |
+ |
+ |
SYMBOL_TRADE_EXECUTION_REQUEST |
+ |
+ |
+ |
SYMBOL_TRADE_EXECUTION_MARKET |
± |
± |
- |
SYMBOL_TRADE_EXECUTION_EXCHANGE |
± |
± |
+ |
Отложенные |
- |
- |
+ |
В режимах исполнения SYMBOL_TRADE_EXECUTION_INSTANT и SYMBOL_TRADE_EXECUTION_REQUEST разрешены все политики заливки объемов.