Skip to main content

Volume Zone Oscillator (VZO) Indicator for ThinkOrSwim (Free Download)

IndicatorFreeBeginner25 mins video99 lines of codeFeb 1, 2020Updated Oct 21, 2026

Our free Advanced VZO for ThinkOrSwim colors the Volume Zone Oscillator and your candles, and plots arrows on +40 and -40 crosses in a confirmed trend.

Advanced Volume Zone Oscillator on a NVTA chart in ThinkOrSwim
On this page

Overview

In this tutorial I build an advanced VZO for ThinkOrSwim, starting from the Volume Zone Oscillator that comes with the platform. The VZO compares volume on up closes and down closes with total volume. Our version colors it green, yellow or red, shades the zones from 40 to 60 and from -40 to -60, and adds bullish and bearish arrows.

The arrows come from ThinkOrSwim's own documentation for the study, which confirms a trend with the 14-period ADX and the 60-period EMA. I build a lower study for the oscillator and an upper study that colors the candles and plots the arrows. It's for momentum and trend traders, and it pairs with tools like the Squeeze and moving averages.

Key Takeaways

  • The Volume Zone Oscillator (VZO) is 100 times the ratio of two 14-bar EMAs: volume signed by the direction of the close, and total volume.
  • ThinkOrSwim's documentation for the VZO lists levels at +60, +40, +15, -5, -40 and -60, and confirms a trend with a 14-period ADX above 18 and a 60-period EMA.
  • Our Advanced VZO colors the line, dots and candles green above 15, yellow above -5 up to 15, and red at -5 or below.
  • A bullish arrow needs ADX above 18, a close crossing above the 60 EMA, and the VZO crossing up to 40 or higher, all on the same bar. The bearish arrow mirrors it at -40.
  • The free download has 2 studies: a lower oscillator with clouds and dots, and an upper study with colored candles and arrows.

What Is the Volume Zone Oscillator?

The Volume Zone Oscillator is a built-in ThinkOrSwim study that analyzes volume changes in relation to levels, or zones. It runs on two exponential moving averages of volume. The first is price-related: each bar's volume counts as positive when the close is above the previous close and negative when it's below. The second is a plain EMA of volume.

This step’s code is free with an account. Create one or sign in.

The VZO is the percentage ratio of the two, with a length of 14 bars.

A positive VZO means volume on up closes has outweighed volume on down closes over that period, and a negative VZO means the reverse. For other ways to read volume, see our article on the best volume indicators for ThinkOrSwim.

What ThinkOrSwim's Documentation Adds

ThinkOrSwim's description of the VZO lists the levels to watch and two indicators that confirm a trend. TD Ameritrade did a lot of the work of finding the patterns and best practices, so I turned each part into code:

From the documentationValueHow the Advanced VZO uses it
Levels+60, +40, +15, -5, -40, -6040 to 60 and -40 to -60 become clouds. 15 and -5 set the colors.
Trend existence14-period ADX above 18trendExistence, required for every arrow
Trend direction60-period EMA: a cross above suggests an uptrend, below a downtrenddirection, a value from 1 to 4

Search for the Volume Zone Oscillator online and you'll find other best practices. The most agreed-upon signal level is plus and minus 40, so that's what this indicator uses. Depending on your trading style, you may want to change 40 to something else.

What the Advanced VZO Shows

The Advanced VZO comes as two studies that split the information across your screen. Both use the same colors, set by where the VZO sits against the 15 and -5 levels:

VZO readingColor of the line, dots and candles
Above 15Green
Above -5, up to 15Yellow
-5 or belowRed
  • Lower study. The VZO line and a matching row of dots, a zero line, lines at +40, +60, -40 and -60, a green cloud from 40 to 60 and a red cloud from -40 to -60.
  • Upper study. No oscillator. It colors your candles with the VZO colors and plots the bullish and bearish arrows at line weight 5.

The 15 and -5 levels are there because coloring by the 40 zone would leave the line one color most of the time.

How to Build the Lower VZO Study

The lower study build starts from the built-in code, and these are the steps I follow in the video. To skip it, import the finished studies from the download with our guide on how to import a study into ThinkOrSwim.

  1. Click the studies icon, find Volume Zone Oscillator, and click the scroll icon. The code is locked, but you can read all of it.
  2. Copy it, click Create to start a new study, paste it in and name it TI_AdvancedVZO_Lower. It already declares lower.
  3. Add the confirmation variables: ADX, the 60 EMA, trendExistence and direction.
  4. Add the two crossover variables and the bullSignal and bearSignal plots to test them.
  5. Comment out the +15 and -5 plots and their color lines, and comment out the signal plots, since the arrows belong on the upper study.
  6. Add the two clouds, the color line, and a second copy of the VZO plot drawn as dots.

