Сегодня будем рассматривать пример, в котором будем докупать актив, когда он идёт в сторону нашей позиции, и усредняться на откате. Делать это будем при помощи докупки актива в текущую позицию. Методами BuyAtMarketToPosition и SellAtMarketToPosition.
Итоговая логика робота на графике выглядит так:
1. Открываем робот-пример. AlligatorTrendAverage.
На ГитХаб в репозитории OsEngine это находится здесь:
https://github.com/AlexWan/OsEngine/blob/master/project/OsEngine/Robots/PositionsMicromanagement/AlligatorTrendAverage.cs
Внутри проекта здесь:
2. Конструктор и сервисный код.
- Поле для хранения источника BotTabSimple. В это поле потом мы положим объект источника и сможем обращаться к нему из любой части робота. Так удобнее.
- Поле для хранения индикатора.
- Параметры. Чуть позже поговорим про каждый.
- Создание источника BotTabSimple.
- Создание параметров.
- Создание индикатора Alligator. Установка его длины из параметра.
- Подписка на событие 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. Pyramid percent – через сколько % от входа будет увеличение позиции по тренду.
6. Jaw length – длина медленной скользящей средней индикатора аллигатор.
7. Teeth length – длина средней скользящей средней индикатора аллигатор.
8. Lips length – длина быстрой скользящей средней индикатора аллигатор.
9. Jaw offset – сдвиг медленной скользящей средней индикатора аллигатор.
10. Teeth offset – сдвиг средней скользящей средней индикатора аллигатор.
11. Lips offset – сдвиг быстрой скользящей средней индикатора аллигатор.
3. Вход в логику в событии завершения свечи.
- Если режим робота Off, выходим из метода.
- Если данных по индикатору нет, выходим из метода, или, если данных в индикаторе меньше, чем его длина расчёта, выходим из метода.
- Берём все позиции у источника.
- Если позиций нет, но режим не позволяет открывать новые позиции, выходим из метода.
- Если позиций нет, и режим позволяет, идём в метод открытия позиции.
- Если позиции есть, идём в метод закрытия позиций. Логика усреднения у нас тоже в методе закрытия позиции. Обратите внимание, что в логику закрытия мы передаём весь массив с позициями, т.к. их может быть несколько.
4. Логика открытия позиций.
- Берём нужные для расчётов переменные. Последнюю цену закрытия свечи. Три скользящие средние с индикатора Аллигатор.
- Если Аллигатор «расправил челюсть» вверх, входим в лонг.
- Если Аллигатор «расправил челюсть» вниз, входим в шорт.
- Это классический трендовый первый вход из Книг Билла Вильямса про трендовую торговлю.
5. Логика закрытия позиций. Часть 1. Стандартный выход.
- Если ранее по позиции уже активирован стандартный выход, то больше ничего не делаем. Также пропускаем статус Opening.
- Активируем переменную Comment у позиции. В неё мы будем записывать названия тех способов усреднения, которые мы уже успели «отработать».
- Берём переменные нужные для расчётов.
- Стандартный выход для позиции ЛОНГ. Когда текущая цена уходит ниже всех линий аллигатора, закрываем позицию.
- Стандартный выход для позиции ШОРТ. Когда текущая цена уходит выше всех линий аллигатора, закрываем позицию.
6. Логика закрытия позиций. Часть 2. Усреднение при возврате в канал.
- Если во время ЛОНГа текущая цена становится ниже какой-то из линий Аллигатора, т.е. возвращается в канал.
- Если мы ещё не усреднялись.
- Докупаем для позиции дополнительный объём по маркету. При этом делаем запись в комментарий о том, что усреднились.
- Если во время ШОРТа текущая цена становится выше какой-то из линий Аллигатора, т.е. возвращается в канал.
- Если мы ещё не усреднялись.
- Продаём для позиции дополнительный объём по маркету. При этом делаем запись в комментарий о том, что усреднились.
7. Логика закрытия позиций. Часть 3. Пирамидинг по направлению позиции.
- Если мы в лонге и до этого не «пирамидились».
- Считаем цену, после которой будем увеличивать позицию.
- Если цена прошла в нашу сторону достаточно, докупаемся по маркету и записываем в комментарий информацию о том, что уже докупались.
- С шортом зеркально.
8. На выходе.
Трендовый робот с классическим входом в позицию, когда рынок идёт вверх, а Аллигатор встал по направлению тренда, с пирамидингом по определённому движению в нашу сторону, с усреднением, когда цена возвращается в канал, и мы близки к тому, чтобы выйти из позиции.
Удачных алгоритмов!
Комментарии открыты для друзей!
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