Momentum indicators
Percentage Price Oscillator
Percentage difference between fast and slow moving averages.
- Engine
- TA-Lib
- Function
PPO- Input series
- close
- Outputs
- 1
How it works
PPO calculates fast and slow moving averages using the selected TA-Lib MAType, subtracts the slow average from the fast average, divides by the slow average, and multiplies by 100.
Use case
Use PPO as a scale-independent moving-average momentum feature for comparing trend strength across instruments and price levels.
Parameters
| Parameter | Type | Default | Bounds or options | Description |
|---|---|---|---|---|
| Fast Period | integer | 12 | 2…100000 | Number of bars used for the faster moving average. |
| Slow Period | integer | 26 | 2…100000 | Number of bars used for the slower moving average. |
| Moving Average Type | enum | sma | Simple Moving Average, Exponential Moving Average, Weighted Moving Average, Double Exponential Moving Average, Triple Exponential Moving Average, Triangular Moving Average, Kaufman Adaptive Moving Average, MESA Adaptive Moving Average, Triple Exponential Moving Average T3 | TA-Lib moving average type used for both PPO averages. |
Outputs
| Output | Type | Description |
|---|---|---|
| PPO | number | Percentage Price Oscillator value for the bar. |
Reading the result
PPO expresses the separation between fast and slow moving averages on a relative scale. This makes its magnitude easier to compare across differently priced instruments than a price-unit oscillator.
It describes the relative spread of two smoothed baselines. Positive and negative values indicate their ordering; changes describe whether that relative spread is widening or narrowing.
Common mistakes
- Assuming percentage normalization makes different assets or timeframes fully comparable.
- Using incompatible fast and slow horizons.
- Confusing PPO with MACD outputs that use price units.
- Ignoring the selected moving-average type when comparing another tool.
DataCat workflow notes
PPO is often preferable to raw MACD for cross-symbol feature sets. Avoid storing both solely because their names differ; test whether they add distinct information in the target workflow.