Volume & money flow

Volume Zone Oscillator · VZO

A bounded oscillator that signs volume by price direction to show whether buyers or sellers control the flow.

Works in most conditionsEngine-computed on a fixed sample series
14512096Above zero = bullish momentumBelow zero = bearish momentum
VZO 619594.03How to read VZO on the chart — the callouts mark what to look for.

The formula

Volume is signed positive on an up close and negative on a down close. VZO smooths that signed volume with an EMA, divides by smoothed total volume, and scales the ratio to a −100 to +100 range. The worked total below uses plain sums to show the idea; the real VZO uses EMA smoothing over the length (14 is the default).

VZO = 100 × ( EMA(signed volume) ÷ EMA(total volume) )
Worked example
CloseVolumeSigned volume
Up1,000+1,000
Down700−700
Up900+900
Down600−600
Total3,200+600

VZO ≈ 100 × (600 ÷ 3,200) = +19 — inside the bullish zone

What it is

The Volume Zone Oscillator (VZO) is a bounded momentum tool that answers one blunt question: over the recent window, did more volume trade on up days or on down days? It was introduced by Walid Khalil and David Steckler in a Technical Analysis of Stocks and Commodities article, and it belongs to the volume family alongside On-Balance Volume and the Force Index. Where On-Balance Volume simply piles signed volume into an ever-growing running total, VZO instead expresses buying versus selling volume as a ratio and scales it into a fixed range of roughly minus 100 to plus 100. That bounded scale is the whole point: it lets you set overbought and oversold thresholds the way you would with the Relative Strength Index, but the fuel behind the reading is volume rather than price change. For a total beginner, picture a tug-of-war rope where the flag is pulled toward the buyers on heavy up-volume and toward the sellers on heavy down-volume, and VZO tells you where the flag sits.

How it is calculated

The calculation starts by signing each bar's volume with the direction of the close, a quantity Khalil calls volume position: if today's close is above yesterday's close the bar contributes plus its full volume, and if the close is lower it contributes minus its volume. That stream of signed volume is then smoothed with an exponential moving average, usually over fourteen periods, to produce the numerator. Separately, the raw unsigned volume is smoothed with an exponential moving average over the same length to produce the denominator. VZO is one hundred times the ratio of the two, so it measures what share of recent smoothed volume leaned to the buy side versus the sell side. If every recent bar closed up, the signed and unsigned averages match and the ratio approaches plus 100; if every bar closed down it approaches minus 100; and a rough balance sits near zero. Because it is a ratio of averages rather than a cumulative sum, it never drifts off the top of the chart the way On-Balance Volume can.

Reading it, step by step

First read the sign, because the zero line is the accumulation-distribution divider: above zero the recent volume balance favors buyers, below zero it favors sellers. Next read the zones the authors defined, where plus 40 marks overbought and minus 40 oversold, the band from plus 5 to plus 40 is a healthy bullish zone, and the band from minus 5 to minus 40 is a bearish zone. The thin corridor between minus 5 and plus 5 is a no-conviction zone where the volume balance is too even to trade on. Pushes beyond plus 60 or below minus 60 are volume exhaustion extremes that rarely last. As with every oscillator, divergence carries a warning: if price grinds to a new high while VZO makes a lower high, the advance is happening on progressively weaker buy-volume and is vulnerable.

Reading the signals on the chart

14512096
VZO 619594.03The ▲/▼ marks flag the most recent zero-line crossings, where momentum flips from negative to positive and back.

Best timeframes

  • Scalping1m – 5mneeds clean volume
  • Day trading5m – 15m
  • Swing1h – daily
  • Positiondaily – weekly

The default length is 14. VZO works on any timeframe, but it is only as reliable as the venue's volume data.

VZO vs other volume gauges

VZOOBVCMF
Bounded rangeYesNoYes
Signs volume byUp/down closeUp/down closeClose in range
Overbought bandsYesNoNo
Best useZone reversalsTrend confirmFlow pressure

Common price-action setups

How the signal typically plays out on the chart.

Oversold reset in an uptrend

With the higher trend up, wait for VZO to pull back toward the −40 band and hook back up through zero, then buy the turn with a stop under the swing low.

Buy the VZO turn
Trend continuation
Zero-line reclaim

VZO climbs back above zero after a stretch below it, flipping net flow from distribution to accumulation; enter long and exit if it falls back under zero.

Buy above zero
Flow turns bullish
Bearish divergence at the top

Price prints a higher high but VZO makes a lower high from the overbought band, warning that buying volume is thinning; short the rollover with a stop above the high.

Sell divergence
Reversal lower

Best timeframes and settings

