В MetaTrader 5 добавлена хеджинговая система учета позиций
MetaQuotes | 21 марта, 2016
Платформа MetaTrader 5 изначально создавалась для биржевой торговли с неттинговым учетом позиций. При неттинговом учете по одному финансовому инструменту можно иметь только одну позицию, поэтому все дальнейшие операции по нему ведут к изменению объема, закрытию или развороту существующей позиции. Чтобы расширить возможности трейдеров ритейл-форекса, в платформу добавлена вторая система учета — хеджинг. Теперь по инструменту можно иметь множество позиций, в том числе — разнонаправленных. Это позволяет реализовывать торговые стратегии с так называемым локированием — если цена пошла против трейдера, он имеет возможность открыть позицию в противоположном направлении.
Новая система учета аналогична используемой в MetaTrader 4, она будет привычна трейдерам. При этом они смогут использовать все преимущества пятой версии платформы — исполнение ордеров несколькими сделками (в том числе — частичное), мультивалютный и многопоточный тестер с поддержкой вычислительной сети MQL5 Cloud Network и многое другое.
Теперь на одном счете можно торговать на бирже, где используется неттинг и по одному инструменту можно иметь только одну позицию. При этом в той же платформе, но на другом счете можно торговать на форексе и использовать хеджирование.
Далее в статье будет подробно рассказано о неттинге и хеджинге, а также об изменениях, связанных с внедрением второй системы учета.
Учет позиций зависит от торгового счета
Тип учета позиций задается на уровне счета, он показывается в заголовке окна терминала, а также в журнале:
Чтобы открыть демо-счет с хеджингом, включите соответствующую опцию:
Для открытия реального счета с хеджингом обратитесь к вашему брокеру.
Неттинговая система
Эта система учета подразумевает, что в один момент времени на счете может быть только одна открытая позиция по одному и тому же символу:
- Если по инструменту существует позиция, при совершении сделки в том же направлении происходит наращивание объема этой позиции.
- При совершении сделки в обратном направлении происходит уменьшение объема существующей позиции, ее закрытие (при совершении сделки в объеме, равном объему текущей позиции) либо разворот (если объем противоположной сделки больше текущей позиции).
При этом не имеет значения, в результате какого действия совершается сделка в противоположном направлении — в результате исполнения рыночного ордера или срабатывания отложенного.
Ниже приведен пример совершения двух сделок на покупку EURUSD объемом 0.5 лота каждая:
Результатом исполнения этих сделок стала одна общая позиция объемом 1 лот.
Хеджинговая система
Эта система учета позволяет иметь на счету множество торговых позиций по одному и тому же инструменту, в том числе — разнонаправленных.
Если по торговому инструменту есть открытая позиция и трейдер совершает новую сделку (или срабатывает отложенный ордер), происходит открытие новой позиции. Существующая позиция не изменяется.
Ниже приведен пример совершения двух сделок на покупку EURUSD объемом 0.5 лота каждая:
Результатом исполнения этих сделок стало открытие двух отдельных позиций.
Влияние системы учета
В зависимости от системы учета позиций на счете, некоторые торговые функции платформы ведут себя по-разному:
- Изменяются правила наследования Стоп Лосса и Тейк Профита.
- Для закрытия позиции в системе неттинга достаточно совершить торговую операцию по тому же символу и в том же объеме, но в обратном направлении. Для закрытия позиции в системе хеджинга явно выберите команду "Закрыть позицию" в контекстном меню позиции.
- В системе хеджинга невозможно развернуть позицию. Фактически будет осуществлено закрытие текущей позиции и открытие новой с остаточным объемом.
- В системе хеджинга появляется новое условие для расчета маржи — Хеджированная маржа.
Новый тип торговой операции Close By
Для счетов с хеджинговым учетом позиций добавлен новый вид торговых операций — закрытие позиции встречной. Эта операция позволяет одновременно закрыть две разнонаправленные позиции по одному и тому же инструменту. Если встречные позиции имеют разное количество лотов, то открытым останется только один ордер из двух. Его объем будет равен разности лотов двух закрытых позиций, а направление позиции и цена открытия — большей (по объему) из закрываемых позиций.
По сравнению с одиночным закрытием двух позиций, закрытие встречной позволяет сэкономить трейдеру один спред:
- При одиночном закрытии трейдер дважды платит спред: закрывает покупку по меньшей цене (Bid), а продажу — по большей (Ask).
- При встречном закрытии для закрытия первой позиции используется цена открытия второй позиции, а для второй позиции — цена открытия первой.
При закрытии позиции встречной выставляется ордер типа "close by". В комментарии к нему указываются тикеты закрываемых позиций. Закрытие пары встречных позиций происходит двумя сделками типа "out by". Размер итоговой прибыли/убытка, полученного в результате закрытия обеих позиций, указывается только в одной сделке.
Особенности расчета маржи в хеджинговой системе учета позиций
При использовании хеджинговой системы учета позиций расчет маржи осуществляется по тем же формулам и принципам, что и при неттинговой системе. Однако при наличии нескольких позиций по одному и тому же инструменту есть особенности.
Позиции/ордера открыты в одном направлении
Для позиций суммируется объем, вычисляется средневзвешенная цена открытия. Полученные значения используется для расчета маржи по формуле, соответствующей типу инструмента.
Для отложенных ордеров (при ненулевом коэффициенте маржи) маржа считается по отдельности.
Разнонаправленные позиции/ордера
Хеджированными, или перекрытыми, считаются позиции, открытые по одному и тому же инструменту, но в разных направлениях. Существуют два способа расчета маржи для таких позиций. Способ расчета определяется брокером.
Базовый расчет | По наибольшей стороне |
---|---|
Используется, если в поле "Хеджированная маржа" в спецификации контракта не указано "расчет по наибольшей стороне". Расчет состоит из нескольких этапов:
Расчет для неперекрытого объема
Расчет для перекрытого объема Используется, если в спецификации контракта указано значение "Хеджированная маржа". В этом случае маржа взимается и для перекрытого и для неперекрытого объема. Если для инструмента задана первоначальная маржа, то хеджированная маржа указывается как абсолютное значение (в деньгах). Если первоначальная маржа не задана (равна 0), то в поле "Хеджированная" указывается размер контракта. Расчет маржи осуществляется по формуле, соответствующей типу инструмента, с использованием указанного размера контракта. Например, есть две позиции Buy EURUSD 1 lot и Sell EURUSD 1 lot, размер контракта равен 100 000. Если в поле "Хеджированная" указать значение 100 000, то за обе позиции маржа будет взята как за 1 лот. Если указать 0, то за перекрытый объем маржа взиматься не будет. За каждый перекрытый лот позиций маржа взимается в соответствии со значением, указанным в поле "Хеджированная маржа" в спецификации контракта:
Расчет для отложенных ордеров
| Используется, если в поле "Хеджированная маржа" в спецификации контракта указано "расчет по наибольшей стороне".
|
Изменения в MQL5
Теперь у всех позиций есть собственный уникальный тикет. Как правило, он совпадает с тикетом ордера, которым позиция была открыта. Всем ранее открытым позициям тикет будет назначен автоматически после обновления на новую версию терминала.
MqlTradeRequest
В структуру торгового запроса MqlTradeRequest добавлено два новых поля:
- position — тикет позиции. Следует заполнять при изменении и закрытии позиции для ее однозначной идентификации. Как правило, соответствует тикету ордера, в результате которого позиция была открыта.
- position_by — тикет встречной позиции. Используется при закрытии позиции встречной — открытой по тому же инструменту, но в противоположном направлении.
struct MqlTradeRequest { ENUM_TRADE_REQUEST_ACTIONS action; // Тип выполняемого действия ulong magic; // Штамп эксперта (идентификатор magic number) ulong order; // Тикет ордера string symbol; // Имя торгового инструмента double volume; // Запрашиваемый объем сделки в лотах double price; // Цена double stoplimit; // Уровень Stop Limit ордера double sl; // Уровень Stop Loss ордера double tp; // Уровень Take Profit ордера ulong deviation; // Максимально приемлемое отклонение от запрашиваемой цены ENUM_ORDER_TYPE type; // Тип ордера ENUM_ORDER_TYPE_FILLING type_filling; // Тип ордера по исполнению ENUM_ORDER_TYPE_TIME type_time; // Тип ордера по времени действия datetime expiration; // Срок истечения ордера (для ордеров типа ORDER_TIME_SPECIFIED) string comment; // Комментарий к ордеру ulong position; // Тикет позиции ulong position_by; // Тикет встречной позиции };
MqlTradeTransaction
В структуру торговой транзакции MqlTradeTransaction добавлены два аналогичных поля:
- position — тикет позиции, на которую повлияла транзакция. Заполняется для транзакций, касающихся обработки рыночных ордеров (TRADE_TRANSACTION_ORDER_* кроме TRADE_TRANSACTION_ORDER_ADD, где тикет позиции еще не присвоен) и истории ордеров (TRADE_TRANSACTION_HISTORY_*).
- position_by — тикет встречной позиции. Используется при закрытии позиции встречной — открытой по тому же инструменту, но в противоположном направлении. Заполняется только для ордеров на закрытие позиции встречной (close by) и сделок на закрытие встречной (out by).
struct MqlTradeTransaction { ulong deal; // Тикет сделки ulong order; // Тикет ордера string symbol; // Имя торгового инструмента ENUM_TRADE_TRANSACTION_TYPE type; // Тип торговой транзакции ENUM_ORDER_TYPE order_type; // Тип ордера ENUM_ORDER_STATE order_state; // Состояние ордера ENUM_DEAL_TYPE deal_type; // Тип сделки ENUM_ORDER_TYPE_TIME time_type; // Тип ордера по времени действия datetime time_expiration; // Срок истечения ордера double price; // Цена double price_trigger; // Цена срабатывания стоп-лимитного ордера double price_sl; // Уровень Stop Loss double price_tp; // Уровень Take Profit double volume; // Объем в лотах ulong position; // Тикет позиции ulong position_by; // Тикет встречной позиции };
PositionGetTicket
Новая функция PositionGetTicket возвращает тикет позиции по индексу в списке открытых позиций и автоматически выбирает эту позицию для дальнейшей работы с ней при помощи функций PositionGetDouble, PositionGetInteger, PositionGetString.
ulong PositionGetTicket( int index // номер в списке позиций );
PositionSelectByTicket
Новая функция PositionSelectByTicket выбирает открытую позицию для дальнейшей работы с ней по указанному тикету.
bool PositionSelectByTicket( ulong ticket // тикет позиции );
PositionSelect
PositionSelect выбирает позицию по имени символа для дальнейшей работы с ней при помощи функций PositionGetDouble, PositionGetInteger, PositionGetString. В хеджинговой системе учета, где по одному символу может быть несколько позиций, функция выберет позицию с наименьшим тикетом.
ACCOUNT_MARGIN_MODE
Новое свойство ACCOUNT_MARGIN_MODE позволяет получить режим расчета маржи и учета позиций на счете:
Идентификатор | Описание |
---|---|
ACCOUNT_MARGIN_MODE_RETAIL_NETTING | Используется для внебиржевого рынка при учете позиций в режиме "неттинг" (по одному символу может быть только одна позиция). Расчет маржи осуществляется на основе типа инструмента (SYMBOL_TRADE_CALC_MODE). |
ACCOUNT_MARGIN_MODE_EXCHANGE | Используется для биржевого рынка. Расчет маржи осуществляется на основе дисконтов, указанных в настройках инструментов. Дисконты устанавливаются брокером, однако не могут быть ниже значений, определенных биржей. |
ACCOUNT_MARGIN_MODE_RETAIL_HEDGING | Используется для внебиржевого рынка при независимом учете позиций ("хеджинг", по одному символу может быть несколько позиций). Расчет маржи осуществляется на основе типа инструмента (SYMBOL_TRADE_CALC_MODE) и с учетом наличия нескольких позиций по одному символу. |
SYMBOL_MARGIN_HEDGED
Новое свойство SYMBOL_MARGIN_HEDGED позволяет получить размер хеджированной маржи по торговому инструменту. Особенности расчета маржи при хеджинговой системе учета приведены выше.
Новые торговые константы
В связи с добавлением нового типа торговой операции "Закрытие встречной" появились новые торговые свойства:
- TRADE_ACTION_CLOSE_BY — новый тип торговой операции — закрытие позиции встречной.
- ORDER_TYPE_CLOSE_BY — новый тип ордера — закрыть позицию встречной.
- ORDER_POSITION_BY_ID — новое свойство ордера — тикет встречной позиции, которая используется для закрытия текущей.
- DEAL_ENTRY_OUT_BY — новый тип сделки — закрытие позиции встречной.
Хеджинг и MQL5 Cloud Network — дополнительный бонус
Теперь с помощью MetaTrader 5 можно торговать как на биржевых рынках, так и на популярном ритейл-форексе с хеджингом. А разработчики автоматических систем, использующие хеджирование, получили еще одно важное преимущество - теперь к их услугам не только многопоточный тестер, но и мощности распределенной сети вычислений MQL5 Cloud Network.
Обновляйтесь и используйте новые возможности!