В данном посте поговорим о сериях данных в индикаторах OsEngine. Как их добавлять в индикатор. Как добавлять в них данные. Как отключать и включать прорисовку.

Серия данных для индикатора позволяет:
- Хранить в себе числовые значения индикатора и дают доступ к их сохранению.
- Даёт универсальный способ доступа к данным индикатора из роботов.
- Даёт возможность настроить способ отрисовки на чарте и прорисовать свои данные на чартах.
Посмотреть на реализацию серии данных в проекте можно здесь:
https://github.com/AlexWan/OsEngine/blob/master/project/OsEngine/Indicators/IndicatorDataSeries.cs
Пример, рассматриваемый в статье, посмотреть можно здесь:
https://github.com/AlexWan/OsEngine/blob/master/project/OsEngine/Indicators/Samples/Sample3IndicatorDataSeries.cs
1. Класс IndicatorDataSeries.
Посмотрим на его поля и свойства, к которым нам может быть интересно получить доступ и что-то поменять:

- Сервисные функции, нужные для сохранения и прорисовки. Лучше их не трогать.
- Цвет на чарте для точек данных.
- Тип графика на чарте. Может быть:
- Line – линия.
- Column – столбцы.
- Point – точка. Обязательно применяйте, когда Ваш индикатор имеет разрывы в данных.
- Включена или выключена отрисовка индикатора на графике. False – Выключена.
- Нужно ли перерисовывать каждый раз индикатор с нуля. Нужно включать в случае, если индикатор меняется не только по последней точке данных, а еще если Вам надо увидеть изменения глазами, например, индикатор ZigZag или канал линейной регрессии. Замедляет работу программы, если True.
- Массив значений индикатора.
- Последнее значение серии. Упрощённый способ обратиться к последнему значению.
2. Создание серии данных.

- Создаём поле типа IndicatorDataSeries в классе индикатора. Это нужно, чтобы он был доступен из любой точки индикатора в дальнейшем.
- Внутри метода OnStateChange при статусе Configure создаём сам объект серии, вызывая метод CreateSeries. Параметры метода:
- string name — имя серии данных.
- Color color – цвет серии данных на графике.
- IndicatorChartPaintType – chartPaintType – тип графика. Line, Column, Point.
- bool isPaint – нужно ли прорисовывать данную серию данных на графике.
3. Установка данных для серии данных.
Это делается в методе OnProcess:
- Обращаемся к серии данных.
- У серии обращаемся к массиву Values по индексу index.
- В данном случаем мы сохраняем в серию данных центр от свечей по индексу. Для этого обращаемся в массив свечей по индексу.
- И запрашиваем у свечи по индексу значение центра свечи.
На чарте данный индикатор будет выглядеть, как на картинке ниже. При этом, перейдя в настройках индикатора во вкладку Визуал, можно увидеть серию данных и поменять ей настройки из интерфейса:

4. Полный исходный код примера.
using OsEngine.Entity;
using System.Collections.Generic;
namespace OsEngine.Indicators.Samplesъ
{
[Indicator(«Sample3IndicatorDataSeries»)]
public class Sample3IndicatorDataSeries: Aindicator
{
public IndicatorDataSeries Series1;
public override void OnStateChange(IndicatorState state)
{
if(state == IndicatorState.Configure)
{
Series1 = CreateSeries("Series 1", System.Drawing.Color.AliceBlue, IndicatorChartPaintType.Line, true);
}
}
public override void OnProcess(List<Candle> source, int index)
{
Series1.Values[index] = source[index].Center;
}
}
}
Удачных алгоритмов!
Комментарии открыты для друзей!

OsEngine: https://github.com/AlexWan/OsEngine
Поддержка OsEngine: https://t.me/osengine_official_support