Before changing any of the code, I added the copied study to a daily SPY chart, where the VZO shows as a cyan line with the zero line and all six levels.

Here are the formatting lines from step 6, as they read in the download:

This step’s code is free with an account. Create one or sign in.

The dots come from plotting the same value twice:

This step’s code is free with an account. Create one or sign in.

VZO_DOTS draws as points at weight 3 and gets the same color line as the VZO, so the line looks like it connects a dot on every bar.

How the Signal Logic Works

The Advanced VZO signal logic has three parts: a trend check, a direction check and a level cross. The first two come straight from ThinkOrSwim's documentation.

Trend Existence and Direction

This step’s code is free with an account. Create one or sign in.

trendExistence is true when the 14-period ADX is above 18.

The direction variable gives each bar a value from 1 to 4 based on the close and the 60-period EMA:

directionMeaningCondition in the code
1Crossed above the 60 EMA on this barClose above the EMA, previous close at or below it
2Above the 60 EMAClose above the EMA, previous close at or above it
3Crossed below the 60 EMA on this barClose below the EMA, previous close at or above it
4Below the 60 EMAAnything else

The Level Crosses and Arrows

This step’s code is free with an account. Create one or sign in.

A crossover is 1 on the bar where the VZO reaches 40 or more from below 40, or -40 or less from above -40.

This step’s code is free with an account. Create one or sign in.

A bullish arrow needs all three on the same bar: ADX above 18, direction 1, and a bullish crossover. The bearish arrow needs ADX above 18, direction 3, and a bearish crossover.

My first version used ARROW_UP and ARROW_DOWN, and a lot of arrows plotted, because those draw at the plot value whether it's 1 or 0. BOOLEAN_ARROW_UP and BOOLEAN_ARROW_DOWN draw only when the value is true, and most of the arrows disappeared. The ones left included a bullish arrow on a Goldman Sachs chart.

How to Build the Upper VZO Study

The upper VZO study is the lower code moved onto the price chart, where it colors the candles and plots the arrows. These are the changes I make in the video:

  1. Copy all the lower code into a new study named TI_AdvancedVZO_Upper and change it to declare upper.
  2. Bring back the bullSignal and bearSignal code you commented out.
  3. Delete the clouds, and change VZO.AssignValueColor to AssignPriceColor so the colors land on the candles.
  4. Change the VZO plot to a def, and delete the other plots, the dots, the painting strategy and the default color lines.
  5. Give both arrows a line weight of 5.

The candle color rule is the same as in the lower study: green above 15, yellow above -5 up to 15, and red at -5 or below. The line from step 3 reads:

This step’s code is free with an account. Create one or sign in.

Advanced VZO Settings

The Advanced VZO has one input, length. The other settings are numbers in the code:

SettingValueWhere it lives
length14Input, used by both volume EMAs
ADX length and threshold14, above 18ADX(14) and trendExistence
EMA length60ExpAverage(close, 60)
Signal levels+40 and -40The two crossover lines
Color levels15 and -5The color lines in both studies
Dot weight3Lower study
Arrow weight5Upper study

The ADX threshold and signal levels are hard-coded. To try different ones, edit the numbers in the upper study, which plots the arrows.

Advanced VZO Examples from the Video

The Advanced VZO examples in the video come from the day I recorded, so the charts will look different today.

  • Goldman Sachs (GS). On a 30-minute chart, the upper study showed a bullish arrow. On the daily chart there were no arrows.
  • NVIDIA (NVDA), daily. The upper study plotted a bullish arrow, then a bearish arrow after earnings.
  • NVIDIA with the Squeeze. The bullish arrow came on the final day of the squeeze, right as it fired. The follow-through was smaller than I expected, but it was a relatively nice burst for momentum traders.
  • The bearish arrow. With the Squeeze settings I started with, there was no squeeze before it. After I changed the Squeeze to a more aggressive setting, a squeeze showed up and fired bearishly, and the arrow would have helped you get into that momentum move.

How I Use the Advanced VZO

The Advanced VZO is a momentum and trend tool, so I pair it with similar indicators instead of our overbought and oversold studies. In the video I name the Squeeze, which we built a dashboard for in our Squeeze Dashboard tutorial, moving averages like our multiple time frame moving averages, and our Simple Breakout Tool.

The arrows mark bursts of movement where you might look for an entry. Treat an arrow as a read on volume and trend, then check the chart. Decide where the stop goes before you enter, and size the position so a stop-out costs a small, fixed share of your account.

The download has no alerts. In the video I point to our VScore indicator tutorial for setting alerts, so ThinkOrSwim can tell you when an arrow plots on the S&P or a futures chart. The VScore download ends with Alert lines you can copy the pattern from.

In the video I mention that Volatility Box members would get scans for the arrow signals in that week's indicator update. The free download has the 2 studies only.

