Изображение блога
OS_Engine_team
OS_Engine_team Блог компании Os_Engine
22 августа 2024, 19:03

Ваш первый скринер. ГРААЛЬ. Робот, просматривающий всю площадку одновременно. Быстрый старт в программировании OsEngine #7

В данной статье посмотрим робота, который торгует одновременно всю площадку, к которой подключён. Т.е. может торговать несколько десятков или сотен инструментов одновременно. Не пугайтесь! Это всё ещё чуть больше 200 строк кода, т.к. в OsEngine для этого есть специальный тип источника: BotTabScreener. Им и будем учиться пользоваться.

Прибыльность у данного скринера хорошая из коробки. На некоторых настройках около 0.5% на сделку на MOEX TOP 30 за 10 лет.

Ваш первый скринер. ГРААЛЬ. Робот, просматривающий всю площадку одновременно. Быстрый старт в программировании OsEngine #7

 

Логика робота.

По-простому, это импульсный трендовый робот на пробое верхней границы Bollinger с фильтром по Momentum. Вся его соль в том, что он смотрит весь рынок одновременно, и с ним удобно делать кросс-тесты (это когда тестируется торговля одной стратегии на множестве инструментов).

Ваш первый скринер. ГРААЛЬ. Робот, просматривающий всю площадку одновременно. Быстрый старт в программировании OsEngine #7 

По пунктам:

  1. Смотрим одновременно N инструментов по площадке.
  2. Если по какому-то инструменту сложилась ситуация:
    1. Текущая цена выше верхней линии боллинджера;
    2. Текущее значение Momentum выше определённого значения (настраиваемое);
    3. По другим инструментам не превышено одновременное кол-во открытых позиций;
    4. Открываем ЛОНГ.

Далее будем разбирать, как робот устроен…

 

Шаг 1. Открываем исходный код робота BollingerMomentumScreener.

На ГитХаб он лежит здесь: https://github.com/AlexWan/OsEngine/blob/master/project/OsEngine/Robots/Screeners/BollingerMomentumScreener.cs

Внутри проекта тут:

Ваш первый скринер. ГРААЛЬ. Робот, просматривающий всю площадку одновременно. Быстрый старт в программировании OsEngine #7 

 

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

Ваш первый скринер. ГРААЛЬ. Робот, просматривающий всю площадку одновременно. Быстрый старт в программировании OsEngine #7

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

 

Шаг 3. Создание параметров.

В примере можно подсмотреть сразу три типа параметра:

  1. String – в данном случае перечисление.
  2. Decimal – число с плавающей запятой.
  3. Int – целое число.

Ваш первый скринер. ГРААЛЬ. Робот, просматривающий всю площадку одновременно. Быстрый старт в программировании OsEngine #7

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

А так это выглядит в интерфейсе:

Ваш первый скринер. ГРААЛЬ. Робот, просматривающий всю площадку одновременно. Быстрый старт в программировании OsEngine #7

За что отвечают параметры:

1. Regime – режим работы.

  • Off – Выключен.
  • On – Включен и будет входить и в лонг и в шорт.
  • 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 – режим выбора объёма.
  • Contracts – кол-во контрактов инструмента.
  • Contract currency – валюта контракта.
  • Deposit percent – процент от депозита.
9. Volume – значение объёма. Что именно, зависит от предыдущего пункта. В случае Contracts тут указывается объём инструмента. В случае Contract currency здесь указывается кол-во рублей или долларов, которыми нужно войти. В случае с Deposit percent здесь указывается % от общего депозита, которым нужно войти в контракт.
10. Asset in portfolio – тут нужно указывать название валюты, которое будет использовано для расчёта объёма, если Вы выбрали тип объёма “Deposit percent”. В тестере оставляем «Prime». На крипте это обычно “USDT”.
11. Slippage % — проскальзывание для цен ордера.

 

Шаг 4. Логика.

Обработчик события завершения свечи по инструменту в скринере:

Ваш первый скринер. ГРААЛЬ. Робот, просматривающий всю площадку одновременно. Быстрый старт в программировании OsEngine #7

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

 

Логика открытия позиций:

Ваш первый скринер. ГРААЛЬ. Робот, просматривающий всю площадку одновременно. Быстрый старт в программировании OsEngine #7

  1. Обращаемся к источнику скринера и проверяем, сколько позиций всего набрал робот по разным инструментам. Не превышает ли это то значение, которое указал пользователь.
  2. Берём последнюю цену свечи. Закрытие.
  3. Берём значение верхней линии Bollinger. Также в этом процессе проверяем, чтобы параметры индикатора на конкретном инструменте совпадали с тем, что пользователь установил в настройках робота.
  4. Берём значение индикатора Momentum. Также в этом процессе проверяем, чтобы параметры индикатора на конкретном инструменте совпадали с тем, что пользователь установил в настройках робота.
  5. Конечная логика открытия позиции:
  • Если цена закрытия последней свечи выше верхней линии Bollinger.
  • Если последнее значение Momentum выше уровня, установленного пользователем.
  • Открываем позицию.

 

Шаг 5. Подключение разных источников в интерфейсе и запуск тестера.

Если Вы никогда не настраивали источник BotTabScreener, то нужно почитать вот эту статью: https://smart-lab.ru/company/os_engine/blog/1030326.php

В итоге это выглядит так:

Ваш первый скринер. ГРААЛЬ. Робот, просматривающий всю площадку одновременно. Быстрый старт в программировании OsEngine #7 

  1. Робот в Bot Station Light выглядит, как и все остальные. Одна строка.
  2. Если нажать на кнопку Chart у этого робота, то откроется окно робота, в котором можно подключить множество инструментов. Сам источник BotTabScreener это таблица с инструментами.
  3. Если в таблице подключенных инструментов в скринер нажать на кнопку Chart, откроется окно конкретного инструмента, где можно посмотреть графики, сделки и индикаторы.

Удачных алгоритмов!

Комментарии открыты для друзей!

Ваш первый скринер. ГРААЛЬ. Робот, просматривающий всю площадку одновременно. Быстрый старт в программировании OsEngine #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

Ваш первый скринер. ГРААЛЬ. Робот, просматривающий всю площадку одновременно. Быстрый старт в программировании OsEngine #7

0 Комментариев

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн