Продолжаем разбираться с сетками в скринерах. Учимся маркетить инструменты не по одному, а пачками. Сегодня посмотрим пример, который выбрасывает сетки в тренд по ускорению рынка относительно усреднённой внутридневной волатильности.
Сегодняшний пример: GridScreenerAdaptiveSoldiers.
Тип сетки: MarketMaking.
Логика: Сигналом для выброса сетки служит паттерн «Три солдата», т.е. три расположенные в одну сторону свечи (растущие или падающие). Три свечи вместе должны соответствовать размеру в N % от усреднённой внутридневной волатильности, которая считается внутри робота.
Закрытие сетки происходит по двум условиям: 1) Кол-во отработанных позиций. 2) Кол-во времени жизни сетки в секундах.

1. Пример в проекте.
Для начала Вам следует открыть исходный код робота GridScreenerAdaptiveSoldiers. Внутри проекта это здесь:

Робот не из маленьких, поэтому для удобства разбит на четыре региона:

- Constructor, settings, service – сервисный код.
- Volatility adaptation – код, отвечающий за расчёт внутридневной волатильности и хранения этих данных.
- Logic – основная торговая логика.
- Non trade periods – место хранения параметров и методов, отвечающих за неторговые периоды.
2. Конструктор.
Сеточники – отличаются от обычного робота, только способом открытия позиции. Т.е. конструкторы совершенно обычные. Данный робот использует источник BotTabScreener для работы с N инструментов одновременно:
- Блок кода, в котором мы создаём источник типа BotTabScreener. Сохраняем его в поле класса, подписываемся на событие завершения свечи по какому-то инструменту, подписываемся на событие старта теста для тестера.
- Создание параметров.
- Создание параметров для неторговых периодов, которые будут передаваться напрямую в сетки.
- Загрузка данных по волатильности в боевых торгах после перезагрузки.
3. Параметры робота.
У данного робота три вкладки параметров, рассмотрим их по очереди.
Вкладка «Prime»:
- Regime – режим работы.
- Off – Выключен.
- On – Включен и будет входить в лонг.
- OnlyLong – выбрасываем только сетки на покупку, когда цена идёт вверх.
- OnlyShort – выбрасываем только сетки на продажу, когда цена идёт вниз.
- Days volatility adaptive – за какое количество дней усредняется волатильность.
- Height soldiers volatility percent – минимальный размер трёх солдат в % от усреднённой внутридневной волатильности, который должен быть для выброса сетки.
- Min height one soldier volatility – минимальный размер каждой из трёх свечей в % от усреднённой внутридневной волатильности, который должен быть для выброса сетки.
- Sma filter is on – включает фильтр по наклону скользящей средней.
- Sma filter length – длина скользящей для фильтра.
Вкладка «Grid»:
- Max grids count – максимальное кол-во сеток, выброшенное на разные инструменты.
- Grid lines count – количество линий в сетке.
- Grid lines step – шаг в % между линиями.
- Profit % – расстояние до закрывающего ордера.
- Grid close positions max — количество исполненных открывающих ордеров, после чего сетка переходит в режим CloseForced и закрывает позиции.
- Grid life time seconds – время жизни сетки в секундах.
- Volume type – режим выбора объёма.
- Contracts – кол-во контрактов инструмента.
- Contract currency – валюта контракта.
- Deposit percent – процент от депозита.
- Volume – значение объёма. Что именно, зависит от предыдущего пункта. В случае Contracts тут указывается объём инструмента. В случае Contract currency здесь указывается кол-во рублей или долларов, которыми нужно войти. В случае с Deposit percent здесь указывается % от общего депозита, которым нужно войти в контракт.
- Asset in portfolio – тут нужно указывать название валюты, которое будет использовано для расчёта объёма, если Вы выбрали тип объёма “Deposit percent”. В тестере и Т-Инвест оставляем «Prime». На крипте это обычно “USDT”.
*Все значения для объёмов указаны для одной линии.
Вкладка «Trade periods»:
Каждую настройку описывать не будем. Это полный дубль имеющихся в ручных настройках сетки неторговых периодов.
4. Точка входа в логику.
Завершение свечи по какому-то инструменту, подключенному в скринер:
- Если главный режим робота Off, ничего не делаем.
- Если свечей меньше 150, ничего не делаем.
- Блок кода, в котором идёт расчёт волатильности и минимальных значений свечек для выброса сеток.
- Если уже существует ранее выброшенная сетка по инструменту, то заходим в логику её закрытия или удаления.
- Если сеток по источнику нет, вызываем метод для попытки выбросить сетку по условию.
5. Логика сигнала на выброс сетки.
- Фильтр по количеству сеток на всех источниках.
- Фильтр по времени.
- Проверка фильтров по размеру свечей относительно ранее рассчитанных показателей.
- Логика выброса сетки ЛОНГ. Проверка направление свечек. Прохождение фильтра по скользящей средней.
- Логика выброса сетки ШОРТ. Проверка направление свечек. Прохождение фильтра по скользящей средней.
6. Выброс сетки. Отдельным методом.

- Создание основного объекта сетки.
- Устанавливаем тип сетки. В данном случае это MarketMaking. Т.е. будем заходить и выходить по каждой линии отдельно.
- Устанавливаем объёмы для сетки.
- Устанавливаем настройки для генерации сетки и вызываем метод генерации. После этого внутри сетки появляются линии, по которым будут в дальнейшем выставляться ордера.
- Устанавливаем неторговые периоды для сетки.
- Устанавливаем Trailing Up. Заметьте, что шаг сдвига рассчитывается в процентах. В данном случае это половина процента. 0.5%. При этом вызван метод, обрезающий цены по цене инструмента.
- Устанавливаем Trailing Down. Заметьте, что шаг сдвига рассчитывается в процентах. В данном случае это половина процента. 0.5%. При этом вызван метод, обрезающий цены по цене инструмента.
- Устанавливаем закрытие сетки по количеству сделок.
- Устанавливаем закрытие сетки по времени жизни.
- Сохраняем то, что получилось.
- Включаем режим сетки в ON. После этого должны начать выставляться заявки.
7. Закрытие сетки и удаление из памяти.
Метод вызывается, когда уже есть выброшенные сетки в рынок. Его предназдачение – удалить сетки из памяти, если они завершили свою работу, и включить у сетки режим закрытия, если имеем на рынке обратный сигнал к открытию.

- Удаляем сетку, если она уже отработала.
HFT detected:
Почти на каждом инструменте из обоймы прибыль:

Удачных алгоритмов!
Пост из серии статей про Сеточных роботов: https://smart-lab.ru/company/os_engine/blog/1167610.php
Комментарии открыты для друзей!

https://smart-lab.ru/company/os_engine/blog/1024149.php
OsEngine: https://github.com/AlexWan/OsEngine
Поддержка OsEngine: https://t.me/osengine_official_support
Канал научный трейдинг: https://t.me/bad_quant