Skip to main content Advanced VZO Indicator For ThinkOrSwim - Free Download Skip to main content Skip to content
Master the TTM Squeeze with our comprehensive 19-module course Start Learning →
TOS Indicators
  • Tools

    Categories

    • Indicators
    • Backtesters
    • Scans
    • Dashboards
    • thinkScript
    • Member Resources
    Browse Full Library

    Featured Tutorials

    Heiken Ashi Trend Indicator
    Heiken Ashi Trend Indicator
    Indicators

    Download our Custom Heiken Ashi indicator for ThinkOrSwim. Full ThinkScript code, formula...

    Learn more →
    Commodities Tracker
    Commodities Tracker
    Indicators

    For acceleration signals: trend-following strategies and buying pullbacks. For deceleration signals: short...

    Learn more →
    Build an Election Backtester in 10 Minutes
    Build an Election Backtester in 10 Minutes
    Backtesters

    Learn how to create a Post-Election Backtester in ThinkOrSwim to analyze market...

    Learn more →

    Popular Posts

    Unusual Volume
    Unusual Volume
    Scans

    Build 4 scans to easily find stocks with greater than...

    Learn more →
    Upcoming Earnings with High Short Interest
    Upcoming Earnings with High Short Interest
    Scans

    Build a scan to find stocks that are likely to...

    Learn more →
    Unusual Volume Pro Scans
    Unusual Volume Pro Scans
    Scans

    4 additional scans to find unusual volume overlapping with key...

    Learn more →
  • Courses
    Squeeze Course
    Squeeze Course
    19 Modules

    Scan, backtest, and trade the TTM Squeeze setup with precision.

    Unlock Course →
    Earnings Course
    Earnings Course
    3 Modules

    Master earnings plays with free indicators and proven strategies for ThinkOrSwim.

    Unlock Course →
    V-Shaped Reversals
    V-Shaped Reversals
    7 Modules

    Identify and trade powerful V-shaped reversal patterns with confidence and precision.

    Unlock Course →
    Fibonacci Trading
    Fibonacci Trading
    4 Modules

    Learn to trade Fibonacci retracements and extensions in ThinkOrSwim effectively.

    Unlock Course →
  • Products
    Futures Volatility Box Premium
    Futures Volatility Box

    Volatility models for 10 major futures markets, including micros & SPX.

    Explore Futures VB →
    Stock Volatility Box Premium
    Stock Volatility Box

    Dynamic support & resistance for 595+ stocks/ETFs, with a live scanner.

    Explore Stock VB →
    Opening Range Breakouts Premium
    Opening Range Breakouts

    Powerful live scanner & backtester for ORB strategies on 595+ stocks.

    Explore ORB Setups →
My Account
Back to Tutorials
Beginner-Friendly 25 mins ThinkOrSwim

Advanced Volume Zone Oscillator

Learn how to build an advanced Volume Zone Oscillator (VZO) indicator with smart confirmation signals, color-coded candles, and automated buy/sell arrows for ThinkOrSwim

Download Indicator
How to install in ThinkOrSwim →
Table of Contents
  • Master Volume Analysis with the Advanced Volume Zone Oscillator
  • Understanding the Volume Zone Oscillator Foundation
  • Reading ThinkOrSwim Documentation for Trading Insights
  • Step-by-Step Coding Tutorial: Building the Advanced VZO
  • Creating the Upper Study with Colored Candles
  • Advanced Signal Interpretation and Trading Rules
  • Optimizing Settings for Different Trading Styles
  • Integration with Other Momentum Indicators
  • Common Mistakes and Best Practices
  • Setting Up Alerts and Automation
  • Real-World Performance and Expectations
  • Advanced Customization and Development

Transform Your Volume Analysis with the Advanced VZO Indicator

Take your volume analysis beyond basic indicators with this enhanced Volume Zone Oscillator that combines price action with volume intelligence.

This advanced VZO indicator includes:

  • Smart confirmation signals using ADX and EMA filters
  • Color-coded zones showing volume momentum strength
  • Automated buy/sell arrows with trend validation
  • Both upper and lower study versions for maximum flexibility