The Advanced VZO on real charts

Drawn from real daily bars with the code on this page, through Oct 20, 2026. A bull arrow needs three things on the same bar: ADX above 18, the close crossing above the 60-period EMA, and the VZO crossing up to 40 or higher. The candles take the VZO's color: green above 15, yellow above -5, red at -5 or below. I picked the most recent bull arrow on a well-known name that closed higher 10 days later, and the most recent that did not.

AMZN, Jul 7, 2026

Advanced VZO bull arrow on a AMZN daily chart in ThinkOrSwim, Jul 7, 2026: candles colored by the Volume Zone Oscillator, the 60 EMA and the VZO panel
AMZN on Jul 7, 2026: the close crossed the 60 EMA as the VZO crossed 40 with the ADX above 18.

AMZN closed at $245.98 on the arrow and at $247.55 ten trading days later, +0.6%.

META, May 27, 2026

Advanced VZO bull arrow on a META daily chart in ThinkOrSwim, May 27, 2026, that did not follow through
META on May 27, 2026: the same three conditions.

META closed at $635.25 on the arrow and at $570.98 ten trading days later, -10.1%.

By the numbers

375Bull arrows
471Bear arrows
52.6%Bull arrows higher 10 days later
52.8%Any day higher 10 days later

Daily bars for 648 stocks and ETFs, Aug 5, 2016 to Oct 20, 2026: the 14 ETFs from 2016, most stocks from about Dec 31, 2024, once they have 120 bars of history. The yardstick is every day in the same symbols over the same window, and the bull arrows matched it. Of the 458 bear arrows with 10 days after them, 45.2% were followed by a lower close, against 47.2% for any day.

Full thinkScript code

Advanced Volume Zone Oscillator.tsthinkScript · 99 lines
The full code is free with an account

Create a free account or sign in to copy all 99 lines and download the file.

Download

Advanced VZO Indicator

Download the Advanced VZO indicator for ThinkOrSwim. The download is a .zip with two study files: TI_AdvancedVZO_LowerSTUDY.ts, the oscillator with the colored line, dots and clouds, and TI_AdvancedVZO_UpperSTUDY.ts, which colors your candles and plots the bullish and bearish arrows. Import both for the full setup. If you haven't added a custom study before, here's how to import an indicator into your ThinkOrSwim platform.

Download free

Video: Advanced Volume Zone Oscillator, built line by line

25 mins on YouTube.

Watch on YouTube

Questions

What is the Volume Zone Oscillator (VZO)?

The Volume Zone Oscillator is a built-in ThinkOrSwim study that compares volume on up closes and down closes with total volume. It is the percentage ratio of two exponential moving averages of volume. Positive readings mean up-close volume has outweighed down-close volume, and negative readings mean the reverse.

How is the VZO calculated in ThinkOrSwim?

The study takes a 14-bar EMA of volume signed by the direction of the close (positive when the close is above the previous close, negative when below) and divides it by a 14-bar EMA of total volume. Multiplying by 100 gives the VZO.

What do the VZO levels mean?

ThinkOrSwim's documentation lists levels at +60, +40, +15, -5, -40 and -60. The Advanced VZO shades 40 to 60 green and -40 to -60 red, uses crosses of +40 and -40 for its arrows, and uses 15 and -5 to color the line and candles.

What confirms a VZO signal?

ThinkOrSwim's documentation uses two indicators. A 14-period ADX above 18 says a trend exists, and the 60-period EMA gives its direction: a cross above suggests an uptrend, a cross below a downtrend. The Advanced VZO arrow needs the ADX check, the EMA cross and the 40 level cross on the same bar.

What do the green, yellow and red colors mean?

They show where the VZO sits. Green means the VZO is above 15, yellow means it is above -5 and up to 15, and red means it is at -5 or below. The lower study colors the line and dots, and the upper study colors your candles the same way.

Why do my VZO arrows plot on every bar?

You are probably using ARROW_UP and ARROW_DOWN, which draw at the plot value on every bar, including 0. Switch to BOOLEAN_ARROW_UP and BOOLEAN_ARROW_DOWN, which draw only when the signal is true. That change removed most of the arrows in the video.

Why are there no arrows on the lower VZO study?

The arrows live on the upper study. In the video I comment out the signal plots in the lower study to keep the oscillator clean, and the upper study plots them on the candles at line weight 5. Add both studies to see the oscillator and the arrows together.

Which indicators pair well with the Advanced VZO?

The Advanced VZO is a momentum and trend tool, so it fits with similar indicators: the Squeeze, moving averages and our Simple Breakout Tool. In the video, the NVIDIA bullish arrow came on the final day of a squeeze, right as it fired.

Get each new indicator by email

One email on Sundays with the week's new tool and its code. A free account also unlocks every .txt download.

No credit card. Unsubscribe anytime.