Сегодня рассмотрим пример того, как можно выставлять несколько ордеров на закрытие по позиции одновременно. Делать это будем через открытие нескольких позиций на входе.
Напоминаем, что архитектура OsEngine запрещает выставлять на рынок больше одного лимитного ордера на закрытие по позиции за раз, и при помощи такой конструкции можно это ограничение обойти.
1. Открываем робот-пример. PriceChannelCounterTrend.
На ГитХаб, в репозитории OsEngine это находится здесь:
https://github.com/AlexWan/OsEngine/blob/master/project/OsEngine/Robots/PositionsMicromanagement/PriceChannelCounterTrend.cs
Внутри проекта здесь:
2. Конструктор и сервисный код.
- Поле для хранения источника BotTabSimple. В это поле потом мы положим объект источника и сможем обращаться к нему из любой части робота. Так удобнее.
- Поле для хранения индикатора.
- Параметры. Чуть позже поговорим про каждый.
- Создание источника BotTabSimple.
- Создание параметров.
- Создание индикатора PriceChannel. Установка его длины из параметра.
- Подписка на событие CandleFinishedEvent (завершение свечи). В обработчике этого события будет вся торговая логика.
- Подписка на событие изменение параметров. В этом обработчике мы будем устанавливать индикатору новое значение длины.
- Отключаем автоматическое сопровождение позиции.
Настройки такие:
За что отвечают параметры:
1. Regime – режим работы.- Off – Выключен.
- On – Включен и будет входить и в лонг и в шорт.
- OnlyLong – открытие только длинных позиций.
- OnlyShort – открытие только коротких позиций.
- OnlyClosePosition – доступно только закрытие позиций.
2. Volume type – режим выбора объёма.- Contracts – кол-во контрактов инструмента.
- Contract currency – валюта контракта.
- Deposit percent – процент от депозита.
3. Volume – значение объёма. Что именно, зависит от предыдущего пункта. В случае Contracts тут указывается объём инструмента. В случае Contract currency здесь указывается кол-во рублей или долларов, которыми нужно войти. В случае с Deposit percent здесь указывается % от общего депозита, которым нужно войти в контракт.
4. Asset in portfolio – тут нужно указывать название валюты, которое будет использовано для расчёта объёма, если Вы выбрали тип объёма “Deposit percent”. В тестере оставляем «Prime». На крипте это обычно “USDT”.
5. Price channel length – длина индикатора PriceChannel.
6. Stop percent – размер стопа для закрытия позиции.
7. Profit order one percent — расстояние от входа до первого закрывающего ордера.
8. Profit order two percent — расстояние от входа до второго закрывающего ордера.
3. Вход в логику в событии завершения свечи.
- Если режим робота Off, выходим из метода.
- Если данных по индикатору нет, выходим из метода.
- Если данных в индикаторе меньше, чем его длина расчёта, выходим из метода.
- Берём все позиции у источника.
- Если позиций нет, но режим не позволяет открывать новые позиции, выходим из метода.
- Если позиций нет, и режим позволяет, идём в метод открытия позиции
- Если позиции есть, идём в метод закрытия позиций. Обратите внимание, что это происходит через цикл – отправляем на закрытие все позиции, какие есть.
4. Логика открытия позиций.
- Берём нужные для расчётов переменные. Последнюю цену закрытия свечи. Верхнюю и нижнюю границы канала. Обратите внимание, что по PriceChannel берутся предпоследние значения, т.к. только так можно определить пробой канала.
- Если границы канала по каким-то причинам равны нулю, выходим из метода.
- Если цена закрытия свечи пересекла верхнюю границу канала, входим в шорт.
- Если цена закрытия свечи пересекла нижнюю границу канала, входим в лонг.
- ВАЖНО! Обратите внимание, что открываются сразу ДВЕ позиции в каждое направление, и по каждой пишется название для позиции. Первая – First, вторая – Second.
5. Логика закрытия позиций.
- Если стоп-ордер для позиции не установлен, заходим в эту ветку логики и устанавливаем её отдельно для Лонга и Шорта.
- Если это позиция номер один (First), и по ней нет активных закрывающих ордеров, входим и устанавливаем для неё ордер на закрытие в определённом проценте от входа.
- Если это позиция номер два (Second), и по ней нет активных закрывающих ордеров, входим и устанавливаем для неё ордер на закрытие в определённом проценте от входа.
6. На выходе.
КонтрТрендовый робот от индикатора PriceChannel, который закрывает свою позицию в два ордера одновременно:
Удачных алгоритмов!
Комментарии открыты для друзей!
OsEngine: https://github.com/AlexWan/OsEngine
Поддержка OsEngine: https://t.me/osengine_official_support
Регистрируйся в АЛОР и получай бонусы: https://www.alorbroker.ru/open
Сайт АЛОР БРОКЕР: https://www.alorbroker.ru
Раздел «Для клиентов»: https://www.alorbroker.ru/openinfo/for-clients
Программа лояльности от АЛОР БРОКЕР и OsEngine: https://smart-lab.ru/company/os_engine/blog/972745.php