Играясь с индикаторами и примером SampleCandles, обнаружил, следующее:
Если в методе DrawCandle обработку делать следующим образом, то средняя просто соединяет цены закрытия свечей:
this.GuiAsync(() =>
{
var wnd = _chartWindows.TryGetValue(series);
var bollingerValue = candle.State == CandleStates.Finished
? new ChartIndicatorValue(_bollingerElement.Indicator, _bollingerElement.Indicator.Process(candle))
: null;
wnd.Chart.ProcessValues(candle.OpenTime, new Dictionary<IChartElement, object>
{
{ _candlesElement, candle },
{ _bollingerElement, bollingerValue }
});
});
Если же код немного модифицировать, то индикатор отображается нормально:
var wnd = _chartWindows.TryGetValue(series);
var bollingerValue = candle.State == CandleStates.Finished
? new ChartIndicatorValue(_bollingerElement.Indicator, _bollingerElement.Indicator.Process(candle))
: null;
this.GuiAsync(() => wnd.Chart.ProcessValues(candle.OpenTime, new Dictionary<IChartElement, object>
{
{ _candlesElement, candle },
{ _bollingerElement, bollingerValue }
}));
С чем это может быть связано? Вроде как проблему решил, но всё равно хочется разобраться, почему проблема возникла.
PS: в аттаче работающий проект.