The default length is fourteen periods, which the authors tuned on daily charts for swing-trading horizons, and that remains the natural home of the tool. It works on intraday charts too, but only on liquid instruments where each bar carries meaningful volume, because thin bars produce a jumpy signed-volume stream. Shortening the length toward nine makes VZO react faster and cross its zones sooner, at the cost of more false pokes across the thresholds; lengthening it toward twenty or thirty smooths the line and filters chop but delays every turn. The original method paired the fourteen-period VZO with a sixty-period exponential moving average of price and a fourteen-period Average Directional Index, using those to decide whether the market was trending before acting on the zones. The universal trade-off applies: more responsiveness buys earlier but noisier signals, more smoothing buys cleaner but later ones.

When and where to use it

VZO is most useful on markets that report honest, deep volume, which means large-cap equities, index futures, and major exchange-traded funds rather than thin micro-caps or synthetic products. It is a confirmation and timing layer rather than a standalone trend caller, and it earns its keep during pullbacks within a trend, where it can tell you whether a dip is being bought or sold. In a clean uptrend it tends to hold in the bullish zone and reset toward the oversold band on corrections; in a downtrend it mirrors that on the sell side. Avoid leaning on it in genuinely rangebound, low-volume conditions where the signed-volume balance flickers around zero and the zones lose meaning. Above all, avoid trusting its extremes as automatic reversals during a strong trend, because a powerful move can pin VZO in the overbought or oversold band for a long stretch.

Strategies that use it

The first strategy is the authors' own trend-filtered pullback: confirm an uptrend when price is above the sixty-period exponential moving average and the Average Directional Index is above roughly eighteen, then buy when VZO dips toward the minus 40 oversold band and turns back up, taking profits as it reaches the plus 40 overbought band. The mirror image applies for shorts in a confirmed downtrend, selling rallies that push VZO up toward plus 40 and roll over. A second strategy is the zero-line momentum cross for trend traders: go long when VZO crosses decisively above zero after a base and stay long while it holds the bullish zone, exiting when it breaks back below zero. A third is divergence fading: when price makes a higher high but VZO makes a clearly lower high near an established resistance level, tighten stops or take a countertrend position only once price confirms with a break of short-term support.

Combining it with other indicators

VZO was designed to be used with a trend filter, so a longer moving average or the Average Directional Index is its most natural partner, keeping you on the right side of the larger move. Pairing it with a price-momentum oscillator such as the Relative Strength Index gives you price momentum and volume momentum side by side, and agreement between the two is a far stronger tell than either alone. Horizontal support and resistance complement it well, because the level tells you where to act and VZO tells you whether volume is backing the move at that level. Raw volume bars or a Volume Rate of Change help confirm that a breakout the VZO is leaning toward is actually drawing participation. It is redundant to stack VZO next to another signed-volume tool like On-Balance Volume, since both read the same underlying idea and will only reinforce each other with false confidence.

Where it fails

The classic failure is treating a plus 40 or minus 40 reading as an automatic reversal, when in a strong trend VZO can ride the extreme band for many bars while price keeps going. Its second weakness is dependence on clean volume: on illiquid names, or during a forced-selling event or an index rebalance, the signed-volume stream is distorted for reasons that have nothing to do with genuine conviction. In flat, choppy markets the line braids around zero and its zone crossings become meaningless whipsaws. Because the sign of each bar depends only on close-versus-prior-close, a series of tiny up closes on light volume can nudge it positive even as real money leaves. The way to avoid these traps is to demand a trend filter, to insist that VZO confirms a price event rather than leading it, and to ignore it entirely on instruments without reliable volume.

A worked example

Suppose you are watching a large-cap stock trending up above its sixty-period exponential moving average, with the Average Directional Index reading twenty-two, so the trend filter says buyers are in charge. The stock pulls back for four sessions and VZO falls from plus 35 down to minus 42, tagging the oversold band during the dip. Under the hood, the fourteen-period exponential average of signed volume has swung to about minus 21,000 shares while the average of total volume is about 50,000, giving a ratio of minus 0.42 and a VZO near minus 42. On the fifth session the stock closes back up on heavier volume, the signed-volume average turns less negative, and VZO hooks up through minus 40 back into the bearish-to-neutral zone. Because the higher-timeframe trend is up and the oscillator has reset and turned, you enter long with a stop below the pullback low, then plan to take profits as VZO climbs back toward the plus 40 overbought band.

Common mistakes

  • Treating every tag of +40 or −40 as an automatic reversal — in a strong trend VZO holds in the band.
  • Using the fixed zone thresholds without adjusting them for the instrument.
  • Trading VZO against the higher-timeframe trend instead of with it.
  • Ignoring volume quality — thin or synthetic volume makes the signal unreliable.
  • Acting on a zero-line cross alone inside a choppy, low-volume range.
  • Forgetting that divergence is a warning, not a precise timing trigger.