What Is a High VIX? Levels and Extremes
What is a high VIX? A level ladder from under 15 to over 40, the daily S&P 500 move each implies, how rare each has been, and the record extremes by date.
A high VIX is any reading above about 30, a level the index reaches only in stress episodes; under 15 is low, and 15 to 20 is the long-run middle of its range. The VIX is a price, the annualized volatility that S&P 500 index options are charging for the next 30 days, so each level translates into an expected daily move and into a sense of how unusual the moment is. Below: the level ladder and the record extremes by date, then what a high VIX does not tell you.
Is a higher or lower VIX good?
Neither, on its own. The VIX is the price of 30-day protection on the S&P 500: a higher reading means index options cost more, a lower reading means they cost less. An investor buying puts against a stock portfolio pays more for insurance at a VIX of 30 than at 13; the trader selling that insurance collects more. That buyer versus seller framing is its own post. For everyone else the VIX is a forecast of how bumpy the road ahead is priced to be, and the number says nothing about which way the bumps go. The VIX explainer covers how the index is built; this page is about what a given level means.
What is a high VIX? The level ladder
Every VIX reading converts to a daily move with the rule of 16: divide the index by 16 for the one-standard-deviation move the options market is pricing for a single session. The rule of 16 post shows where the 16 comes from, so it is not re-derived here. Applied to the ladder:
- Under 15. A priced daily move under about 0.9%. Calm-market territory, where a 1% day counts as news. The record low close is 9.14 on November 3, 2017; the lowest intraday print is 8.56 on November 24, 2017, the half-day session after Thanksgiving.
- 15 to 20. Roughly 1% to 1.25% a day. The middle of the VIX's long-run range, where a 1% move is a routine session.
- 20 to 30. Between 1.25% and just under 1.9% a day. Elevated: a correction in progress, or the weeks after a shock while the market settles.
- Over 30. More than about 1.9% a day, so a 2% session is priced as ordinary. This is where "high VIX" begins in common usage, and the index has closed here mainly inside recognized stress episodes.
- Over 40. A priced daily move of 2.5% or more. Crisis territory. The 2008 to 2009 financial crisis and March 2020 are the two big episodes; the most recent was a brief stretch in April 2025 that peaked at a 52.33 close on April 8, 2025.
The expected move post extends the same arithmetic from one day to any horizon.
How rare is each VIX level?
The VIX is a Cboe index, so the closest stand-in that can be computed from listed option prices is SPY's 30-day at-the-money implied volatility: the same 30-day horizon on the same index, read from the ETF's options. The panel sorts every session in the daily options record, which begins in mid-2021, onto the ladder above.
| bucket | session_count | share_pct | latest_label |
|---|---|---|---|
| under 15 | 1838 | 59.5 | Sep 2026 |
| 15 to 20 | 732 | 23.7 | Jul 2026 |
| 20 to 30 | 455 | 14.7 | Apr 2026 |
| over 30 | 63 | 2 | Apr 2025 |
The exact SQL behind every number
SELECT
bucket,
session_count,
round(session_count * 100.0 / sum(session_count) OVER (), 1) AS share_pct,
latest_label
FROM
(
SELECT
bucket,
count() AS session_count,
min(iv_pct) AS bucket_floor,
formatDateTime(max(date), '%b %Y') AS latest_label
FROM
(
SELECT
date,
round(avg(implied_volatility) * 100, 2) AS iv_pct,
multiIf(iv_pct < 15, 'under 15',
iv_pct < 20, '15 to 20',
iv_pct < 30, '20 to 30',
'over 30') AS bucket
FROM global_markets.options_greeks
WHERE underlying_symbol = 'SPY'
AND iv_converged = 1
AND volume > 0
AND days_to_expiry BETWEEN 20 AND 45
AND abs(toFloat64(strike_price) / toFloat64(underlying_close) - 1) < 0.02
GROUP BY date
)
GROUP BY bucket
)
ORDER BY bucket_floorAcross that record, SPY's 30-day implied volatility sat under 15 on 1838 sessions (59.5% of the total), between 15 and 20 on 732 (23.7%), between 20 and 30 on 455 (14.7%), and over 30 on just 63 sessions (2%), the most recent of them in Apr 2025. One caveat: the window includes the 2022 bear market and the spikes of August 2024 and April 2025 but no 2008-scale or 2020-scale event, so the top rung is thinner here than across the full history since 1990.
What the VIX is priced against
Implied volatility is a forecast; realized volatility is what happened. The panel measures SPY's realized volatility for each calendar year since 2004 (the annualized standard deviation of daily closing returns), with the largest single-day move of the year and the number of sessions that moved 2% or more, the threshold a VIX over 30 prices as an ordinary day.
| year | realized_vol_pct | largest_move_pct | moves_over_2pct |
|---|---|---|---|
| 2004 | 11.2 | 1.8 | 0 |
| 2005 | 10.3 | 1.9 | 0 |
| 2006 | 10.1 | 2.1 | 2 |
| 2007 | 15.9 | 3.9 | 14 |
| 2008 | 41.1 | 14.5 | 70 |
| 2009 | 26.6 | 7.2 | 50 |
| 2010 | 17.9 | 4.4 | 22 |
| 2011 | 23.1 | 6.5 | 33 |
| 2012 | 12.8 | 2.5 | 7 |
| 2013 | 11.1 | 2.6 | 4 |
| 2014 | 11.3 | 2.5 | 4 |
| 2015 | 15.6 | 4.2 | 11 |
| 2016 | 13.2 | 3.6 | 10 |
| 2017 | 6.8 | 1.8 | 0 |
| 2018 | 17.2 | 5.1 | 19 |
| 2019 | 12.6 | 3.3 | 7 |
| 2020 | 33.8 | 10.9 | 42 |
| 2021 | 13.1 | 2.4 | 8 |
| 2022 | 24.3 | 5.5 | 46 |
| 2023 | 13.2 | 2.3 | 2 |
The exact SQL behind every number
SELECT
toYear(d) AS year,
round(stddevSamp(log(c / prev_c)) * sqrt(252) * 100, 1) AS realized_vol_pct,
round(max(abs(c / prev_c - 1)) * 100, 1) AS largest_move_pct,
countIf(abs(c / prev_c - 1) >= 0.02) AS moves_over_2pct
FROM
(
SELECT
d,
c,
lagInFrame(c, 1) OVER (ORDER BY d ASC ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS prev_c
FROM
(
SELECT
date AS d,
toFloat64(any(close)) AS c
FROM global_markets.stocks_daily_aggs
WHERE ticker = 'SPY'
AND date >= '2003-12-01'
GROUP BY d
)
)
WHERE d >= '2004-01-01'
AND prev_c > 0
GROUP BY year
ORDER BY yearThree years anchor the ladder. In 2008, the year of the 89.53 intraday VIX record, SPY's realized volatility was 41.1% and its largest daily move was 14.5%; 70 sessions moved 2% or more. In 2017, the year of the 9.14 record low close, realized volatility was 6.8% and the largest move was 1.8%; not one session moved 2%. In 2020, realized volatility ran 33.8% for the full year, with 42 sessions moving 2% or more. 2017 is what a market that agrees with a VIX near 10 looks like; 2008 is what one that justifies a VIX above 40 looks like. The realized versus implied volatility post digs into the gap between the two. The last row, 2026, is a partial year through the most recent session loaded.
The VIX record highs and lows, by date
Every figure here is a daily open, high, low or close from Cboe's published VIX history, checked against that file in September 2026.
- Record close: 82.69 on March 16, 2020. The pandemic-crash peak, pricing a daily S&P 500 move of about 5.2% (82.69 divided by 16).
- 2008 closing peak: 80.86 on November 20, 2008. The record until March 2020 passed it.
- All-time intraday high: 89.53 on October 24, 2008. The VIX closed that day at 79.13, ten points under its intraday extreme.
- Record low close: 9.14 on November 3, 2017. The intraday low of 8.56 followed three weeks later, on November 24, 2017.
- August 5, 2024: 65.73 intraday, 38.57 at the close. A gap of more than 27 points between the session high and the close, and the highest intraday print outside the 2008 to 2009 and March 2020 episodes.
What a high VIX is not
It is not a direction. The VIX is computed from S&P 500 puts and calls across a range of strikes, and it measures the size of the move the market is pricing and says nothing about its sign. In practice the index rises most sharply on down days, which is how it earned the "fear gauge" nickname, but a VIX of 30 is equally consistent with a 2% rally and a 2% drop tomorrow.
It does not stay high. The VIX has no long-run trend the way a stock price can: readings in the 40s and 80s alike have been followed by readings back in the teens, on a scale of weeks to months. The two most recent spikes make the point. The 38.57 close of August 5, 2024 was followed by 27.71 the next session; the 52.33 close of April 8, 2025 was followed by 33.62 on April 9. That pull back toward its usual range is what "mean-reverting" means, and it is why IV rank and IV percentile exist: a level only reads as high or low against where it has recently been.
A high VIX does not mean stocks fall the next day. The March 2020 sequence is the cleanest illustration, and every step is dated. The VIX closed at 75.47 on March 12, 2020 and at its record 82.69 on March 16. The stock market's low close came a full week later.
| session_date | date_label | spy_close | day_change_pct |
|---|---|---|---|
| 2020-03-16 | Mar 16 | 239.85 | -10.94 |
| 2020-03-17 | Mar 17 | 252.8 | 5.4 |
| 2020-03-18 | Mar 18 | 240 | -5.06 |
| 2020-03-19 | Mar 19 | 240.51 | 0.21 |
| 2020-03-20 | Mar 20 | 228.8 | -4.87 |
| 2020-03-23 | Mar 23 | 222.95 | -2.56 |
| 2020-03-24 | Mar 24 | 243.15 | 9.06 |
| 2020-03-25 | Mar 25 | 246.79 | 1.5 |
| 2020-03-26 | Mar 26 | 261.2 | 5.84 |
| 2020-03-27 | Mar 27 | 253.42 | -2.98 |
The exact SQL behind every number
SELECT
toString(d) AS session_date,
formatDateTime(d, '%b %e') AS date_label,
round(c, 2) AS spy_close,
round((c / prev_c - 1) * 100, 2) AS day_change_pct
FROM
(
SELECT
d,
c,
lagInFrame(c, 1) OVER (ORDER BY d ASC ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS prev_c
FROM
(
SELECT
date AS d,
toFloat64(any(close)) AS c
FROM global_markets.stocks_daily_aggs
WHERE ticker = 'SPY'
AND date >= '2020-03-13'
AND date <= '2020-03-27'
GROUP BY d
)
)
WHERE d >= '2020-03-16'
ORDER BY dOn Mar 16, the day of the VIX record, SPY closed at $239.85 after a one-day move of -10.94%. Its lowest close of the stretch came on Mar 23 at $222.95, five sessions after the VIX peaked, by which point the VIX had already come down to a 61.59 close. The next session, Mar 24, SPY moved 9.06%, its largest one-day gain of the stretch, with the VIX still above 60 at 61.67. A VIX in the 60s and 80s says the market is pricing daily moves of 4% to 5%. It does not say which way, and in the second half of March 2020 the biggest of those moves were up. Our March 2020 crash post walks the month session by session.
The spike and the close: August 5, 2024
The VIX is computed continuously from live S&P 500 option quotes, including the extended-hours window before the regular session, when those quotes are wider than during regular hours. The 65.73 print of August 5, 2024 came roughly an hour before the regular open; the index closed at 38.57. SPY's regular-session tape tells the same story in miniature.
| et_time | spy_low | spy_close |
|---|---|---|
| 09:30 | 510.27 | 515.22 |
| 10:00 | 510.94 | 514.64 |
| 10:30 | 514.62 | 516.43 |
| 11:00 | 515.35 | 519.68 |
| 11:30 | 519.1 | 520.42 |
| 12:00 | 519.7 | 523.57 |
| 12:30 | 518.44 | 518.91 |
| 13:00 | 518.25 | 519.66 |
| 13:30 | 518.71 | 519.06 |
| 14:00 | 517.73 | 518.95 |
| 14:30 | 515.61 | 515.72 |
| 15:00 | 515.31 | 516.43 |
| 15:30 | 514.88 | 517.41 |
The exact SQL behind every number
SELECT
formatDateTime(bucket, '%H:%i') AS et_time,
round(toFloat64(min(low)), 2) AS spy_low,
round(toFloat64(argMax(close, window_start)), 2) AS spy_close
FROM
(
SELECT
window_start,
toStartOfInterval(toTimeZone(window_start, 'America/New_York'), INTERVAL 30 MINUTE) AS bucket,
low,
close
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND window_start >= toDateTime('2024-08-05 04:00:00', 'UTC')
AND window_start < toDateTime('2024-08-06 04:00:00', 'UTC')
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
+ toMinute(toTimeZone(window_start, 'America/New_York'))) >= 570
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
+ toMinute(toTimeZone(window_start, 'America/New_York'))) < 960
)
GROUP BY bucket
ORDER BY bucketIn the opening half hour SPY traded as low as $510.27; it finished the day at $517.41. A reader who saw only the 65.73 headline would picture a 2008-scale day. The close, on the index and the ETF alike, describes something smaller. When a VIX number is quoted, ask whether it is an intraday print or a close: on this one day they differed by more than 27 points.
FAQ
What VIX level is considered high?
Above 30 is high in common usage: the options market is pricing S&P 500 moves of about 2% a day, and the index has closed there mainly inside recognized stress episodes. Above 40 is crisis territory; the 2008 to 2009 crisis and March 2020 are the two big examples. Under 15 is low, and 15 to 20 is the long-run middle.
What does a VIX of 20 mean?
S&P 500 index options are priced for annualized volatility of 20% over the next 30 days. By the rule of 16 that is a one-standard-deviation daily move of about 1.25%, so a typical session moves roughly that much and about one day in three moves more.
What was the highest VIX ever?
The highest intraday print is 89.53 on October 24, 2008 and the highest close is 82.69 on March 16, 2020, per Cboe's published history. The 2008 closing peak was 80.86 on November 20, 2008. August 5, 2024 reached 65.73 intraday before closing at 38.57.
Does a high VIX mean stocks will fall?
No. The VIX measures the size of the moves the options market is pricing and says nothing about their direction. In March 2020 the VIX set its record close on March 16, yet SPY's low close came a week later on March 23. The largest one-day gain of the month came the day after that, with the VIX still above 60.
What is the lowest the VIX has ever been?
The record low close is 9.14 on November 3, 2017, and the lowest intraday value is 8.56 on November 24, 2017, the shortened session after Thanksgiving.
Every panel above carries the SQL that produced it; expand any one to see the exact filter behind the number. To rerun the same questions for another ticker or window, ask them in plain English on the Strasmore terminal.