OPEN-SOURCE SCRIPT
IV Rank & Percentile XVI (S&P/ASX200 VIX)

Most IV Rank and IV Percentile indicators on TradingView are built for the US VIX. This one is built specifically for XVI — the S&P/ASX 200 VIX (A-VIX) — so Australian index traders, and anyone trading XJO options, finally get the same volatility context without borrowing a US proxy. It reads straight off the published XVI value, so there's no option-chain reconstruction or estimation involved.
The core idea:
XVI is the ASX's "fear number" — the implied volatility of the XJO, the market's estimate of how much it's about to move over the next 30 days. The problem is that a raw XVI value is meaningless on its own. Is 16 high? Low? You can't know without context. This indicator's whole job is to give that context by answering one question: compared to its own recent history, is volatility currently rich, normal, or cheap?
The two ways it measures that:
IV Rank is the simple one. It looks at the highest and lowest XVI over your lookback window (a year by default) and asks where today sits on that line. XVI at its yearly low reads 0. At its yearly high, 100. Halfway between, 50. That's it — it's just "where in the range are we."
IV Percentile asks a slightly different question: of all the days in the window, what percentage had a lower XVI than today? If it reads 70, then vol is higher than it was on 70% of the past year's days. The reason this one's usually better is that IV Rank gets distorted by a single spike — one brief crash sets a sky-high "yearly high," and then every reading afterward looks artificially low against it for a whole year. Percentile doesn't have that problem because it counts days, so one freak day is just one day. That's why the regime label runs off Percentile by default.
The regime label:
This translates those 0–100 numbers into a single word so you don't have to interpret them each time. You set two thresholds — default 80 and 20. Above 80 it reads HIGH (vol is richer than most of the past year). Below 20, LOW (vol is cheap). Anything between, NORMAL. The thresholds are yours to move: if you think 80 is too strict and want it flagging "high" earlier, drop it to 70. The cutoffs define what you consider rich versus cheap. You can also switch whether the label reads off Percentile or Rank.
Live updating:
The ranking history is built from daily XVI closes (you want to rank against a year of daily data, not intraday noise), but the current reading floats live against that history. As XVI moves through the session, IV Rank, IV Percentile, and the regime word update with it rather than waiting for the daily close.
Settings:
Volatility index — defaults to ASX:XVI. Can be pointed at another volatility index if you want to reuse the tool elsewhere.
History timeframe — the bar size the ranking history is measured on. Daily is standard.
Lookback — how far back it ranks. 252 ≈ one year. Drop it to 90 or 60 for a tighter, more recent read; the long-window and short-window answers genuinely differ when the past year contains a stale spike, so comparing the two is useful.
Regime read from / High threshold / Low threshold — choose whether the label is driven by Percentile or Rank, and set the two cutoffs.
Display — plot the Percentile line on or off, and position the readout table in any corner.
Reading it:
The pane plots IV Rank (aqua) and IV Percentile (orange) on a 0–100 scale, with dashed guide lines at your high and low thresholds and a dotted midline at 50. The corner table shows the live XVI level alongside both readings and the current regime.
A note on the data: because XVI is a calculated index rather than a traded instrument, your reading is only as live as your XVI data feed. On delayed feeds it updates with that delay, which is still perfectly adequate for volatility-regime context.
This script is a volatility-context tool, not a trading system. It tells you where implied volatility sits relative to its own history; it does not generate buy or sell signals, and nothing here is financial advice.
The core idea:
XVI is the ASX's "fear number" — the implied volatility of the XJO, the market's estimate of how much it's about to move over the next 30 days. The problem is that a raw XVI value is meaningless on its own. Is 16 high? Low? You can't know without context. This indicator's whole job is to give that context by answering one question: compared to its own recent history, is volatility currently rich, normal, or cheap?
The two ways it measures that:
IV Rank is the simple one. It looks at the highest and lowest XVI over your lookback window (a year by default) and asks where today sits on that line. XVI at its yearly low reads 0. At its yearly high, 100. Halfway between, 50. That's it — it's just "where in the range are we."
IV Percentile asks a slightly different question: of all the days in the window, what percentage had a lower XVI than today? If it reads 70, then vol is higher than it was on 70% of the past year's days. The reason this one's usually better is that IV Rank gets distorted by a single spike — one brief crash sets a sky-high "yearly high," and then every reading afterward looks artificially low against it for a whole year. Percentile doesn't have that problem because it counts days, so one freak day is just one day. That's why the regime label runs off Percentile by default.
The regime label:
This translates those 0–100 numbers into a single word so you don't have to interpret them each time. You set two thresholds — default 80 and 20. Above 80 it reads HIGH (vol is richer than most of the past year). Below 20, LOW (vol is cheap). Anything between, NORMAL. The thresholds are yours to move: if you think 80 is too strict and want it flagging "high" earlier, drop it to 70. The cutoffs define what you consider rich versus cheap. You can also switch whether the label reads off Percentile or Rank.
Live updating:
The ranking history is built from daily XVI closes (you want to rank against a year of daily data, not intraday noise), but the current reading floats live against that history. As XVI moves through the session, IV Rank, IV Percentile, and the regime word update with it rather than waiting for the daily close.
Settings:
Volatility index — defaults to ASX:XVI. Can be pointed at another volatility index if you want to reuse the tool elsewhere.
History timeframe — the bar size the ranking history is measured on. Daily is standard.
Lookback — how far back it ranks. 252 ≈ one year. Drop it to 90 or 60 for a tighter, more recent read; the long-window and short-window answers genuinely differ when the past year contains a stale spike, so comparing the two is useful.
Regime read from / High threshold / Low threshold — choose whether the label is driven by Percentile or Rank, and set the two cutoffs.
Display — plot the Percentile line on or off, and position the readout table in any corner.
Reading it:
The pane plots IV Rank (aqua) and IV Percentile (orange) on a 0–100 scale, with dashed guide lines at your high and low thresholds and a dotted midline at 50. The corner table shows the live XVI level alongside both readings and the current regime.
A note on the data: because XVI is a calculated index rather than a traded instrument, your reading is only as live as your XVI data feed. On delayed feeds it updates with that delay, which is still perfectly adequate for volatility-regime context.
This script is a volatility-context tool, not a trading system. It tells you where implied volatility sits relative to its own history; it does not generate buy or sell signals, and nothing here is financial advice.
Open-source script
In true TradingView spirit, the creator of this script has made it open-source, so that traders can review and verify its functionality. Kudos to the author! While you can use it for free, remember that republishing the code is subject to our House Rules.
Disclaimer
The information and publications are not meant to be, and do not constitute, financial, investment, trading, or other types of advice or recommendations supplied or endorsed by TradingView. Read more in the Terms of Use.
Open-source script
In true TradingView spirit, the creator of this script has made it open-source, so that traders can review and verify its functionality. Kudos to the author! While you can use it for free, remember that republishing the code is subject to our House Rules.
Disclaimer
The information and publications are not meant to be, and do not constitute, financial, investment, trading, or other types of advice or recommendations supplied or endorsed by TradingView. Read more in the Terms of Use.