Что изменить в индикаторе, чтобы он рассчитывался в режиме реального времени, а не по факту начала формирования следующей свечи?
Код
protected override decimal OnProcess(IIndicatorValue input)
        {
                var candle = input.GetValue<Candle>();
               
               if (input.IsFinal)
                {
                    _bufferh.Add(candle.HighPrice);
                    _bufferl.Add(candle.LowPrice);
                }
                _zigZagBuffer.Add(0);
                _bufferh1.Add(0);
                _bufferh2.Add(0);
                
                _bufferl1.Add(0);
                _bufferl2.Add(0);
                
                for (int i = 1; i < _bufferl.Count; i++)
                { 
                    if (_bufferh[i] > _bufferh[i - 1])
                    {
                        _bufferh1[i] = _bufferh[i];
                    }
                    else
                        _bufferh1[i] = _bufferh1[i - 1];
                    if (_bufferh1[i] > _bufferh1[i - 1])
                    {
                        _bufferh2[i] = _bufferh1[i];
                    }
                    else
                        _bufferh2[i] = _bufferh2[i - 1];
                    
                    
                    if (_bufferl[i] < _bufferl[i - 1])
                    {
                        _bufferl1[i] = _bufferl[i];
                    }
                    else
                        _bufferl1[i] = _bufferl1[i - 1];
                    if (_bufferl1[i] < _bufferl1[i - 1])
                    {
                        _bufferl2[i] = _bufferl1[i];
                    }
                    else
                        _bufferl2[i] = _bufferl2[i - 1];
                    
                        // zigzag
                        if (_bufferl2[i] != _bufferl2[i - 1])
                        {
                            _zigZagBuffer[i] = _bufferl2[i];
                            LastValue = _bufferl2[i];
                        }
                        else
                        {
                            if (_bufferh2[i] != _bufferh2[i - 1])
                            {
                                _zigZagBuffer[i] = _bufferh2[i];
                                LastValue = _bufferh2[i];
                            }
                            else
                            {
                                _zigZagBuffer[i] = _zigZagBuffer[i - 1];
                                LastValue = _zigZagBuffer[i];
                            }
                        }
                }
                if (candle.State == CandleStates.Finished || candle.State == CandleStates.Changed)
                {
                    if (_zigZagBuffer == _bufferl2 && candle.LowPrice < LastValue)
                        CurrentValue = Math.Min(candle.LowPrice,LastValue);
                    else
                    {
                        if (_zigZagBuffer == _bufferh2 && candle.HighPrice > LastValue)
                            CurrentValue = Math.Max(candle.HighPrice,LastValue);
                        else
                            CurrentValue = LastValue;
                    }
                }
                return CurrentValue;
                
         }