Cboe Indices
Daily history of Cboe's volatility indices, including VIX, sourced directly from Cboe.
cboe_indices — the dataset name to pass to the Obscura API.
What one row means
One trading day's index level for one CBOE-published index symbol: full OHLC (open/high/low/close) for indices CBOE publishes as a 4-column series (VIX, VIX9D, VIX3M, VIX6M, VXN, RVX), or a single published value stored in `close` for indices CBOE publishes as a single daily figure (VVIX, SKEW).
One row per (symbol, available_date).
Point-in-time availability
Every Obscura dataset carries available_date: the calendar day the publisher made the row
available, day-of, with no session rounding. It is the one column a backtest filters on, and it means the
same thing on every dataset in the catalog.
For cboe_indices: published: available_date is the trading day itself, parsed from the CSV's DATE column; CBOE appends each day's settle to the full-history CSV shortly after the ~4:00-4:15pm ET close and the collector's cron waits until 6:30pm ET to pull it, so the trading day and its public-availability day are the same day by construction.
Refresh cadence
Obscura refreshes cboe_indices every weekday — the most frequent scheduled job that re-collects or re-exports it. This is Obscura's own pipeline cadence, not the upstream publisher's release schedule; when a row became public is recorded per row in available_date.
Schema — 6 columns
The full public column list for cboe_indices, with the meaning of every field. The same
schema is served unauthenticated at https://api.obscura.trade/v1/catalog/cboe_indices.
| Column | Type | Description |
|---|---|---|
| symbol | text · not null | CBOE index ticker (VIX, VIX9D, VIX3M, VIX6M, VVIX, SKEW, VXN, RVX per schedules/prod/cboe.yaml's `symbols` kwarg); also the {SYMBOL} slug in the source URL cdn.cboe.com/api/global/us_indices/daily_prices/{SYMBOL}_History.csv. Part of the composite primary key with available_date. |
| available_date | date · not null | The trading day this index level belongs to, parsed from the CSV's leading DATE column (parse_date() tries MM/DD/YYYY then YYYY-MM-DD). Doubles as the public-availability date: the collector runs post-close same day, so the trading day and the day the value first became public are identical, so no separate event_date column exists on this table. Composite primary key with symbol; the upsert conflict target. |
| open | double precision | Index opening level for the trading day, from the CSV's OPEN column. NULL for single-value indices (VVIX, SKEW), which CBOE publishes with only one daily figure — parse_index_csv detects this by header width (<5 columns) and leaves open/high/low unset, storing the lone value in close. |
| high | double precision | Intraday high index level for the trading day, from the CSV's HIGH column. NULL for single-value indices (VVIX, SKEW) for the same reason as open. |
| low | double precision | Intraday low index level for the trading day, from the CSV's LOW column. NULL for single-value indices (VVIX, SKEW) for the same reason as open. |
| close | double precision | Closing index level for the trading day for OHLC indices (VIX, VIX9D, VIX3M, VIX6M, VXN, RVX). For single-value indices (VVIX, SKEW), this is instead the single daily figure CBOE publishes for that index — the only populated measure column on those rows. |
Access cboe_indices
Two delivery paths, one identifier. Both require an Obscura account and an active subscription; the catalog entry and the schema above are public.
import obscura
client = obscura.Client("obs_live_…")
df = client.query(
dataset="cboe_indices",
symbols=["NVDA", "AAPL"],
start="2024-01-01",
)
Create a free account Browse all 95 datasets
Frequently asked questions
What is in the cboe_indices dataset?
Daily history of Cboe's volatility indices, including VIX, sourced directly from Cboe. One trading day's index level for one CBOE-published index symbol: full OHLC (open/high/low/close) for indices CBOE publishes as a 4-column series (VIX, VIX9D, VIX3M, VIX6M, VXN, RVX), or a single published value stored in `close` for indices CBOE publishes as a single daily figure (VVIX, SKEW).
How do I avoid look-ahead bias with cboe_indices?
Filter on cboe_indices.available_date, the day the publisher made the row public. For this dataset that date is derived as follows — published: available_date is the trading day itself, parsed from the CSV's DATE column; CBOE appends each day's settle to the full-history CSV shortly after the ~4:00-4:15pm ET close and the collector's cron waits until 6:30pm ET to pull it, so the trading day and its public-availability day are the same day by construction. A query of the form WHERE available_date <= '<as-of date>' never sees a row before it existed.
In what formats can I get cboe_indices?
As a Parquet bulk export (POST https://api.obscura.trade/v1/download) or as JSON from the typed query API (POST https://api.obscura.trade/v1/query), both with dataset="cboe_indices". The column schema is public at https://api.obscura.trade/v1/catalog/cboe_indices.
Can I filter cboe_indices by company or symbol?
Yes. cboe_indices carries symbol, the column the API's symbols filter resolves against.
How often is cboe_indices updated?
Obscura refreshes cboe_indices on a every weekday schedule — that is the most frequent scheduled job that re-collects or re-exports the table. It is Obscura's own pipeline cadence, not the upstream publisher's release schedule; when the publisher makes a row available is described by the availability rule above, and is recorded per row in available_date.