top of page

How to See Implied Volatility (IV) Rank on ThinkorSwim

Updated: May 3

Table of Contents

What are Implied Volatility and Historical Volatility

What is Implied Volatility Rank (IVR)

What is IV Percentile (IVP)

IV Rank vs. IV Percentile

How to Calculate IV Rank

How to Add Implied Volatility Rank to Thinkorswim

The Custom Tastytrade Indicator for Thinkorswim

How to Scan for Implied Volatility Rank in Thinkorswim

How to Add the Tastytrade Custom Indicator to ThinkorSwim


Discover the difference between IV rank and IV percentile and how you can add IV rank to the ThinkorSwim platform.


What are Implied Volatility and Historical Volatility

Before we get into implied volatility rank (IVR), we must understand implied volatility (IV) and historical volatility (HV). HV is also known as realized volatility.


The implied volatility of an underlying stock is a measure of the market’s expectation of future price movement. Implied volatility is a component of the Black-Scholes model used to determine option prices.


A stock with high implied volatility is expected to move a lot and have high option premiums and vice versa.


Historical volatility measures how far a stock's price moves away from its average. Essentially, the higher the realized volatility of a stock, the riskier it is.


What is Implied Volatility Rank (IVR)

IVR is a measurement used by options traders to determine how the current implied volatility of a stock compared to the last 52 weeks. IVR is measured on a scale of 0-100. 0 is the lowest IV in the past year, and 100 is the highest in the past year.


Option traders utilize IVR to determine if implied volatility is high or low compared to what it usually trades at. Generally, you should sell options with high IV to take advantage of the elevated premiums.


What is IV Percentile (IVP)

IVP is a similar metric to IVR, except it measures the percentage of days over the last 52 weeks that implied volatility was lower than its current level. For example, if the IVP of a stock is at 25%, that means 75% of the time over the last year, IV was higher.


IV Rank vs. IV Percentile

Both IVR and IVP are valuable metrics for options traders to use. The difference is that IVP measures a percentage of days, while IVR measures IV itself.


How to Calculate IV Rank

To determine the IV rank of a stock, you must figure out the range implied volatility traded between the last 52 weeks. For example, let’s say that a stock’s IV traded between 20% and 40% over the previous 52 weeks.


If the current implied volatility is 30%, the stock’s IV rank is 50.


How to Add Implied Volatility Rank to Thinkorswim

If you use ThinkorSwim to trade options, you may realize there is no default indicator for IV rank. However, ThinkorSwim does have IV rank by default, except it is misnamed as IV percentile.


To prove this, I have screenshots of the IV rank of AAPL on the Tastyworks platform and the ThinkorSwim platform.

The IV rank indicator on the Tastyworks trading platform.

IV rank on the Tastyworks platform


As shown in the image above, the Tastyworks IV rank high is around 94.


If we look at the same ticker on ThinkorSwim, the IV percentile is 92%, while it says the IV rank is 63%.


An IV scanner on the ThinkorSwim platform.

IV rank indicator on ThinkorSwim


Therefore, the calculations are slightly off, but they are close enough to consider them the same indicator.


The Custom Tastytrade Indicator for ThinkorSwim

In the ThinkorSwim image above, you may notice that I am utilizing a custom indicator called TTIV (Tastytrade IV). The indicator displays both an IV percentile and IV rank calculation.


It is confusing because the IV percentile on the custom indicator utilizes the built-in ThinkorSwim IV percentile indicator, which is actually the IV rank.


However, if you add IVR to your Tastyworks watchlist, it says the IVR is 73, and the IV percentile is 95%.


Therefore, I have concluded that these numbers do not match and are not worth deciphering. However, if you want access to the custom indicator, I will leave the code and instructions at the bottom of this post.


My advice is to pick one method of tracking the IV rank or IV percentile and stick with it, so it is the same for all of your trades.


Otherwise, you can plot the normal implied volatility indicator on your chart and determine whether you believe the implied volatility is elevated or low.


How to Scan for Implied Volatility Rank in Thinkorswim

ThinkorSwim has a built-in stock scanner that allows you to discover stocks with high IV rank/IV percentile. To utilize it, follow these steps:


  • Scan tab -> add filter -> volatility -> IV_percentile

An IV scanner on the ThinkorSwim platform.

IV scanner on ThinkorSwim


Once you add this study, you can scan for stocks that have a specific range of IVR/IVP.


How to Add the Tastytrade Custom Indicator to ThinkorSwim

To add the Tastytrade (TTIV) custom indicator to your ThinkorSwim charts, follow these steps:


  • Chart tab -> studies (beaker) -> create -> enter name (TTIV) -> delete the default code and paste in the following code:

The custom script editor in ThinkorSwim.

Adding a custom study to ThinkorSwim


Implied Volatility Rank on TradingView

If you prefer to use TradingView charts, there are custom IV rank and IV percentile indicators available.


The IV Rank and Percentile indicator by MartinShkreli can easily be added and used for free.


