Skip to content

Technical indicators

Percentage Volume Oscillator (PVO)

Meant to show whether volume is rising or falling against its own average.

PVO applies the Percentage Price Oscillator to volume: a fast EMA of volume against a slow one, as a percentage. With signalEMAPeriods, it adds a signal line and histogram.

Traders use rising PVO to confirm a breakout and falling PVO to warn that a move is running out of participation.

PVO = (EMA(volume, fast) − EMA(volume, slow)) / EMA(volume, slow) × 100
signal = EMA(PVO, signalEMAPeriods)
histogram = PVO − signal

Call: pvo(fastEMAPeriods, slowEMAPeriods, signalEMAPeriods)

Setting Chart default
fastEMAPeriods: Fast EMA Periods 12
slowEMAPeriods: Slow EMA Periods 26
signalEMAPeriods: Signal EMA Periods 9

What you get: a list of 3, in this order: 1. a number (“Price Volume Oscillator”); 2. a number (“Price Volume Oscillator Signal”); 3. a number (“Price Volume Oscillator Histogram”).

Warm-up: with pvo(12, 26, 9), it asks for 0 bars of history and a run-up of 61, and its first value came on bar 34 of the example data.

Percentage Volume Oscillator (PVO) drawn by its own code on example prices

The prices are made up, hourly, and the same on every page, so the chart shows how the indicator behaves, not how a market behaved.

function onIntervalClose() {
const lines = pvo(12, 26, 9);
log("PVO", lines[0], "signal", lines[1], "histogram", lines[2]);
}

With a signal, the order is PVO, signal, histogram: the reverse of the PPO’s order. Without signalEMAPeriods, pvo(12, 26) gives a single number.