Perfect for momentum and trend traders who want to identify high-probability entries backed by volume confirmation.

Master Volume Analysis with the Advanced Volume Zone Oscillator

Volume drives price movement, but most traders struggle to interpret volume signals effectively. The Volume Zone Oscillator (VZO) solves this problem by combining volume data with price action to create clear, actionable signals. Our advanced version takes this concept further by adding intelligent confirmation filters and visual enhancements that make trading decisions crystal clear.

Understanding the Volume Zone Oscillator Foundation

The VZO differs from simple volume indicators because it considers both volume magnitude and price direction. Unlike basic volume oscillators, the VZO uses two distinct calculations:

Price-Related Volume EMA: This calculation assigns positive or negative values to volume based on whether the close is higher or lower than the previous bar. When price closes higher, volume gets a positive sign. When price closes lower, volume gets a negative sign.

General Volume EMA: This is a standard exponential moving average of raw volume data, regardless of price direction.

The VZO line represents the percentage ratio between these two calculations, creating an oscillator that ranges typically between +60 and -60. This relationship reveals whether volume is supporting or opposing the current price trend.

Reading ThinkOrSwim Documentation for Trading Insights

ThinkOrSwim provides valuable documentation for their built-in indicators, often including trading insights that most traders overlook. For the VZO, their documentation reveals crucial confirmation signals:

ADX Confirmation: The 14-period ADX helps determine if a trend exists. Values above 18 suggest the market is trending, while values below 18 indicate sideways or choppy conditions. This filter prevents false signals during low-momentum periods.

EMA Direction Filter: The 60-period exponential moving average serves as a trend direction filter. Price crossing above the EMA suggests an uptrend, while crossing below indicates a downtrend. This prevents taking bullish VZO signals during bearish trends and vice versa.

These confirmation signals transform the basic VZO from a simple oscillator into a sophisticated trading system with built-in trend validation.

Step-by-Step Coding Tutorial: Building the Advanced VZO

Follow this comprehensive coding tutorial to build your Advanced VZO indicator from scratch in ThinkOrSwim. We’ll start with the basic VZO and enhance it with smart confirmation signals and visual improvements.

Step 1: Setting Up the Foundation Code

First, let’s examine the built-in VZO calculation that ThinkOrSwim provides. Open the Studies menu, find the Volume Zone Oscillator, and click the scroll icon to view the source code. You’ll see the core calculation uses two key variables:

VP (Volume Position): This is a price-related exponential moving average of volume that assigns positive values when the close is higher than the previous close, and negative values when lower.

TV (Total Volume): This is a standard exponential moving average of volume data.

Create a new study called “TI_AdvancedVZO_Lower” and start with this foundation code:

declare lower;
input length = 14;

def VP = ExpAverage(Sign(close - close[1]) * volume, length);
def TV = ExpAverage(volume, length);

plot VZO = 100 * VP / TV;
plot "+60" = 60;
plot "+40" = 40;
plot "+15" = 15;
plot "-5" = -5;
plot "-40" = -40;
plot "-60" = -60;
plot ZeroLine = 0;

Step 2: Adding Smart Confirmation Signals

Based on ThinkOrSwim’s documentation, we’ll add two confirmation indicators that dramatically improve signal quality. Add these variables after your foundation code:

def ADX = ADX(14);
def EMA60 = ExpAverage(close, 60);

Now define the confirmation conditions. The ADX helps us identify when a trend exists (values above 18), while the EMA helps determine trend direction:

def trendExistence = ADX > 18;

For trend direction, we’ll create a variable that tracks four different states:

  • 1 = Price crosses above EMA60 (bullish crossover)
  • 2 = Price stays above EMA60 (continued uptrend)
  • 3 = Price crosses below EMA60 (bearish crossover)
  • 4 = Price stays below EMA60 (continued downtrend)
def direction = if close > EMA60 and close[1]  EMA60 and close[1] >= EMA60 then 2 
               else if close = EMA60 then 3 
               else 4;