However, if you want to take full advantage of the features TradingView has to offer, you can sign up for a free trial for a premium subscription using my link. You will also get a $30 credit toward your subscription.


tradingview banner

How to Learn More About Options Trading

If you want to learn more about options trading and becoming a profitable trader, you can join the Haikhuu Trading community for free!


Haikhuu Trading offers daily live calls, morning reports, access to a team of professional traders, and an AI trading bot that provides stock trading alerts. Don’t miss the opportunity to elevate your trading skills — join Haikhuu Trading today!


# ------------------------START BELOW THIS LINE--------------------------

#

# tastytrade/dough Research Team

# Michael Rechenthin, Ph.D.

# Follow me on twitter: @mrechenthin

#

# IV Rank is a description of where the current IV lies in comparison

# to its yearly high and low IV

#

# IV Percentile gives the percentage of days over the last year, that

# were below the current IV. If the IV Rank is above 50%, then

# the script will highlight it green; otherwise red.

#

# For information on the two, see Skinny on Options Data Science,

# titled "IV Rank and IV Percentile (w/ thinkscript)" on Nov 12, 2015

# http://ontt.tv/1Nt4fcS

#

# version 3.2

#

declare lower;

declare hide_on_intraday; # do not display when using intra-day plots

input days_back = 252; # it is most common to use 1-year (or 252 trading days)


def x;

if GetAggregationPeriod() > AggregationPeriod.DAY {

x=1;

} else {

x=2;

}

AddLabel(yes, if (x==1) then "This script should be used on daily charts only" else "");



# implied volatility

# using proxies for futures

def df = if (GetSymbol() == "/ES") then close("VIX") / 100

else if (GetSymbol() == "/CL") then close("OIV") / 100

else if (GetSymbol() == "/GC") then close("GVX") / 100

else if (GetSymbol() == "/SI") then close("VXSLV") / 100

else if (GetSymbol() == "/NQ") then close("VXN") / 100

else if (GetSymbol() == "/TF") then close("RVX") / 100

else if (GetSymbol() == "/YM") then close("VXD") / 100

else if (GetSymbol() == "/6E") then close("EVZ") / 100

else if (GetSymbol() == "/6J") then close("JYVIX") / 100

else if (GetSymbol() == "/6B") then close("BPVIX") / 100

else if (GetSymbol() == "/ZN") then close("TYVIX") / 100

else if (Getsymbol() == "/ZW") then close("WIV") / 100

else if (Getsymbol() == "/ZB") then imp_volatility("TLT")

else if (Getsymbol() == "/ZC") then imp_volatility("CORN")

else if (Getsymbol() == "/ZS") then imp_volatility("SOYB")

else if (Getsymbol() == "/KC") then imp_volatility("JO")

else if (Getsymbol() == "/NG") then imp_volatility("UNG")

else if (Getsymbol() == "/6S") then imp_volatility("FXF")

else imp_volatility();


def df1 = if !IsNaN(df) then df else df[-1];


# display regular implied volatility

# ---------------------------

AddLabel(yes, "IV: " + Round(df1 * 100.0, 0), Color.ORANGE);


# calculate the IV rank

# ---------------------------

# calculate the IV rank

def low_over_timespan = Lowest(df1, days_back);

def high_over_timespan = Highest(df1, days_back);


def iv_rank = Round( (df1 - low_over_timespan) / (high_over_timespan - low_over_timespan) * 100.0, 0);


AddLabel(yes, "IV Rank: " + iv_rank + "%", if iv_rank > 50 then Color.GREEN else Color.RED);


# calculate the IV percentile

# ---------------------------

# how many times over the past year, has IV been below the current IV

def counts_below = fold i = 1 to days_back + 1 with count = 0

do

if df1[0] > df1[i] then

count + 1

else

count;


def iv_percentile = Round(counts_below / days_back * 100.0, 0);

plot IVs = df1 * 100;

IVs.SetLineWeight(3);

IVs.AssignValueColor(if iv_rank > 50 then Color.GREEN else Color.RED);


AddLabel(yes, "IV Percentile: " + iv_percentile + "% of days were below the past year's IV", if iv_percentile > 50 then Color.GREEN else Color.RED);


# thanks to Kevin Osborn for the following line

AddLabel(yes, if (GetSymbol() == "/6S" or GetSymbol() == "/ZB" or GetSymbol() == "/ZC" or GetSymbol() == "/NG" or GetSymbol() == "/ZS" or GetSymbol() == "/KC") then "* ETF based" else "", Color.BLACK);


# ------------------------END ABOVE THIS LINE------------------------


Before you go

You can download my FREE eBook by clicking here!

This article contains affiliate links I may be compensated for if you click them.

If you want to keep educating yourself about personal finance, you must check out these posts as well:


What is Implied Volatility?


What is the Most Successful Options Strategy


Options Trading for Income: The Complete Guide


Mark Minervini's Trading Strategy: 8 Key Takeaways


The Best Options Trading Books

bottom of page