В данной статье посмотрим робота, который торгует одновременно всю площадку, к которой подключён. Т.е. может торговать несколько десятков или сотен инструментов одновременно. Не пугайтесь! Это всё ещё чуть больше 200 строк кода, т.к. в OsEngine для этого есть специальный тип источника: BotTabScreener. Им и будем учиться пользоваться.
Прибыльность у данного скринера хорошая из коробки. На некоторых настройках около 0.5% на сделку на MOEX TOP 30 за 10 лет.
По-простому, это импульсный трендовый робот на пробое верхней границы Bollinger с фильтром по Momentum. Вся его соль в том, что он смотрит весь рынок одновременно, и с ним удобно делать кросс-тесты (это когда тестируется торговля одной стратегии на множестве инструментов).
По пунктам:
1. Смотрим одновременно N инструментов по площадке.
2. Если по какому-то инструменту сложилась ситуация:
1. Текущая цена выше верхней линии боллинджера;
2. Текущее значение Momentum выше определённого значения (настраиваемое);
3. По другим инструментам не превышено одновременное кол-во открытых позиций;
4. Открываем ЛОНГ.
На ГитХаб он лежит здесь: ссылка
Внутри проекта тут:

Шаг 2. Конструктор. Создание источника скринера и его использование.

1. Создание поля для хранения источника скринер. Это нужно, чтобы в любом месте робота можно было потом обратиться к источнику.
2. Вызываем у робота процедуру создания источника типа BotTabScreener.
3. Источники такого типа хранятся в массиве TabsScreener. Сохраняем объект в ранее созданное поле.
4. Подписываемся на событие завершения свечи по какому-то инструменту. В обработчике этого события у нас будет логика.
5. Создаём два индикатора для скринера. В данном случае это Bollinger и Momentum. Они будут размещены НА ВСЕХ бумагах, которые Вы подключите в скринер.
В примере можно подсмотреть сразу три типа параметра:
1. String – в данном случае перечисление.
2. Decimal – число с плавающей запятой.
3. Int – целое число.

1. Создание полей для хранения параметров. Это нужно, чтобы в любом месте робота можно было потом обратиться к параметру.
2. Создание самих параметров.
А так это выглядит в интерфейсе:

За что отвечают параметры:
1. Regime – режим работы.
1. Off – Выключен.
2. On – Включен и будет входить и в лонг и в шорт.
3. OnlyClosePosition – сможет только закрыть позицию, а входить не будет.
2. Max positions – максимальное одновременное кол-во позиций.
3. Min momentum value – минимальное значение индикатора Momentum для открытия позиции.
4. Bollinger length – длина расчёта индикатора Bollinger.
5. Bollinger deviation – отклонение индикатора Bollinger.
6. Momentum length – длина расчёта индикатора Momentum.
7. Trail stop % - величина подтягивающегося стоп приказа.
8. Volume type – режим выбора объёма.
1. Contracts – кол-во контрактов инструмента.
2. Contract currency – валюта контракта.
3. Deposit percent – процент от депозита.
9. Volume – значение объёма. Что именно, зависит от предыдущего пункта. В случае Contracts тут указывается объём инструмента. В случае Contract currency здесь указывается кол-во рублей или долларов, которыми нужно войти. В случае с Deposit percent здесь указывается % от общего депозита, которым нужно войти в контракт.
10. Asset in portfolio – тут нужно указывать название валюты, которое будет использовано для расчёта объёма, если Вы выбрали тип объёма “Deposit percent”. В тестере оставляем «Prime». На крипте это обычно “USDT”.
11. Slippage % — проскальзывание для цен ордера.
Обработчик события завершения свечи по инструменту в скринере:

1. Обработчик события завершения свечи по какому-то инструменту в скринере. Точка входа в логику. В параметрах передаёт свечи инструмента и источник (BotTabSimple) инструмента, через который можно торговать.
2. Проверяем, включен ли робот и есть ли хотя бы несколько свечек по инструменту.
3. Запрашиваем у текущего инструмента (по которому завершилась свеча) его текущие открытые позиции.
4. Если позиций нет и режим работы робота не «Только закрытие», то заходим в метод открытия позиции.
5. Если позиции есть, заходим в метод закрытия позиции.
Логика открытия позиций:

1. Обращаемся к источнику скринера и проверяем, сколько позиций всего набрал робот по разным инструментам. Не превышает ли это то значение, которое указал пользователь.
2. Берём последнюю цену свечи. Закрытие.
3. Берём значение верхней линии Bollinger. Также в этом процессе проверяем, чтобы параметры индикатора на конкретном инструменте совпадали с тем, что пользователь установил в настройках робота.
4. Берём значение индикатора Momentum. Также в этом процессе проверяем, чтобы параметры индикатора на конкретном инструменте совпадали с тем, что пользователь установил в настройках робота.
5. Конечная логика открытия позиции:
1. Если цена закрытия последней свечи выше верхней линии Bollinger.
2. Если последнее значение Momentum выше уровня, установленного пользователем.
3. Открываем позицию.
Если Вы никогда не настраивали источник BotTabScreener, то нужно почитать вот эту статью: https://smart-lab.ru/company/os_engine/blog/1030326.php
В итоге это выглядит так:

1. Робот в Bot Station Light выглядит, как и все остальные. Одна строка.
2. Если нажать на кнопку Chart у этого робота, то откроется окно робота, в котором можно подключить множество инструментов. Сам источник BotTabScreener это таблица с инструментами.
3. Если в таблице подключенных инструментов в скринер нажать на кнопку Chart, откроется окно конкретного инструмента, где можно посмотреть графики, сделки и индикаторы.
Удачных алгоритмов!
P.S.
Os Engine поддержка терминала: https://t.me/osengine_official_support
Обсуждаем в телеграмме: https://t.me/o_s_a_chat
Канал проекта: https://t.me/bad_quant
Комментарии