Volume Zone Oscillator – Classify Bullish and Bearish Volume

A stock rallies on high volume and the chart looks clean. But was that volume actually driving price higher, or were sellers unloading into the strength? Raw volume bars cannot answer that question. They show activity. They do not show direction.

The Volume Zone Oscillator (VZO) separates volume into bullish and bearish components and plots the result as a bounded oscillator. Every bar’s volume gets classified based on whether price closed higher or lower than the prior bar. The output moves between -100 and +100, and the reading tells you which side is doing the heavier lifting. I use it primarily as a filter. When the VZO sits in a bullish zone and I have a long setup from price action, I take the trade with more conviction. When the VZO contradicts the setup, I either pass or cut size.

If you already track how the Volume Oscillator compares two volume moving averages, the VZO adds a layer that the Volume Oscillator does not touch: it classifies volume by direction, not just magnitude.

How the Volume Zone Oscillator Works

Walid Khalil and David Steckler introduced the VZO in Technical Analysis of Stocks and Commodities magazine in 2009. The logic starts with a simple question: did price close up or down? If the close is higher than the previous close, that bar’s entire volume is counted as bullish. If lower, bearish. That signed volume is then smoothed with an exponential moving average and compared to the EMA of total volume.

The formula:

VP = Volume \times \text{sign}(Close - Close_{prev})

 

VZO = 100 \times \frac{EMA(VP, n)}{EMA(Volume, n)}

 

The default period is 14. The result oscillates between -100 and +100. A reading of +60 means the 14-period smoothed bullish volume is running at 60% of total smoothed volume. A reading of -40 means bearish volume dominates by that margin.

One thing most descriptions skip: the sign function assigns the entire bar’s volume to one side. A bar that closes one cent higher with massive volume gets the same bullish classification as a bar that closes five points higher. The VZO does not weight by the size of the price change. That is a deliberate simplification. It keeps the indicator fast and responsive, but it also means a single large-volume bar with a tiny close-to-close gain can push the reading higher in a way that overstates actual buying conviction.

Reading the Volume Zone Oscillator Zones

The VZO divides its range into five zones, each with a different interpretation:

Above +40: strong bullish pressure. Volume is overwhelmingly directional to the upside. This zone often appears during breakouts and trend accelerations. It also appears during exhaustion moves, so treat readings above +60 with caution unless the trend is well-established.

+15 to +40: bullish zone. The healthy middle ground. Most confirmed uptrends spend the majority of their time here. I look for this zone to hold during pullbacks within a trend. If the VZO dips below +15 on a pullback, the trend is losing volume support even if price has not broken structure yet.

-5 to +15: neutral. Neither side has meaningful control. This zone shows up during low-conviction consolidations and range-bound price action. Avoid trading directional setups when the VZO sits here unless you have a strong reason from price structure.

-40 to -5: bearish zone. Sellers are doing the heavy lifting. Down days are attracting more volume than up days. If you are holding longs and the VZO slides into this zone while price is still near a support level, the support is more likely to fail than hold.

Below -40: strong bearish pressure. Capitulation territory on daily charts. Like the upper extreme, sustained readings below -60 can signal exhaustion and a potential reversal, especially when combined with price reaching a support zone.

These thresholds are not sacred. Some traders shift them by five or ten points depending on the asset. But the standard zones give you a starting framework, and I have found them reliable enough on equity daily charts without modification.

A Real Example: AAPL in Late April 2026

Look at Apple (AAPL) over three recent sessions. On April 22, 2026, AAPL opened at $267.82 and closed at $273.17 on volume of 43.2 million shares. The close was well above the prior close, so the VZO counted that entire 43.2 million as bullish volume. The next day, April 23, AAPL closed at $273.43 on 33.4 million shares. Another up close, another bullish volume bar, but noticeably lighter. Then on April 24, AAPL closed at $271.06 on 38.1 million shares. Down close. That volume flipped to the bearish side.

Without the VZO framing, you might look at three days of relatively normal volume and shrug. With the VZO, you see: two consecutive bullish bars followed by a single bearish bar with higher volume than the second bullish bar. The smoothed reading would show the bullish side losing momentum even though price only gave back a small portion of the April 22 gain. That kind of divergence between a still-elevated price and a declining VZO is exactly what the indicator is built to catch.

What the Volume Zone Oscillator Gets Wrong

The binary classification is the VZO’s biggest weakness. A bar that closes one tick higher and a bar that closes three percent higher get the same treatment. The entire volume is marked bullish in both cases. This works fine when price moves are meaningful and directional. It falls apart during low-range, choppy sessions where the close bounces above and below the prior close by fractions of a point. In those conditions, the VZO flips rapidly between bullish and bearish, and the smoothed output generates noise rather than signal.

I have seen this problem most often on intraday charts of large-cap stocks during midday sessions. Price barely moves, volume is moderate, and the VZO swings between +10 and -10 on consecutive bars. The standard zones become useless. If you trade intraday, use a longer EMA period (21 or 28) to reduce the whipsaw, or restrict VZO signals to the first and last hours when volume tends to be more directional.

The other common mistake is treating VZO zone readings as entry signals on their own. A reading of +35 does not mean “buy.” It means the volume structure currently favors the bullish side. That is a condition, not a trigger. The distinction matters because the VZO can sit in the bullish zone for weeks during a trend, and entering every time it crosses +15 will catch some good moves and a lot of noise. Pair the VZO with a price-based entry. Use the zone as a filter, not a signal generator.

