Data AnalysisUpdated 1,058 words, 5 minutes
VIX regimes: how often the index closes above 30, by year since 1990
Every calendar year since 1990 with the number of VIX closes above 20, 30, and 40, the yearly maximum and its date, and the longest stretches above 30, from FRED.
"The VIX above 30" is shorthand for a stressed market, and it is used as if it were rare. Whether it is rare depends on the year. This article counts, for every calendar year from 1990 to 2026, how many daily closes of the index were above 20, 30, and 40, along with each year's maximum and the longest consecutive runs above 30. The data is the VIXCLS series on FRED and the counting script is attached.
The data
VIXCLS is the daily closing value of the Cboe Volatility Index as carried on FRED, starting 1990-01-02. The FRED notes describe the index as measuring "market expectation of near term volatility conveyed by stock index option prices"; it is quoted in annualised percentage points of implied volatility for the S&P 500 over the next thirty days. The file retrieved on 2026-09-05 runs to 2026-09-03 and contains 9,266 non-missing closes after holidays are dropped. The 2026 row is partial, with 174 closes through September 3.
One caution from the Cboe side: the index methodology was revised in 2003 to use S&P 500 options and a wider strip of strikes, and Cboe back-calculated the series; the early 1990s values in this file are that reconstruction rather than the number that was published on the day.
The method
v = pd.read_csv(CSV, parse_dates=["date"], index_col="date")["VIXCLS"].dropna()
for y, s in v.groupby(v.index.year):
above30 = int((s > 30).sum())
share = 100 * (s > 30).mean()
peak, peak_date = s.max(), s.idxmax()
A "close above 30" is strictly greater than 30.00. Runs are consecutive trading days with closes above 30; a single close at or below 30 ends the run.
The table
Output of python code/vix-closes-above-30-by-year.py on 2026-09-05.
| year | closes | above 20 | above 30 | above 40 | share above 30 | max close (date) | mean close |
|---|---|---|---|---|---|---|---|
| 1990 | 253 | 179 | 24 | 0 | 9.5% | 36.47 (1990-08-23) | 23.1 |
| 1991 | 252 | 57 | 7 | 0 | 2.8% | 36.20 (1991-01-14) | 18.4 |
| 1992 | 254 | 4 | 0 | 0 | 0.0% | 21.02 (1992-10-07) | 15.5 |
| 1993 | 253 | 0 | 0 | 0 | 0.0% | 17.30 (1993-09-21) | 12.7 |
| 1994 | 252 | 2 | 0 | 0 | 0.0% | 23.87 (1994-04-04) | 13.9 |
| 1995 | 252 | 0 | 0 | 0 | 0.0% | 15.74 (1995-10-05) | 12.4 |
| 1996 | 254 | 15 | 0 | 0 | 0.0% | 21.99 (1996-12-16) | 16.4 |
| 1997 | 251 | 171 | 18 | 0 | 7.2% | 38.20 (1997-10-30) | 22.4 |
| 1998 | 252 | 204 | 53 | 15 | 21.0% | 45.74 (1998-10-08) | 25.6 |
| 1999 | 252 | 239 | 10 | 0 | 4.0% | 32.98 (1999-01-14) | 24.4 |
| 2000 | 252 | 202 | 5 | 0 | 2.0% | 33.49 (2000-04-14) | 23.3 |
| 2001 | 248 | 239 | 46 | 4 | 18.5% | 43.74 (2001-09-20) | 25.7 |
| 2002 | 252 | 212 | 83 | 10 | 32.9% | 45.08 (2002-08-05) | 27.3 |
| 2003 | 252 | 123 | 39 | 0 | 15.5% | 34.69 (2003-01-27) | 22.0 |
| 2004 | 253 | 5 | 0 | 0 | 0.0% | 21.58 (2004-03-22) | 15.5 |
| 2005 | 252 | 0 | 0 | 0 | 0.0% | 17.74 (2005-04-15) | 12.8 |
| 2006 | 251 | 3 | 0 | 0 | 0.0% | 23.81 (2006-06-13) | 12.8 |
| 2007 | 251 | 85 | 3 | 0 | 1.2% | 31.09 (2007-11-12) | 17.5 |
| 2008 | 253 | 223 | 79 | 63 | 31.2% | 80.86 (2008-11-20) | 32.7 |
| 2009 | 252 | 247 | 111 | 61 | 44.0% | 56.65 (2009-01-20) | 31.5 |
| 2010 | 252 | 156 | 23 | 3 | 9.1% | 45.79 (2010-05-20) | 22.5 |
| 2011 | 252 | 135 | 75 | 11 | 29.8% | 48.00 (2011-08-08) | 24.2 |
| 2012 | 250 | 45 | 0 | 0 | 0.0% | 26.66 (2012-06-01) | 17.8 |
| 2013 | 252 | 3 | 0 | 0 | 0.0% | 20.49 (2013-06-20) | 14.2 |
| 2014 | 252 | 11 | 0 | 0 | 0.0% | 26.25 (2014-10-15) | 14.2 |
| 2015 | 252 | 42 | 4 | 1 | 1.6% | 40.74 (2015-08-24) | 16.7 |
| 2016 | 252 | 42 | 0 | 0 | 0.0% | 28.14 (2016-02-11) | 15.8 |
| 2017 | 251 | 0 | 0 | 0 | 0.0% | 16.04 (2017-08-10) | 11.1 |
| 2018 | 251 | 59 | 5 | 0 | 2.0% | 37.32 (2018-02-05) | 16.6 |
| 2019 | 252 | 15 | 0 | 0 | 0.0% | 25.45 (2019-01-03) | 15.4 |
| 2020 | 253 | 218 | 80 | 35 | 31.6% | 82.69 (2020-03-16) | 29.3 |
| 2021 | 252 | 91 | 6 | 0 | 2.4% | 37.21 (2021-01-27) | 19.7 |
| 2022 | 256 | 233 | 49 | 0 | 19.1% | 36.45 (2022-03-07) | 25.6 |
| 2023 | 257 | 43 | 0 | 0 | 0.0% | 26.52 (2023-03-13) | 16.8 |
| 2024 | 259 | 25 | 1 | 0 | 0.4% | 38.57 (2024-08-05) | 15.6 |
| 2025 | 258 | 64 | 12 | 4 | 4.7% | 52.33 (2025-04-08) | 18.9 |
| 2026 | 174 | 38 | 2 | 0 | 1.1% | 31.05 (2026-03-27) | 18.5 |
Whole sample: 735 of 9,266 closes above 30 (7.9 percent), 207 above 40, median close 17.58, all-time high 82.69 on 2020-03-16. Fifteen of the thirty-seven years had no close above 30 at all. The longest consecutive runs above 30: 170 closes from 2008-09-15 to 2009-05-18; 50 from 2011-08-04 to 2011-10-13; 50 from 2020-02-27 to 2020-05-07; 48 from 1998-08-21 to 1998-10-28; 42 from 2002-08-27 to 2002-10-24. The latest close in the file, 2026-09-03, is 14.32.
What it shows
Closes above 30 cluster. Four years account for 353 of the 735: 2009 (111), 2002 (83), 2020 (80) and 2008 (79). The 2008 to 2009 run of 170 consecutive closes is more than three times the next longest, and is the only period where the mean close for a whole year was above 30 (32.7 in 2008 and 31.5 in 2009).
Between clusters, the index can go years without touching 30. From 2012 to 2014 and again from 2016 to 2017 and in 2019 and 2023 there were no closes above 30, and 2017's maximum close was 16.04, the lowest yearly maximum in the file. The years 1993 to 1996 and 2004 to 2006 are similar. Reading the table top to bottom, the pattern is long quiet stretches with a few short, sharp episodes, and the 40 threshold is rarer still: after 2011 it was crossed on one day in 2015, 35 days in 2020, and 4 days in 2025.
Recent years fit the pattern rather than breaking it. 2024 had one close above 30, the 38.57 spike of August 5; 2025 had 12, concentrated in early April, with a peak of 52.33 on April 8 that is the highest close since March 2020; 2026 to date has 2, with a peak of 31.05 on March 27. The mean close in 2025 (18.9) and 2026 (18.5) is above the 2023 and 2024 means but close to the whole-sample median.
What it does not show
The table counts closes, not intraday highs, and the index has spiked above 30 intraday on days that closed below it. A different threshold would tell a somewhat different story: 20 is crossed in most years, and the "above 20" column shows 2022 with 233 such closes despite no close above 40.
Implied volatility is a price, not a forecast that has been scored. The table does not compare VIX levels with the realised volatility that followed, and it says nothing about whether the index was high or low relative to what happened. Nor does it say anything about returns; nothing here is a signal.
The early 1990s figures are reconstructed under the 2003 methodology and are not the values market participants saw at the time. And 2026 is eight months of a year; its row will change.