Что изменить в индикаторе, чтобы он рассчитывался в режиме реального времени, а не по факту начала формирования следующей свечи?
Код
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;
}