К разным источникам данных индикаторы в OsEngine добавляются немного по-разному.
Всего на данный момент в OsEngine четыре источника, к которым можно добавить индикатор:
- BotTabSimple – базовый источник для одного торгового инструмента.
- BotTabIndex – источник, преобразующий данные по N торговым инструментам в индекс по какой-то формуле.
- BotTabScreener – источник, позволяющий торговать одновременно N торговых инструментов.
- BotTabPair – источник для торговли пар инструментов.
Сегодня рассмотрим, как это делается для базового источника одного инструмента (BotTabSimple).
1. Где исходники?
Посмотреть исходный код робота, показанного ниже в качестве примера, можно, открыв его в проекте OsEngine:
На ГитХаб данный робот располагается здесь: https://github.com/AlexWan/OsEngine/blob/master/project/OsEngine/Robots/PositionsMicromanagement/AlligatorTrendAverage.cs
Обязательно откройте его исходный код, чтобы посмотреть, как это работает.
Каждый экземпляр этого робота имеет на графике индикатор Alligator:
2. Конструктор робота. Создание индикаторов и присвоение им параметров.
В конструкторе робота нас должны интересовать следующие вещи:
- Создание параметров робота. Обратите внимание на их название. Это всё – параметры для настройки индикатора, которые будут ниже использованы по назначению.
- Создание индикатора через вызов фабрики индикаторов. И затем добавление индикатора на источник BotTabSimple. На этих двух строках мы остановимся чуть подробнее позже.
- Присваивание параметрам индикатора параметров робота. Про это будет отдельная статья.
- Сохраняем данные по индикатору.
3. Вызов фабрики индикаторов для создания индикатора.
Для того, чтобы в роботе создать индикатор, нужно обратиться к фабрике индикаторов. Вот эта строка:
Метод IndicatorsFactory.CreateIndicatorByName имеет следующие параметры:
- String class. Название индикатора. То, как он называется в папке Scripts или внутри OsEngine, должно точно совпадать с названием индикатора.
- String name. Уникальное имя индикатора. По этому имени данные внутри индикатора будут сохраняться в файловую систему, поэтому обычно нужно использовать «Имя робота» + «Ещё что-то», что здесь и происходит.
- Bool canDelete. Можно ли удалить индикатор с графика. Обычно нужно ставить false, чтобы пользователь не мог удалить этот индикатор вручную.
4. Добавление индикатора на источник BotTabSimple.
После того, как индикатор создан, необходимо положить его на источник. Для этого:
Обращаемся к источнику, на который будем привязывать индикатор, и вызываем у него метод CreateCandleIndicator. На вход метод принимает:
- Объект индикатора. В данном случае это _alligator.
- String nameArea. Область данных, на которую разместится индикатор. Prime – это основная область, на которой лежат свечи. Впишите сюда любую другую, и индикатор отобразится в новой области данных.
5. Установка параметров индикатора, когда пользователь сменил параметры робота.
Это очень важная история для тех, кто хочет оптимизировать своих роботов в оптимизаторе. Необходимо подписаться на событие изменения параметров у робота и передать их в параметры индикатора:
- Подписываемся на событие изменения параметров робота. Это в том числе происходит и в оптимизаторе, когда он перебирает параметры.
- Обработчик события изменения параметров робота.
- Первый делом проверяем, соответствуют ли параметры робота параметрам индикатора. Входим в ветку изменения параметров, только если изменились нужные нам.
- Устанавливаем новые параметры для индикатора.
- Вызываем у индикатора метод Reload(), он перестраивает все значения в индикаторе, затем метод Save().
6. Доступ к данным индикатора в логике робота.
А теперь посмотрим, как именно данные индикатора используются в торговой логике робота.
Пример 1. Проверка наличия данных в индикаторе.
Здесь мы смотрим на DataSeries индикатора, и если в них есть 0, выходим из логики:
Пример 2. Запрос данных для проверки рыночного условия.
А здесь мы запрашиваем последние данные по индикатору для того, чтобы просмотреть потом расположение скользящих средних в Аллигаторе:
Удачных алгоритмов!
Комментарии открыты для друзей!
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