Сегодня рассмотрим пример того, как можно усредняться через отложенные ордера на открытие других позиций.
Данный тип усреднения позволяет в полной мере тестировать торговую логику робота на свечных данных, т.к. использует заявки на усреднение типа BuyAtStop и SellAtStop.
1. Открываем робот-пример. EnvelopsCountertrend.
На ГитХаб в репозитории OsEngine это находится здесь:
https://github.com/AlexWan/OsEngine
Внутри проекта здесь:
2. Конструктор и сервисный код.
- Поле для хранения источника BotTabSimple. В это поле потом мы положим объект источника и сможем обращаться к нему из любой части робота. Так удобнее.
- Поле для хранения индикатора.
- Параметры. Чуть позже поговорим про каждый.
- Создание источника BotTabSimple.
- Создание параметров.
- Создание индикатора Envelops. Установка его длины из параметра.
- Подписка на событие 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. Envelops length – длина индикатора.
6. Envelops deviation – отклонение индикатора.
7. Profit percent – на каком расстоянии от средней по позициям будет выставлен профит.
8. Stop percent – размер стопа для закрытия всех позиций.
9. Average one percent — расстояние от входа до первого усреднения.
10. Average two percent — расстояние от входа до второго усреднения.
3. Вход в логику в событии завершения свечи.
- Если режим робота Off, выходим из метода.
- Если данных по индикатору нет, выходим из метода.
- Если данных в индикаторе меньше, чем его длина расчёта, выходим из метода.
- Берём все позиции у источника.
- Если позиций нет, но режим не позволяет открывать новые позиции, выходим из метода.
- Если позиций нет, и режим позволяет, идём в метод открытия позиции.
- Если позиции есть, идём в метод закрытия позиций. Логика усреднения у нас тоже в методе закрытия позиции. Обратите внимание, что в логику закрытия мы передаём весь массив с позициями, т.к. их может быть несколько.
4. Логика открытия позиций.
- Берём нужные для расчётов переменные. Последнюю цену закрытия свечи. Верхнюю и нижнюю границы канала.
- Если границы канала по каким-то причинам равны нулю, выходим из метода.
- Если цена закрытия свечи пересекла верхнюю границу канала, входим в шорт.
- Если цена закрытия свечи пересекла нижнюю границу канала, входим в лонг.
5. Логика закрытия позиций. Часть 1. Усреднение.
- Если ранее по позициям активировался стоп или профит, выходим из метода. У робота используются StopMarket и ProfitMarket отложенные заявки. Если стопы сработали, должно закрыться.
- Если позиций пока 1 штука, мы должны выставить отложенный ордер на усреднение. На каждой свече надо переставлять, т.к. срок жизни для ордера ставим – 1 свеча.
- Берём цену открытия первого ордера.
- Если надо докупать в лонг, используем метод BuyAtStopMarket.
- Если надо докупать в шорт, используем метод SellAtStopMarket.
- Второе усреднение.
6. Логика закрытия позиций. Часть 2. Стоп и профит по средней.
- Рассчитываем среднюю цену входа в позицию. Используйте этот код в Ваших роботах.
- Рассчитываем цену профита. Отдельно для лонг и шорт позиций.
- Выставляем одинаковый профит-приказ для всех позиций.
- Рассчитываем цену стопа. Отдельно для лонг и шорт позиций.
- Выставляем одинаковый стоп-приказ для всех позиций.
7. На выходе.
КонтрТрендовый робот от канала Envelops, который может дважды усредниться и который закрывает позицию по стоп и профиту от средней цены входа:
Удачных алгоритмов!
Комментарии открыты для друзей!
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