Пример прорисовки собственного набора данных в индикаторе. Индикаторы в OsEngine #19

Рассмотрим пример прорисовки в индикаторе собственного набора данных, который был рассчитан в роботе. 1. Пустой индикатор. EmptyIndicator.Для размещения своих данных на серии индикатора нужно использовать «Пустой индикатор». Он находится здесь: В нём есть только одна серия данных, никаких расчётов внутри не ведётся.КОД[Indicator("EmptyIndicator")] public class EmptyIndicator : Aindicator { private IndicatorDataSeries _series; public override void OnStateChange(IndicatorState state) { if (state == IndicatorState.Configure) { _series = CreateSeries("Series", Color.DarkGreen, IndicatorChartPaintType.Point, true); _series.CanReBuildHistoricalValues = true; } } public override void OnProcess(List candles, int index) { // do nothing } }КОНЕЦ КОДА 2. Где исходники примера? Открываем робота CustomDataInIndicatorSample.На гитХаб исходник примера находится здесь:https://github.com/AlexWan/OsEngine/blob/master/project/OsEngine/Robots/TechSamples/CustomDataInIndicatorSample.csВнутри проекта:  3. Весь код робота.КОД[Bot("CustomDataInIndicatorSample")] public class CustomDataInIndicatorSample : BotPanel { private BotTabSimple _tab; private Aindicator _indicatorEmpty; public CustomDataInIndicatorSample(string name, StartProgram startProgram) : base(name, startProgram) { TabCreate(BotTabType.Simple); _tab = TabsSimple[0]; _tab.CandleFinishedEvent += _tab_CandleFinishedEvent; _indicatorEmpty = IndicatorsFactory.CreateIndicatorByName("EmptyIndicator", name + "EmptyIndicator", false); _indicatorEmpty = (Aindicator)_tab.CreateCandleIndicator(_indicatorEmpty, "SecondArea"); Description = "An example of drawing a series of indicator data calculated in the robot."; } private void _tab_CandleFinishedEvent(List candles) { decimal dataPoint = candles[candles.Count - 1].Close / 2; _indicatorEmpty.DataSeries[0].Values[_indicatorEmpty.DataSeries[0].Values.Count-1] = dataPoint; _indicatorEmpty.RePaint(); } public override string GetNameStrategyType() { return "CustomDataInIndicatorSample"; } public override void ShowIndividualSettingsDialog() { } }КОНЕЦ КОДА 3. На что обратить внимание. Поле для хранения источника BotTabSimple. В это поле потом мы положим объект источника и сможем обращаться к нему из любой части робота. Так удобнее.Поле для хранения «пустого» индикатора.Создание источника BotTabSimple. Сохранение его в переменную _tab. Подписка на событие завершения свечи.Создание индикатора.Обработчик события завершения свечи.Рассчитываем точку данных. В данном случае берём закрытие последней свечи и делим на два.Сохраняем точку данных в серию данных внутри индикатора.Вызываем у индикатора метод RePaint(). 4. На графике.Выглядеть в итоге это всё будет так: Удачных алгоритмов!Комментарии открыты для друзей!Гайд: https://smart-lab.ru/company/os_engine/blog/1024149.php 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

Апр 29, 2025 - 18:38
 0
Пример прорисовки собственного набора данных в индикаторе. Индикаторы в OsEngine #19

Рассмотрим пример прорисовки в индикаторе собственного набора данных, который был рассчитан в роботе.

Пример прорисовки собственного набора данных в индикаторе. Индикаторы в OsEngine #19 

1. Пустой индикатор. EmptyIndicator.

Для размещения своих данных на серии индикатора нужно использовать «Пустой индикатор». Он находится здесь:

Пример прорисовки собственного набора данных в индикаторе. Индикаторы в OsEngine #19

В нём есть только одна серия данных, никаких расчётов внутри не ведётся.

КОД

[Indicator("EmptyIndicator")]
 public class EmptyIndicator : Aindicator
 {
     private IndicatorDataSeries _series;

     public override void OnStateChange(IndicatorState state)
     {
         if (state == IndicatorState.Configure)
         {
             _series = CreateSeries("Series", Color.DarkGreen, IndicatorChartPaintType.Point, true);
             _series.CanReBuildHistoricalValues = true;
         }
     }

     public override void OnProcess(List candles, int index)
     {
         // do nothing
     }
 }

КОНЕЦ КОДА

 

2. Где исходники примера? Открываем робота CustomDataInIndicatorSample.

На гитХаб исходник примера находится здесь:

https://github.com/AlexWan/OsEngine/blob/master/project/OsEngine/Robots/TechSamples/CustomDataInIndicatorSample.cs

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

Пример прорисовки собственного набора данных в индикаторе. Индикаторы в OsEngine #19 

 

3. Весь код робота.

КОД

[Bot("CustomDataInIndicatorSample")]
 public class CustomDataInIndicatorSample : BotPanel
 {
     private BotTabSimple _tab;

     private Aindicator _indicatorEmpty;

     public CustomDataInIndicatorSample(string name, StartProgram startProgram) : base(name, startProgram)
     {
         TabCreate(BotTabType.Simple);
         _tab = TabsSimple[0];
         _tab.CandleFinishedEvent += _tab_CandleFinishedEvent;

         _indicatorEmpty = IndicatorsFactory.CreateIndicatorByName("EmptyIndicator", name + "EmptyIndicator", false);
         _indicatorEmpty = (Aindicator)_tab.CreateCandleIndicator(_indicatorEmpty, "SecondArea");

         Description = "An example of drawing a series of indicator data calculated in the robot.";
     }

     private void _tab_CandleFinishedEvent(List candles)
     {

         decimal dataPoint = candles[candles.Count - 1].Close / 2;

         _indicatorEmpty.DataSeries[0].Values[_indicatorEmpty.DataSeries[0].Values.Count-1] = dataPoint;
         _indicatorEmpty.RePaint();
     }

     public override string GetNameStrategyType()
     {
         return "CustomDataInIndicatorSample";
     }

     public override void ShowIndividualSettingsDialog()
     {

     }
 }

КОНЕЦ КОДА

 

3. На что обратить внимание.

Пример прорисовки собственного набора данных в индикаторе. Индикаторы в OsEngine #19 

  1. Поле для хранения источника BotTabSimple. В это поле потом мы положим объект источника и сможем обращаться к нему из любой части робота. Так удобнее.
  2. Поле для хранения «пустого» индикатора.
  3. Создание источника BotTabSimple. Сохранение его в переменную _tab. Подписка на событие завершения свечи.
  4. Создание индикатора.
  5. Обработчик события завершения свечи.
  6. Рассчитываем точку данных. В данном случае берём закрытие последней свечи и делим на два.
  7. Сохраняем точку данных в серию данных внутри индикатора.
  8. Вызываем у индикатора метод RePaint().

 

4. На графике.

Выглядеть в итоге это всё будет так:

Пример прорисовки собственного набора данных в индикаторе. Индикаторы в OsEngine #19 

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

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

Пример прорисовки собственного набора данных в индикаторе. Индикаторы в OsEngine #19

Гайд: https://smart-lab.ru/company/os_engine/blog/1024149.php
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 #19