Сегодня будем рассматривать пример, в котором будем последовательно выходить из позиции через лимитки в рынке, выставляя лимитки одну за другой. Вход у нас будет по развороту на свечках, опирающихся на волатильность (через ATR).
Итоговая логика робота на графике выглядит так:
1. Открываем робот-пример. CandlesTurnaroundPattern.
На ГитХаб в репозитории OsEngine это находится здесь:
https://github.com/AlexWan/OsEngine
Внутри проекта здесь:
2. Конструктор и сервисный код.
- Поле для хранения источника BotTabSimple. В это поле потом мы положим объект источника и сможем обращаться к нему из любой части робота. Так удобнее.
- Поле для хранения индикатора.
- Параметры. Чуть позже поговорим про каждый.
- Создание источника BotTabSimple.
- Создание параметров.
- Создание индикатора ATR. Установка его длины из параметра.
- Подписка на событие CandleFinishedEvent (завершение свечи). В обработчике этого события будет вся торговая логика.
- Подписка на событие изменение параметров. В этом обработчике мы будем устанавливать индикатору новое значение длины.
- Отключаем автоматическое сопровождение позиции.
Настройки такие:
За что отвечают параметры:
1. Regime – режим работы.- Off – Выключен.
- OnlyLong – открытие только длинных позиций.
- 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. Atr length – длина индикатора ATR.
6. Atr mult to entry – размер свечей разворота перед входом не может быть меньше чем ATR * MULT. Т.е. это значение участвует в расчёте размера свечей в паттерне.
7. top percent – движение от входа до выхода в %. Для установки стоп-приказа.
8. Exit one percent – расстояние, на котором будет выставлен первый лимитный ордер на закрытие позиции.
9. Exit two percent – расстояние, на котором будет выставлен второй лимитный ордер на закрытие позиции.
10. Exit three percent – расстояние, на котором будет выставлен третий лимитный ордер на закрытие позиции.
3. Вход в логику в событии завершения свечи.
- Если режим робота Off, выходим из метода.
- Если данных по индикатору нет, выходим из метода.
- Если данных в индикаторе меньше, чем его длина расчёта, выходим из метода.
- Берём все позиции у источника.
- Если позиций нет, но режим не позволяет открывать новые позиции, выходим из метода.
- Если позиций нет, и режим позволяет, идём в метод открытия позиции.
- Если позиции есть, идём в метод закрытия позиций.
4. Логика открытия позиций.
- Берём значения АТR. Если оно вдруг почему-то равно нулю, выходим из логики.
- Считаем размер минимального размера тела свечи, умножая ATR на мультипликатор, который выставил пользователь.
- Берём свечи по инструменту. Текущую и предпоследнюю.
- Берём у свечей размер их тел.
- Если размер тел свечи больше расчётного значения и, если последняя свеча растущая, а предпоследняя падающая, входим в лонг.
5. Логика закрытия позиций. Часть 1. Стоп приказ.
- Если ранее по позиции уже активирован стоп, то больше ничего не делаем. Также пропускаем статус Opening.
- Заходим в логику закрытия позиции по стопу один раз.
- Считаем цену стоп-активации.
- Выставляем приказ стоп-маркет.
6. Логика закрытия позиций. Часть 2. Последовательное закрытие лимитами, которые стоят в стакане.
- Считаем количество исполненных ордеров на закрытие. Это надо, т.к. ордера могут отзываться, например, во время клиринга или ночью. И придётся их перевыставлять, обучая робота игнорировать неисполненные ордера.
- Профит — закрытие 1. Если в рынке лимит-ордеров сейчас нет, и если кол-во исполненных ордеров на закрытие ноль, выставляем первый лимит на закрытие на биржу.
- Профит — закрытие 2. Если в рынке лимит ордеров сейчас нет, и если кол-во исполненных ордеров на закрытие один, выставляем второй лимит на закрытие на биржу.
- Профит – закрытие 3. Если в рынке лимит ордеров сейчас нет, и если кол-во исполненных ордеров на закрытие два, выставляем третий лимит на закрытие на биржу.
7. На выходе.
Робот, торгующий отскок по развороту на свечках. Большая падающая свеча, затем большая растущая – вход в лонг, закрывающийся в профит по последовательным лимиткам, которые держит на бирже. В качестве выхода в убыток – маркетный стоп приказ.
Удачных алгоритмов!
Комментарии открыты для друзей!
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