Рассмотрим пример прорисовки в индикаторе собственного набора данных, который был рассчитан в роботе.
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.
На гитХаб исходник примера находится здесь:
Внутри проекта:
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
Подробнее https://smart-lab.ru/compan...






