Percentage Volume Oscillator (PVO)

get_pvo(quotes, fast_periods=12, slow_periods=26, signal_periods=9)


name type notes
quotes Iterable[Quote] Iterable of the Quote class or its sub-class.
See here for usage with pandas.DataFrame
fast_periods int, default 12 Number of periods (F) for the faster moving average. Must be greater than 0.
slow_periods int, default 26 Number of periods (S) for the slower moving average. Must be greater than fast_periods.
signal_periods int, default 9 Number of periods (P) for the moving average of PVO. Must be greater than or equal to 0.

Historical quotes requirements

You must have at least 2×(S+P) or S+P+100 worth of quotes, whichever is more, to cover the convergence periods. Since this uses a smoothing technique, we recommend you use at least S+P+250 data points prior to the intended usage date for better precision.

quotes is an Iterable[Quote] collection of historical price quotes. It should have a consistent frequency (day, hour, minute, etc). See the Guide for more information.



Convergence warning: The first S+P+250 periods will have decreasing magnitude, convergence-related precision errors that can be as high as ~5% deviation in indicator values for earlier periods.


name type notes
date datetime Date
pvo float, Optional Normalized difference between two Volume moving averages
signal float, Optional Moving average of the pvo line
histogram float, Optional Gap between of the pvo and signal line


See Utilities and Helpers for more information.


from stock_indicators import indicators

# This method is NOT a part of the library.
quotes = get_historical_quotes("SPY")

# Calculate Pvo(12,26,9)
results = indicators.get_pvo(quotes, 12, 26, 9);

About Percentage Volume Oscillator (PVO)

The Percentage Volume Oscillator is a simple oscillator view of two converging/diverging exponential moving averages of Volume. [Discuss] 💬