- Получение списков доступных символов и Обзора рынка
- Редактирование списка Обзора рынка
- Проверка символа на существование
- Проверка актуальности данных по символу
- Получение последнего тика по символу
- Расписания торговых и котировочных сессий
- Маржинальные коэффициенты по символу
- Обзор функций получения свойств символа
- Проверка состояния символа
- Тип цены для построения графиков по символу
- Базовая, котировочная и маржинальная валюты инструмента
- Точность представления и шаг изменения цен
- Разрешенные объемы торговых операций
- Разрешения на торговлю
- Торговые условия и режимы исполнения приказов по символу
- Маржинальные требования
- Правила истечения сроков отложенных ордеров
- Спреды и отступы приказов от текущей цены
- Получение величины свопов
- Текущая рыночная информация (тик)
- Описательные свойства символов
- Глубина стакана цен
- Свойства пользовательских символов
- Специфические свойства (биржа, срочный рынок, облигации)
Правила истечения сроков отложенных ордеров
При работе с отложенными ордерами (включая уровни Stop Loss и Take Profit) MQL-программе следует проверять пару свойств, задающих правила их истечения. Оба свойства доступны как элементы перечисления ENUM_SYMBOL_INFO_INTEGER для вызова функции SymbolInfoInteger.
Идентификатор |
Описание |
---|---|
SYMBOL_EXPIRATION_MODE |
Флаги разрешенных режимов истечения ордера (битовая маска) |
SYMBOL_ORDER_GTC_MODE |
Срок действия определен одним из элементов перечисления ENUM_SYMBOL_ORDER_GTC_MODE |
Свойство SYMBOL_ORDER_GTC_MODE принимается во внимание, только если SYMBOL_EXPIRATION_MODE содержит SYMBOL_EXPIRATION_GTC (см. далее). GTC является аббревиатурой "Good Till Canceled".
Для каждого финансового инструмента в свойстве SYMBOL_EXPIRATION_MODE может быть указано несколько режимов срока действия (истечения) отложенных ордеров. Каждому режиму сопоставлен флаг (бит).
Идентификатор (Значение) |
Описание |
---|---|
SYMBOL_EXPIRATION_GTC (1) |
Ордер действителен согласно свойству ENUM_SYMBOL_ORDER_GTC_MODE |
SYMBOL_EXPIRATION_DAY (2) |
Ордер действителен до конца текущего дня |
SYMBOL_EXPIRATION_SPECIFIED (4) |
Дата и время истечения указывается в ордере |
SYMBOL_EXPIRATION_SPECIFIED_DAY (8) |
Дата истечения указывается в ордере |
Флаги могут комбинироваться операцией логического ИЛИ ('|'), например, SYMBOL_EXPIRATION_GTC | SYMBOL_EXPIRATION_SPECIFIED, что эквивалентно 1 | 4, то есть числу 5. Для проверки разрешения конкретного режима для инструмента выполните операцию логического И ('&') над полученным результатом функции и битом желаемого режима: ненулевое значение означает доступность режима.
В случае SYMBOL_EXPIRATION_SPECIFIED_DAY ордер действует до 23:59:59 указанного дня. Если это время не попадает на торговую сессию, истечение наступит в ближайшее следующее торговое время.
Перечисление ENUM_SYMBOL_ORDER_GTC_MODE содержит следующие элементы.
Идентификатор |
Описание |
---|---|
SYMBOL_ORDERS_GTC |
Отложенные ордера и уровни Stop Loss/Take Profit действительны неограниченное время вплоть до явной отмены |
SYMBOL_ORDERS_DAILY |
Ордера действуют только внутри одного торгового дня: по его завершении удаляются все отложенные ордера, а также уровни Stop Loss и Take Profit |
SYMBOL_ORDERS_DAILY_EXCLUDING_STOPS |
При смене торгового дня удаляются только отложенные ордера, уровни Stop Loss и Take Profit сохраняются |
В зависимости от установленных битов в свойстве SYMBOL_EXPIRATION_MODE, при подготовке ордера к отправке MQL-программа может выбрать один из режимов, соответствующих этим битам. Технически это делается путем заполнения поля type_time в специальной структуре MqlTradeRequest перед вызовом функции OrderSend. Значение поля должно быть элементом перечисления ENUM_ORDER_TYPE_TIME (см. Сроки действия отложенных ордеров): как мы увидим в дальнейшем, оно перекликается с вышеприведенным набором флагов, то есть каждый флаг задает соответствующий режим в ордере — ORDER_TIME_GTC, ORDER_TIME_DAY, ORDER_TIME_SPECIFIED, ORDER_TIME_SPECIFIED_DAY. Само время или день истечения должен быть указан в другом поле той же структуры.
Скрипт SymbolFilterExpiration.mq5 позволяет узнать статистику применения каждого из флагов в имеющихся символах (в обзоре рынка или вцелом, в зависимости от входного параметра UseMarketWatch). Второй параметр ShowPerSymbolDetails, будучи взведенным в true, вызовет вывод в журнал всех флагов для каждого символа — будьте внимательны: если при этом режим UseMarketWatch равен false, сгенерируется очень большое число записей в журнале.
#property script_show_inputs
|
В функции OnStart помимо объекта фильтра и приемных массивов для названий символов и значений свойств описываем карты MapArray для подсчета статистики - раздельно для каждого из свойств SYMBOL_EXPIRATION_MODE и SYMBOL_ORDER_GTC_MODE.
void OnStart()
|
Далее применяем фильтр и посчитываем статистику.
f.select(UseMarketWatch, ints, symbols, flags);
|
Наконец, выводим полученные числа в журнал.
PrintFormat("===== Expiration modes for %s symbols =====",
|
Запустим скрипт два раза. Первый раз — с настройками по умолчанию — можем получить примерно следующую картину.
===== Expiration modes for all available symbols =====
|
Здесь видно, что практически все флаги разрешены для большинства символов, а для режима SYMBOL_EXPIRATION_GTC используется единственный вариант SYMBOL_ORDERS_GTC.
Второй раз запустим скрипт, установив UseMarketWatch и ShowPerSymbolDetails в true (предполагается, что в Обзор рынка выбрано ограниченное число символов).
GBPUSD:
|
Из 15-ти выбранных символов только у 6-ти установлен флаг SYMBOL_EXPIRATION_SPECIFIED_DAY. Подробности о флагах по каждому символу можно найти выше.