IV Rank

UPDATED 11-27-19 | UPDATED 5-24-20

First, this won’t be a lengthy discussion about implied volatility or the impact it has on options pricing. That will come later.

For now…

This page is meant to describe IV rank in the simplest terms possible. I’ll also provide the script that can be added to ThinkorSwim so the indicator appears as a subgraph on all your charts (see end of this page).

So, What is IV Rank?

In the simplest words I can use to describe, IV rank is a gauge of where current IV is compared with where it’s been. To say it differently, the percentage shown on our charts is a reflection of current IV relative to its past IV. This is probably best demonstrated with an image. Check it out below and I’ll explain.

Click to Enlarge.

IV rank/ IV percentile
Technical Analysis

If the IV rank of SPY is at 11% today, that means over the past year IV has been lower than its current position only 11% of the time (or higher 89% of the time).

Why is this important?

It helps us determine whether its more beneficial to be net buyers or net sellers of options. When IV rank is high we want to be sellers of options and when it’s low we want to be buyers. That’s all.

The reasoning is simple. When IV is high there is more uncertainty in the market and large moves are expected. If uncertainty is high we should be compensated for the expected extreme moves. Likewise, if IV is low then premiums are low and we’re suggested to be net buyers.

You may have also noticed another useful caveat associated with the IV rank. It can help shed some light on the future direction of an underlying. How? Well, when volatility is high it can only go lower and when it’s low it can only go higher. This isn’t to say it can’t stay high or low for long periods of time, because it absolutely can. It’s just another way to use the tool in our belt.

Individual indicators don’t have to tell a complete story themselves, they only have to add a verse to the page and that’s all IV rank does for us or is intended to do. But I like it because I can quickly see the volatility relationship between past volatility and quickly determine what side of the trade is likely more beneficial.

Have any thoughts? Please share below.

To Add IV Rank to ThinkorSwim Charts:

IV Rank Script: taken from tastytrade.com.

1) Go to ‘Charts’ tab
2) Click on the “beaker” icon
3) Click on “Create”
4) Delete everything in the box. (plot Data = close;)
5) Paste the entire code listed below
6) Name the Study
7) Click ‘OK’
8) Click ‘Apply’
9) Click ‘OK’


declare lower;
declare hide_on_intraday;

def vol = imp_volatility();
input DisplayIVPercentile = yes;
input DisplayImpVolatility= yes;
input DisplayDaily1StandardDev = yes;
input DisplayWeekly1StandardDev = yes;
input DisplayMonthly1StandardDev = yes;

input TimePeriod = 252;

def data = if !isNaN(vol) then vol else vol[-1];
def hi = highest(data, TimePeriod);
def lo = lowest(data, TimePeriod);
plot Percentile = (data – lo) / (hi – lo) * 100;
def lowend = Percentile < 25;
def highend = Percentile > 50;

addlabel(DisplayIVPercentile , concat(“IV Rank: “,aspercent(Percentile /100)), if lowend then color.red else if highend then color.green else color.yellow);

addlabel(DisplayImpVolatility, concat(“ImpVolatility: “,aspercent(vol)), if lowend then color.red else if highend then color.green else color.yellow);

def ImpPts = (vol / Sqrt(252)) * close;
AddLabel(DisplayDaily1StandardDev , Concat(“Daily 1 SD +/- $”, Astext( ImpPts, NumberFormat.TWO_DECIMAL_PLACES)), if lowend then color.red else if highend then color.green else color.yellow); ;

def ImpPts2 = (vol / Sqrt(52)) * close;
AddLabel(DisplayWeekly1StandardDev, Concat(“Weekly 1 SD +/- $”, Astext( ImpPts2, NumberFormat.TWO_DECIMAL_PLACES)), if lowend then color.red else if highend then color.green else color.yellow); ;

def ImpPts3 = (vol / Sqrt(12)) * close;
AddLabel(DisplayMonthly1StandardDev, Concat(“Monthly 1 SD +/- $”, Astext( ImpPts3, NumberFormat.TWO_DECIMAL_PLACES)), if lowend then color.red else if highend then color.green else color.yellow); ;

plot LowVol = 25;
plot HighVol = 50;


——————END ABOVE THIS LINE———————
a) Use 252 as input length for 1-year or 52-week IV Rank
b) You can change 252 to 189 for 9-month IV Rank
c) You can change 252 to 126 for 6-month IV Rank

14 thoughts on “IV Rank”

    • You’re welcome. Thank you for your response. Visit tastytrade.com (not affiliated, just think they’re great) for more solid info.

  1. Hello!! Just started getting into stocks and Im doing a lot of learning before actually putting money on the line. Im trying to get an iv percentile. Ive followed your instructions but cannot get it to work within the graph. Any help would be great. I will also look elsewhere to try to find another code.

    • Sorry for long delay, been taking a break from trading and posting. However, I will look into this again and respond.
      God bless,

  2. Hi
    Your formula is the IV Rank not IV percentile.
    IV Rank is not the same as IV Percentile, they are quite different in fact.

    IV Rank is the placement or rank within the low/high range for the period (usually a year).

    IV percentile means X% of the time the individual IV value for the period (usually a year) was below that number. In other words, how many times (in %) over the period has the IV been below the current IV.

    • Thank you for the message. I typed this page some time ago and haven’t yet (but will now) update the information.
      God bless,


Leave a Comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.