Skip to content

๐Ÿ“ PPO โ€” Percentage Price Oscillator

PPO is MACD's twin, with one change that matters a lot in practice: it expresses momentum as a percentage of price instead of raw price units, making it directly comparable across assets of any price level.


๐Ÿ’ก Financial Meaning

A โ‚ฌ2 MACD reading means something very different for a โ‚ฌ10 stock than for a โ‚ฌ500 stock. PPO removes that ambiguity: a PPO of 2% is 2% regardless of the instrument's price, so screening a whole portfolio for "which assets have the strongest momentum right now" becomes meaningful with PPO in a way it is not with raw MACD.


๐Ÿ”ข Mathematical Formulas

  1. PPO Line โ€” the same fast/slow EMA spread as MACD, but divided by the slow EMA and rescaled to a percentage:

    \[ PPO_t = 100 \cdot \frac{EMA_{fast}(C_t) - EMA_{slow}(C_t)}{EMA_{slow}(C_t)} \]
  2. Signal Line โ€” an EMA smoothing of the PPO line itself:

    \[ Signal_t = EMA_{signal}(PPO_t) \]
  3. Histogram โ€” the momentum-of-momentum:

    \[ Histogram_t = PPO_t - Signal_t \]

โš™๏ธ Parameters

Parameter Key Default Description
Fast Period fastPeriod 12 Short-term EMA window (sessions).
Slow Period slowPeriod 26 Long-term EMA window (sessions), also the PPO's normalising denominator.
Signal Period signalPeriod 9 EMA smoothing applied to the PPO line (sessions).

๐ŸŽ›๏ธ Signal Processing Equivalent โ€” Gain-Normalised Band-Pass Filter

MACD's band-pass output (see MACD) has an amplitude that scales with the input's absolute level. PPO divides that same band-pass output by a low-pass estimate of the signal's own level (\(EMA_{slow}\)) โ€” this is exactly Automatic Gain Control (AGC), a standard technique in signal processing for keeping a filter's output amplitude comparable regardless of the input's DC level.

flowchart LR
    C["๐Ÿ’น Close"] --> EF["๐Ÿ“‰ EMA fast"]
    C --> ES["๐Ÿ“‰ EMA slow"]
    EF --> DIFF["โž– EMA fast โˆ’ EMA slow"]
    ES --> DIFF
    DIFF --> AGC["๐ŸŽš๏ธ รท EMA slow ร—100 (AGC)"]
    AGC --> PPO["๐Ÿ“ PPO line"]
    PPO --> SIG["๐Ÿ” EMA(signalPeriod)"]
    PPO --> HIST["๐Ÿ“Š Histogram = PPO โˆ’ Signal"]
    SIG --> HIST

Same crossovers, different scale

Every crossover rule that applies to MACD (line crosses signal, histogram flips sign) applies identically to PPO โ€” only the units change, from price to percent. Use PPO instead of MACD whenever comparing momentum across different instruments; use MACD when working on a single instrument in its native units.

Percentage Price Oscillator on StockCharts