Step 3: Creating VZO Signal Conditions

Now we’ll define what constitutes a valid VZO signal. We need the VZO to cross specific levels, but only when our confirmation conditions are met:

def bullishCrossover = if VZO >= 40 and VZO[1] < 40 then 1 else 0;
def bearishCrossover = if VZO  -40 then 1 else 0;

Create the actual signal plots that combine VZO level crosses with trend confirmation:

plot bullSignal = if trendExistence == 1 and direction == 1 and bullishCrossover then 1 else 0;
bullSignal.setPaintingStrategy(PaintingStrategy.BOOLEAN_ARROW_UP);

plot bearSignal = if trendExistence == 1 and direction == 3 and bearishCrossover then 1 else 0;
bearSignal.setPaintingStrategy(PaintingStrategy.BOOLEAN_ARROW_DOWN);

These signals will only trigger when all three conditions align: VZO level cross, trending market (ADX > 18), and price confirming the trend direction.

Step 4: Visual Enhancement with Clouds and Colors

Let’s clean up the indicator by removing unnecessary lines and adding cloud formations for better visual clarity. Comment out the +15 and -5 lines since we’ll use different color zones:

# plot "+15" = 15;
# plot "-5" = -5;

Add cloud formations to highlight the key signal zones:

AddCloud(40, 60, color.green, color.green);
AddCloud(-40, -60, color.red, color.red);

Now implement the color-coded VZO line that changes based on volume momentum strength:

VZO.AssignValueColor(if VZO > 15 then color.green 
                     else if VZO > -5 then color.yellow 
                     else color.red);

Step 5: Adding the Dots Effect

To create a professional look with both lines and dots, duplicate the VZO plot and set one to display as points:

plot VZO_DOTS = 100 * VP / TV;
VZO_DOTS.SetPaintingStrategy(PaintingStrategy.POINTS);
VZO_DOTS.SetLineWeight(3);

VZO_DOTS.AssignValueColor(if VZO > 15 then color.green 
                          else if VZO > -5 then color.yellow 
                          else color.red);

This creates a clean visual effect where dots and lines share the same colors, making the indicator easy to read at a glance.

Step 6: Building the Upper Study Version

Copy all your lower study code and create a new study called “TI_AdvancedVZO_Upper”. Make these key changes for the upper study:

Change the declaration:

declare upper;

Remove the plotting lines and clouds: Since this displays on the price chart, we don’t need the oscillator lines.

Add colored candles: Replace the VZO color assignment with price coloring:

AssignPriceColor(if VZO > 15 then color.green 
                 else if VZO > -5 then color.yellow 
                 else color.red);

Enhance the arrow visibility:

bullSignal.SetLineWeight(5);
bearSignal.SetLineWeight(5);

Step 7: Testing and Optimization

Apply both studies to your charts and test them across different timeframes and market conditions. The lower study shows the oscillator with colored zones, while the upper study colors your candles and displays signal arrows directly on price action.

Testing Checklist:

  • Verify arrows only appear with proper confirmation (ADX > 18, trend direction alignment)
  • Check color transitions match VZO levels correctly
  • Test on both trending and ranging markets to see filter effectiveness
  • Adjust line weights and colors to match your chart preferences

This step-by-step approach transforms the basic VZO into a sophisticated trading tool with built-in intelligence to filter false signals and provide clear visual feedback about volume momentum conditions.

Creating the Upper Study with Colored Candles

The upper study version transforms your price chart by coloring candles based on VZO conditions and displaying signal arrows directly on price action.

Candle Coloring Logic: Candles change color to match the VZO line colors, creating a cohesive visual system. Green candles indicate strong bullish volume momentum, yellow shows neutral conditions, and red signals bearish volume pressure.

Signal Arrow Placement: Buy and sell arrows appear directly on price bars when all confirmation conditions align. This eliminates the need to constantly reference the lower study while making trading decisions.

The upper study includes the same confirmation logic as the lower study but presents the information differently to optimize screen real estate and trading workflow.

