Financial Literature

Cboe Global Markets

Cboe index data — The VIX and its family, as daily CSVs from the exchange that computes them

When you need the volatility index from the source that computes it, with the full history since 1990, or its siblings (VIX9D, VIX3M, VVIX, SKEW) to read the term structure.

volatilityoptionsUnited Statesglobal
Asset classesvolatility · options
Frequencydaily
History1990 → today
Limit · costNo key · static CSV files
KeyNo key
Formats · pull withcsv — python, excel, sheets
LicenceCboe data terms: free for personal and research use; redistribution of the index values requires a licence.
RedistributeNo — link and pull, do not republish
Best for“How scared is the market now versus 2008 or 2020?” · “Is a move in stocks confirmed by options?”
When to use it

Reach for it when…

When you need the volatility index from the source that computes it, with the full history since 1990, or its siblings (VIX9D, VIX3M, VVIX, SKEW) to read the term structure.

Not for: Option chains and implied vols by strike (a broker or a paid feed), realised volatility (compute it from prices), anything intraday.

How to read it

Units, revisions, traps

Units. Annualised implied volatility in percent — a VIX of 20 means the S&P 500 is priced to move about 20% over a year, or about 1.3% a day (20 ÷ √252).

Revisions. Not revised. The methodology changed in 2003 and 2014; the pre-2003 history is a back-cast under the newer method.

  • Dates in the CSV are MM/DD/YYYY — parse with a format string.
  • VIX is a level, not a return: compare regimes (below 15, 15–25, above 30), do not difference it.
  • Spot VIX is not tradable; the futures curve (contango or backwardation) is the second thing to read.

Classic mistake: Treating VIX 30 as 'the market will fall 30%'.

How to use it in your own work

Three recipes

Each recipe: Python · Excel · Sheets, with how to read the result. Python recipes run under pandas; recipe 1 is re-run by the weekly check where the source allows it.

How to use it in your own work

Copy the snippet, change the series id, read the result the way the footer says. Replace YOUR_…_KEY with your own key where one is needed.

Recipe 1VIX since 1990, with regimes

import pandas as pd
u = "https://cdn.cboe.com/api/global/us_indices/daily_prices/VIX_History.csv"
df = pd.read_csv(u, parse_dates=["DATE"], date_format="%m/%d/%Y").set_index("DATE")
vix = df["CLOSE"]
print(vix.tail(), "\nabove 30 on", (vix > 30).sum(), "days of", len(vix))
How to read the resultDays above 30 cluster in a handful of episodes (2008, 2020, 2022). The median sits near 17–18; a reading in the low teens is calm, not 'complacent' by itself.

Recipe 2The term structure: 9-day, 30-day, 3-month

import pandas as pd
base = "https://cdn.cboe.com/api/global/us_indices/daily_prices/"
parts = {k: pd.read_csv(base + f + ".csv", parse_dates=["DATE"], date_format="%m/%d/%Y").set_index("DATE")["CLOSE"] for k, f in
         {"9d": "VIX9D_History", "30d": "VIX_History", "3m": "VIX3M_History"}.items()}
ts = pd.DataFrame(parts).dropna()
ts["inverted"] = ts["9d"] > ts["3m"]
print(ts.tail())
How to read the resultShort-dated above long-dated (inverted) is the stress signature; it usually resolves within weeks.

Recipe 3VIX against the S&P 500's realised volatility

# implied (VIX) vs realised (21-day, annualised) using Stooq for the index
import pandas as pd, numpy as np
vix = pd.read_csv("https://cdn.cboe.com/api/global/us_indices/daily_prices/VIX_History.csv", parse_dates=["DATE"], date_format="%m/%d/%Y").set_index("DATE")["CLOSE"]
spx = pd.read_csv("https://stooq.com/q/d/l/?s=%5Espx&i=d", parse_dates=["Date"]).set_index("Date")["Close"]
rv = np.log(spx).diff().rolling(21).std() * np.sqrt(252) * 100
print(pd.DataFrame({"VIX": vix, "realised": rv}).dropna().tail())
How to read the resultVIX usually sits above realised (the variance premium). Realised above implied is the surprise state.

Series → question map

The ids we use from Cboe index data, each with the question it answers. The catalog's compare view reads the concept tags behind these rows.

SeriesAnswersRegionConcept
VIX_HistoryHow scared is the market?United Statesvix
VIX9D_HistoryIs short-dated fear spiking?United Statesvix
VIX3M_HistoryIs the vol curve inverted?United Statesvix
VVIX_HistoryHow volatile is the VIX itself?United Statesvix

Compare with

Same question, different source: Stooq, CFTC Commitments of Traders, FRED. The compare view lines up coverage, frequency, history and access side by side and lists what the combination makes possible.

Open compare: Cboe index data · Stooq · CFTC Commitments of Traders →

Questions readers ask

Can I use Cboe's VIX CSV in a product?

Personal and research use is free; publishing or redistributing the values needs a Cboe data licence. Link to the page rather than reposting the file.

Does FRED have the VIX?

Yes, VIXCLS, one day behind — convenient when you already pull from FRED.

Why is the pre-2003 VIX different?

It was recomputed under the 2003 methodology (S&P 500 options, all strikes). The original 1990s VIX (now VXO) used S&P 100 at-the-money options.

Educational only — we explain, we never advise · snippet licence: public domain · corrections to [email protected], fixed within a day and logged in the changelog.