Summary
KlingerVolumeOscillator is RTTA's streaming implementation of: Volume-force oscillator using fast and slow EMAs plus signal line.
Update API
result = rtta.KlingerVolumeOscillator().update(close, high, low, volume)
The update(...) call consumes one observation using close, high, low, volume. advance(...)
uses the same inputs when the caller wants to update state without materializing
a Python return value.
Theory Of Operation
KlingerVolumeOscillator normalizes recent directional movement into an oscillator. The implementation keeps only causal rolling or smoothed state and maps that state into the current oscillator value.
Recurrence
Let \(z_t = (close_t, high_t, low_t, volume_t)\) denote the observation consumed by one
update(...) call and let \(\theta\) denote constructor parameters such as
window lengths, thresholds, and smoothing constants.
update(...) returns a result struct with fields kvo, signal, histogram.
Implementation Notes
The recurrence is implemented in src/rtta/indicator.cpp in class KlingerVolumeOscillator.