VZO vs. the Volume Oscillator

The Volume Oscillator compares a short-period volume moving average to a long-period volume moving average. When the short MA crosses above the long MA, volume is expanding. When it crosses below, volume is contracting. That tells you about volume magnitude. It does not tell you whether that volume is bullish or bearish.

The VZO answers the directional question. It tags each bar’s volume as up or down and then shows you the net balance. You can have expanding volume (Volume Oscillator rising) while the VZO is declining. That would mean volume is increasing but sellers are capturing more of it. Tracking both gives you two dimensions: how much volume, and who it belongs to.

If you had to pick one, I would start with the VZO for swing trading. The directional information is more actionable than the magnitude reading. For breakout confirmation, where the raw expansion of volume matters more than its direction, the Volume Oscillator is the better fit. For a broader view of how volume tools compare, the volume confirmation for breakout candles guide walks through the logic of using volume at decision points.

Combining the VZO with Trend Filters

The VZO works best when you already know the trend direction. A reading of +30 in an uptrend confirms that volume supports the move. A reading of +30 in a downtrend that is trying to reverse is weaker evidence because you are fighting the primary direction.

I use a 50-period EMA on the daily chart as the trend filter. If price is above the 50 EMA, I only take long setups, and I want the VZO above +15 to confirm. If price is below the 50 EMA, I look for shorts or stay flat, and I want the VZO below -5 at minimum. Setups where the trend filter and VZO disagree get skipped. That single rule eliminates most of the low-conviction trades the VZO generates in choppy markets.

NVDA on April 24, 2026 shows the filter in action. NVDA opened at $199.96 and closed at $208.27 on 213.8 million shares, roughly double the prior day’s volume. That is a massive bullish volume bar by any measure. If NVDA was trading above its 50 EMA and the VZO was already in the bullish zone before that bar, the close confirms continuation. If NVDA was below its 50 EMA and the VZO was in the bearish zone, that single bar represents a potential reversal, not a confirmed trend. Same volume, same price action, completely different context. The trend filter is what separates those two readings.

Divergence Signals on the VZO

Like most oscillators, the VZO can diverge from price. Bullish divergence: price makes a lower low while the VZO makes a higher low. Bearish divergence: price makes a higher high while the VZO makes a lower high.

Divergence on the VZO carries more weight than divergence on a price-based oscillator like RSI. The reason is informational. RSI divergence tells you price momentum is slowing, which is already visible on the chart if you look at the rate of change. VZO divergence tells you volume conviction is declining. That is harder to see by eye. When MSFT rallied from $415.75 on April 23 to $424.62 on April 24, 2026, volume dropped from 38.3 million to 27.4 million shares. If a subsequent push above $424.62 happens on even lower volume, the VZO will build a bearish divergence even as price makes a new high. That is a specific, actionable warning that the rally is losing participation.

The trap: divergence can persist for longer than you expect. I have watched VZO bearish divergence build across four or five consecutive higher highs before the reversal finally arrives. Treat divergence as a reason to tighten stops or reduce position size, not as an immediate reversal signal.

Parameter Adjustments

The default 14-period EMA works well on daily equity charts. For other timeframes and asset classes, adjustments help.

Shorter periods (7-10): faster response, more signals, more noise. Useful on weekly charts where you want sensitivity without waiting for 14 weeks of data to build a reading.

Longer periods (21-28): smoother output, fewer false signals. Better for intraday charts where the bar-to-bar noise in the sign function creates choppy readings at the default setting.

On forex pairs, I have found 21-period works better than 14 because the tick volume proxy used in forex introduces additional noise. The longer EMA smooths that out without killing responsiveness.

The zone thresholds can also be adjusted. For volatile instruments like small-cap stocks or crypto, widening the bullish zone to +20/+50 and the bearish zone to -20/-50 reduces false readings from the larger swings. The key is to backtest the adjustment on the specific instrument you trade. Do not assume the default zones transfer across asset classes without checking.

Where the VZO Fits in a Volume Toolkit

The VZO occupies a specific niche. It answers “is volume bullish or bearish right now?” It does not answer how much volume there is relative to history (that is the Volume Oscillator’s job), where the volume was heaviest at specific price levels (that is Market Profile), or whether smart money is accumulating or distributing (that is closer to Chaikin Money Flow).

Use the VZO as a directional volume filter alongside a separate tool for volume magnitude and a price-based entry trigger. Three tools, three questions answered, no redundancy.

Building a VZO Filter Into Your Process

Here is the simplest way to start using the VZO without overcomplicating your existing setup.

Add the 14-period VZO to your daily chart. Identify your existing entry signal, whatever it is. Before taking the trade, check the VZO zone. Long setup: VZO should be above +15. Short setup: VZO should be below -5. If the VZO is in the neutral zone (-5 to +15), skip the trade or wait for the reading to resolve.

That filter alone eliminates a meaningful percentage of trades where you are fighting the volume flow. It does not improve every trade. Some setups work despite a neutral VZO. But over a sample of 50 or 100 trades, the filtered set will have a higher win rate and better average reward because you are aligning with the side that has volume support.

Track your results with and without the filter for at least 30 trades before making it permanent. The data will tell you whether the VZO adds value to your specific strategy or whether it is filtering out winners along with the losers.

Educational content only. Not investment advice. Trading involves risk. You are responsible for your decisions.