Advanced Signal Interpretation and Trading Rules

Bullish Entry Signals: Look for VZO crosses above +40 when the ADX exceeds 18 and price has just crossed above the 60-period EMA. This combination suggests strong volume is entering the market in alignment with an emerging uptrend.

Bearish Entry Signals: The opposite conditions create short opportunities. VZO drops below -40 with ADX above 18 and price crossing below the 60-period EMA indicates distribution and potential downside momentum.

Zone Trading: The color-coded zones provide additional context. Extended time in the green zone (+15 to +60) suggests sustained bullish momentum, while prolonged periods in the red zone (-5 to -60) indicate persistent selling pressure.

False Signal Avoidance: The ADX filter is crucial for avoiding whipsaws during consolidation periods. Without trend confirmation, VZO level crosses often produce false signals that lead to quick reversals.

Optimizing Settings for Different Trading Styles

Day Trading Adjustments: Use shorter timeframes (5-15 minutes) with more sensitive thresholds. Consider lowering the VZO signal levels to +30/-30 for more frequent signals during intraday momentum moves.

Swing Trading Setup: Daily charts work best with the standard +40/-40 levels. The 60-period EMA provides appropriate trend context for multi-day holding periods.

Scalping Applications: Very short timeframes (1-3 minutes) may require increasing the ADX threshold to 25 or higher to filter out excessive noise in highly liquid markets.

Integration with Other Momentum Indicators

The Advanced VZO pairs exceptionally well with other momentum-based tools:

TTM Squeeze Integration: Use VZO signals as entry triggers when the squeeze indicator shows expanding volatility. This combination provides both timing (squeeze) and volume confirmation (VZO).

Moving Average Confluence: Layer additional moving averages to create support and resistance zones where VZO signals have higher probability of success.

Volatility Box Combination: VZO signals become even more powerful when they occur at key volatility levels, providing both volume and volatility confirmation.

Common Mistakes and Best Practices

Ignoring Confirmation Signals: Taking VZO level crosses without ADX and EMA confirmation leads to poor win rates. Always wait for all three conditions to align.

Wrong Timeframe Selection: Using very short timeframes without adjusting sensitivity settings creates excessive noise. Match your VZO settings to your intended holding period.

Overtrading in Ranges: VZO works best in trending markets. During extended consolidation periods, reduce position sizes or avoid trading until trend conditions return.

Position Sizing Errors: VZO signals can lead to quick, volatile moves. Use appropriate position sizing based on the strength of the signal and overall market conditions.

Setting Up Alerts and Automation

Transform the Advanced VZO into a proactive trading tool by setting up automated alerts:

Signal Alerts: Create alerts for when all three confirmation conditions align (VZO level cross, ADX > 18, EMA cross). This eliminates the need for constant chart monitoring.

Zone Alerts: Set notifications when the VZO enters extreme zones (+50/+60 or -50/-60) as these often precede significant reversals or acceleration moves.

Mobile Integration: Use ThinkOrSwim mobile alerts to receive signals anywhere, ensuring you never miss high-probability setups during market hours.

Real-World Performance and Expectations

The Advanced VZO excels in trending markets where volume patterns align with price direction. Typical performance characteristics include:

Win Rate: Expect 60-70% win rates in trending markets, dropping to 45-55% during consolidation periods. The confirmation filters significantly improve accuracy compared to basic VZO signals.

Risk-Reward: Properly timed VZO entries often provide 2:1 or better risk-reward ratios, especially when combined with proper stop-loss placement and trend-following exits.

Signal Frequency: Signals occur 2-5 times per week on daily charts for actively traded stocks, providing sufficient opportunities without overtrading.

Advanced Customization and Development

The modular design of our Advanced VZO allows for further customization:

Parameter Optimization: Experiment with different ADX thresholds (15-25) and EMA periods (50-100) to match your specific trading style and market conditions.

Additional Filters: Consider adding volume spikes or relative strength filters to further refine signal quality for specific market sectors.

