← Zurück

Отрисовка индикаторов на истории и онлайн.

Добрый день! Возмем индикатор SMA

 _sma = new SimpleMovingAverage() { Length = 10 };
....
var smaValue = _sma.Process(candle);

Далее если указать для smaValue.IsFinal = true то текущее значение будет браться за расчет и фиксироваться по оси x. То есть можно указать вот так:

smaValue.IsFinal = candle.State == CandleStates.Finished;

Это будет логично. Если свеча закрыта то рассчитываем индикатор и фиксируем на оси x.

От сюда вопрос: Почему это не работает при загрузке истории? Ведь у исторических свечей так же есть состояние Finished и Active. Если не отфильтровывать историю от реалтайма то индикатор убегает вперед свечек.

Kommentare (3)

Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen

Support
Support

В хранилище хранятся только сформированные свечи.

Константин
Константин Autor

Здравствуйте. История приходит из Quik'а. Если исторические свечи имеют статус Finished то smaValue.IsFinal будет всегда true так как:

smaValue.IsFinal = candle.State == CandleStates.Finished;

Соответственно если мы явно указываем какое значение брать за расчет то все должно рисоваться нормально, но рисуется вот так: Если значение IsFinal не работает в этом случае то для чего оно? Вот код отрисовки:

            _candleManager.Processing += (series, candle) =>
            {
                if (series != _series)
                    return;

                // Рассчитываем значение индикатора
                var smaValue = _sma.Process(candle);
                //Если свеча закончена то берем текущее значение за расчет и фиксируем по оси X
                smaValue.IsFinal = candle.State == CandleStates.Active;

                // Создаем экземпляр класса ChartDrawData - класс, где группируются данные для отрисовки  
                var data = new ChartDrawData();

                // chartItem - набор элементов, привязанных к одной точке на шкале X
                var chartItem = data.Group(candle.OpenTime).Add(_candleElement, candle);
                chartItem.Add(_indicatorElement, smaValue);

                // Безопасно отрисовываем элементы на графике
                this.GuiSync(() => Chart.Draw(data));

            };

Support
Support
Support

Спасибо информация передана.