Multi-Timeframe Analysis: Create dashboard versions that show VZO conditions across multiple timeframes simultaneously for comprehensive market analysis.

The Advanced Volume Zone Oscillator represents a significant upgrade over basic volume indicators by combining multiple confirmation signals into one cohesive trading system. Whether you’re a momentum trader looking for quick entries or a trend follower seeking volume confirmation, this enhanced VZO provides the tools needed to make more informed trading decisions with clear visual feedback and automated signal generation.

Advanced VZO Indicator.ts
#TOS Indicators

#Home of the Volatility Box

#Indicator Name: Advanced VZO

#Full tutorial here: tosindicators.com/indicators/vzo

#Contains built-in ThinkOrSwim code from VolumeZoneOscillator() and TOS documentation


// ... 66 more lines ...

Unlock This Code

Create a free account to access the full source code and download files.

Create Free Account Login
The Volume Zone Oscillator (VZO) is a technical indicator that analyzes volume changes in relation to price zones to predict trend reversals. Unlike basic volume indicators, VZO uses two exponential moving averages: a price-related volume EMA (positive when close > previous close, negative when close < previous close) and a general volume EMA. The percentage ratio between these creates oscillator readings from +60 to -60, helping identify buying and selling pressure zones.
VZO generates buy signals when crossing above +40 in an uptrend (price above 60-period EMA, ADX > 18). Sell signals occur when VZO crosses below -40 in a downtrend (price below 60-period EMA, ADX > 18). Readings above +15 show bullish volume momentum, -5 to +15 indicates neutral conditions, and below -5 suggests bearish pressure. The extreme zones (+60/-60) often signal trend exhaustion and potential reversals.
The default 14-period length works well for most timeframes. For confirmation, use a 60-period EMA for trend direction and 14-period ADX for trend strength (above 18). Signal levels: +40/-40 for entries, +60/-60 for extreme zones. Day traders can use +30/-30 for more frequent signals, while swing traders might prefer +50/-50 for higher-quality setups. Always combine with trend filters for best results.
VZO differs from On-Balance Volume (OBV) by using exponential moving averages and percentage calculations, creating an oscillator format instead of a cumulative line. While OBV simply adds/subtracts volume based on price direction, VZO smooths the data and provides specific signal levels (+40/-40). VZO also includes time in its calculation and offers clearer overbought/oversold zones compared to OBV's trending nature.
VZO requires reliable volume data to function properly, making it challenging for spot forex where true volume isn't available. However, you can use VZO with forex futures contracts or currency ETFs that have actual volume data. Some traders use tick volume as a proxy, but results may be less reliable. For forex, consider the Price Zone Oscillator (PZO) instead, which uses similar logic but relies only on price data.
Daily charts provide the most reliable VZO signals for swing trading with standard +40/-40 levels. For day trading, use 30-minute to 4-hour charts with adjusted sensitivity (+30/-30 levels). Avoid very short timeframes (1-5 minutes) due to noise unless you increase the ADX filter to 25+. Weekly charts work well for position trading with +35/-35 levels. Match your VZO sensitivity to your intended holding period.
Use the ADX filter (require ADX > 18) to ensure trending conditions before taking VZO signals. Combine VZO with the 60-period EMA direction filter - only take bullish VZO signals when price is above EMA and bearish signals when below. Look for VZO divergences with price for early reversal warnings. In ranging markets, wait for VZO to reach extreme zones (+50/+60 or -50/-60) before considering counter-trend trades.
Create VZO scans using custom conditions: VZO crosses above +40 AND ADX > 18 AND close > 60-period EMA for bullish setups. For alerts, add Alert() functions to your VZO code: Alert(VZO crosses above 40, "VZO Bull Signal", Alert.BAR). Save the study, then enable "Alert when scan results change" in your watchlist. You can also create saved scans for extreme VZO readings (above +50 or below -50) to catch potential reversal opportunities.

Here are some resources that you may find useful:

  • How to import an indicator into ThinkOrSwim (video tutorial)
Featured Tools:
Stock Volatility Box

Stock Volatility Box

Spot reversal zones across 600 stocks & ETFs.

  • Hourly & daily models
  • Powerful Live Scanner
  • Built for day traders
Futures Volatility Box

Futures Volatility Box

Pinpoint reversal zones in 10 major futures markets.

  • 5 models (incl. Scalper)
  • ThinkOrSwim & TradingView
  • SPX traders
ORB Setups

ORB Setups

Find the best Opening Range Breakout setups.

  • Powerful real-time scanner
  • Instant backtests
  • 2+ years data

Get Free Access

Create a free account for downloads and new tutorial alerts.

Create Free Account

More Tutorials Like This

How to Build a Heiken Ashi Trend Dots Indicator in ThinkOrSwim

How to Build a Heiken Ashi Trend Dots Indicator in ThinkOrSwim

Beginner-Friendly • 14 mins
Extreme TICK Counter

Extreme TICK Counter

Beginner • 9 minutes
Smarter Earnings

Smarter Earnings

Intermediate • 46 mins

Ready to Trade With an Edge?

Join 40,000+ traders using institutional-grade tools for ThinkOrSwim.

Get the Bundle
TOS Indicators

Premium thinkorswim indicators, scans, and trading tools to help you trade smarter.

ThinkOrSwim Tools

  • Indicators
  • Scans
  • Backtesters
  • Dashboards
  • thinkScript
  • Browse All

Courses

  • Squeeze Course
  • Earnings Course
  • V-Shaped Reversals
  • Fibonacci Trading

Products

  • Futures Volatility Box
  • Stock Volatility Box
  • ORB Setups
  • Shop All

Guides

  • TTM Squeeze
  • Automated Trading
  • Volatility Trading
  • Opening Range Breakouts
  • Trade Reports
  • Contact Us

© 2026 TOS Indicators. All rights reserved.

Privacy Policy Terms of Service Disclaimer

The information contained on this website is solely for educational purposes, and does not constitute investment advice. The risk of trading in securities markets can be substantial. You must review and agree to our Terms of Service prior to using this site.

U.S. Government Required Disclaimer - Commodity Futures Trading Commission. Futures and options trading has large potential rewards, but also large potential risk. You must be aware of the risks and be willing to accept them in order to invest in the futures and options markets. Don't trade with money you can't afford to lose. This website is neither a solicitation nor an offer to Buy/Sell futures or options. No representation is being made that any account will or is likely to achieve profits or losses similar to those discussed on this website. The past performance of any trading system or methodology is not necessarily indicative of future results.

Individual results may vary, and testimonials are not claimed to represent typical results. All testimonials are by real people, and may not reflect the typical purchaser's experience, and are not intended to represent or guarantee that anyone will achieve the same or similar results.

TOS Indicator's Traders and employees will NEVER manage or offer to manage a customer or individual's options, stocks, currencies, futures, or any financial markets or securities account. If someone claiming to represent or be associated with TOS Indicator solicits you for money or offers to manage your trading account, do not provide any personal information and contact us immediately.

CFTC RULE 4.41 - HYPOTHETICAL OR SIMULATED PERFORMANCE RESULTS HAVE CERTAIN LIMITATIONS. UNLIKE AN ACTUAL PERFORMANCE RECORD, SIMULATED RESULTS DO NOT REPRESENT ACTUAL TRADING. ALSO, SINCE THE TRADES HAVE NOT BEEN EXECUTED, THE RESULTS MAY HAVE UNDER-OR-OVER COMPENSATED FOR THE IMPACT, IF ANY, OF CERTAIN MARKET FACTORS, SUCH AS LACK OF LIQUIDITY, SIMULATED TRADING PROGRAMS IN GENERAL ARE ALSO SUBJECT TO THE FACT THAT THEY ARE DESIGNED WITH THE BENEFIT OF HINDSIGHT. NO REPRESENTATION IS BEING MADE THAT ANY ACCOUNT WILL OR IS LIKELY TO ACHIEVE PROFIT OR LOSSES SIMILAR TO THOSE SHOWN.