Strasmore Research
Learn am Matt ConnorBy Matt Connor

VIX meaning wey e really measure

VIX na 30-day implied volatility from S&P 500 options. Level 15 mean 1% daily move, 30 mean 2%. Cboe build am from option quotes, no be forecast.

The VIX na one number wey show wetin S&P 500 index options dey charge for di next 30 days of movement, wey dem quote as annualized percentage. VIX wey dey near 16 mean say di index go move about 1% every day, and VIX wey dey near 32 mean say e go move about 2%. Na price wey dem read from live option quotes, no be forecast wey anybody publish.

Wetin VIX dey measure for real

Cboe dey build VIX from di quoted prices of S&P 500 index options, wey dey blend di two expirations wey dey bracket a point 30 calendar days ahead. Di calculation no dey pick one at-the-money contract. E dey sweep a whole strip of out-of-the-money puts and calls, dey weight each option by one over e strike squared, sum dem into a variance figure, then take di square root and annualize am. Two properties dey fall out from dat construction.

  • Na strip statistic. Far out-of-the-money puts carry real weight, so di level dey track how expensive deep downside protection don become relative to everything else, di shape wey volatility skew cover.
  • E dey permanently 30 days forward. As di calendar dey advance, di calculation dey roll across expirations, and di index never dey age into a shorter horizon like individual option dey do.

Di index itself no fit buy or sell. Wetin dey trade na futures, options on dem futures, and exchange-traded products wey dem build on top dem, na where most of di confusion for dis page start.

Our option records cover exchange-listed contracts name by name, so every panel below dey measure SPY, di S&P 500 tracking fund, instead of di SPX contracts wey Cboe feed into di published index. Di underlying index na di same and di arithmetic na di same. Levels dey run close to di published VIX without matching am print for print, and di shapes na wetin dis page dey about. Di single-name version of di same measurement dey inside implied volatility.

QuerySPY at-the-money implied volatility near 30 days to expiry, monthly averages (Jul 2025 to Jul 2026)
The exact SQL behind every number
SELECT toStartOfMonth(date) AS month,
       formatDateTimeInJodaSyntax(toStartOfMonth(date), 'MMMM yyyy') AS month_label,
       round(avg(implied_volatility) * 100, 1) AS avg_iv_pct,
       round(min(implied_volatility) * 100, 1) AS lowest_print_pct,
       round(max(implied_volatility) * 100, 1) AS highest_print_pct,
       count() AS contracts
FROM global_markets.options_greeks
WHERE underlying_symbol = 'SPY'
  AND date >= toDate('2025-07-01')
  AND date < toDate('2026-08-01')
  AND abs(delta) BETWEEN 0.45 AND 0.55
  AND days_to_expiry BETWEEN 23 AND 37
  AND iv_converged
  AND implied_volatility BETWEEN 0.02 AND 3
GROUP BY month
ORDER BY month
Run this yourself

Across di 13 months wey dem chart, di monthly average open at 13.5% for July 2025 and finish at 14% for July 2026. March 2026 dey sit well above both at 21.2%. Individual contract prints inside dat month span from 13.6% go 33.3%, wey be di first thing wey one single headline number dey hide: di index na average over a strip wey never uniform.

How to turn VIX level into expected daily move

VIX dey annualized, and traders dey convert am to daily figure by dividing by 16. Di 16 na di square root of 252, wey be di approximate number of US trading sessions for a year, and volatility dey scale with di square root of time. Reading of 16 dey divide down to 1%, so di market dey price for di index to travel about 1% for a typical session, for either direction. Reading of 32 give 2%. For one-week horizon, divide di annual figure by about 7.2 instead, wey be di square root of 52.

Two cautions dey come with di shortcut. Di daily figure na one-standard-deviation move, wey normal distribution dey place at roughly two sessions for three, wey dey leave di remaining third to land outside am. And di figure na wetin options dey charge, wey be separate quantity from wetin di index go on to do.

QueryImplied daily move against the realized daily move: SPY, month by month
The exact SQL behind every number
WITH iv AS (
    SELECT toStartOfMonth(date) AS month,
           avg(implied_volatility) * 100 AS iv_pct
    FROM global_markets.options_greeks
    WHERE underlying_symbol = 'SPY'
      AND date >= toDate('2025-07-01')
      AND date < toDate('2026-08-01')
      AND abs(delta) BETWEEN 0.45 AND 0.55
      AND days_to_expiry BETWEEN 23 AND 37
      AND iv_converged
      AND implied_volatility BETWEEN 0.02 AND 3
    GROUP BY month
),
px AS (
    SELECT date, toFloat64(close) AS c
    FROM global_markets.stocks_daily_aggs
    WHERE ticker = 'SPY'
      AND date >= toDate('2025-06-01')
      AND date < toDate('2026-08-01')
),
moves AS (
    SELECT toStartOfMonth(date) AS month,
           abs(c / any(c) OVER (ORDER BY date ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) - 1) * 100 AS abs_move_pct
    FROM px
),
realized AS (
    SELECT month,
           avg(abs_move_pct) AS avg_abs_move_pct,
           count() AS sessions
    FROM moves
    WHERE month >= toDate('2025-07-01')
    GROUP BY month
)
SELECT iv.month AS month,
       formatDateTimeInJodaSyntax(iv.month, 'MMMM yyyy') AS month_label,
       round(iv.iv_pct / 16, 2) AS implied_daily_move_pct,
       round(realized.avg_abs_move_pct, 2) AS realized_daily_move_pct,
       round(iv.iv_pct / 16 - realized.avg_abs_move_pct, 2) AS gap_pct,
       realized.sessions AS sessions
FROM iv
INNER JOIN realized ON iv.month = realized.month
ORDER BY month
Run this yourself

Di two lines rarely meet. For July 2025 di options dey price for 0.84% average session while di index actually average 0.33%, a gap of 0.51 points. By July 2026 di implied figure read 0.88% against a realized 0.61%. Dat standing gap get name, di volatility risk premium, and na di compensation wey option sellers dey collect for carrying di tail. E dey narrow during turbulent stretches and e fit invert when a move arrive faster than di options dey price for.

Thirty days na one point for curve

Di 30-day horizon for VIX na choice, no be natural constant. Options dey exist at every expiry from same-day go out to years, and each one carry e own implied volatility. Di full set na di term structure.

QuerySPY at-the-money implied volatility by time to expiry, July 15, 2026
The exact SQL behind every number
SELECT multiIf(days_to_expiry <= 7, '0-7 days',
               days_to_expiry <= 21, '8-21 days',
               days_to_expiry <= 45, '22-45 days',
               days_to_expiry <= 90, '46-90 days',
               days_to_expiry <= 180, '91-180 days',
               '180+ days') AS days_to_expiry_bucket,
       round(avg(implied_volatility) * 100, 1) AS atm_iv_pct,
       count() AS contracts
FROM global_markets.options_greeks
WHERE date = toDate('2026-07-15')
  AND underlying_symbol = 'SPY'
  AND abs(delta) BETWEEN 0.45 AND 0.55
  AND iv_converged
  AND implied_volatility BETWEEN 0.02 AND 3
GROUP BY days_to_expiry_bucket
ORDER BY min(days_to_expiry)
Run this yourself

For dat session, di near-dated contracts price 9.6% at di 0-7 days bucket, climb go 17.3% out at 180+ days. Upward-sloping curve of dis kind na di ordinary quiet-market shape. During drawdowns, di front of di curve dey usually rise above di back, and VIX quote wey dem take alone no show any of dat. Di very front of dis curve na e own market, wey dem examine for 0DTE options.

Three common misreadings

Di nickname "fear gauge" carry most of di trouble. VIX dey rise during equity drawdowns often enough for di label to stick, and di level still na option price, wey whoever dey pay up for protection at dat moment set. High reading dey record wetin hedging cost now. E no carry direction and no timestamp for when a move fit arrive.

Di second misreading dey treat high reading as signal to buy options and low reading as signal to sell dem. Di panel above show why dat shortcut no reliable: wetin matter to option holder na di level wey dem pay against wetin di index go on to deliver, and elevated levels don historically follow by faster decay once di disturbance pass, di pattern wey IV crush set out.

Di third na di assumption say higher volatility dey pay higher returns. Long-run equity data don repeatedly run di other way, wey be di subject of di low volatility anomaly.

VIX products and wetin holding dem cost

Since di index no fit hold directly, exchange-traded products dey stand in. Di common ones dey hold VIX futures and roll dem forward continuously. Futures wey dey further out dey usually price above nearer ones during calm stretches, so each roll dey sell cheaper contract and buy dearer one. Repeated daily, di arithmetic dey compound against buy-and-hold position, wey show up as persistent downward drift for di share price. Di pattern dey visible for di typical day instead of for any one dramatic session.

QueryMedian daily percent change: VXX against SPY, by calendar year
The exact SQL behind every number
WITH d AS (
    SELECT ticker, date, toFloat64(close) AS c
    FROM global_markets.stocks_daily_aggs
    WHERE ticker IN ('VXX', 'SPY')
      AND date >= toDate('2020-01-01')
      AND date < toDate('2026-07-01')
),
r AS (
    SELECT ticker,
           date,
           toYear(date) AS year,
           (c / any(c) OVER (PARTITION BY ticker ORDER BY date ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) - 1) * 100 AS ret_pct
    FROM d
)
SELECT year,
       round(quantileDeterministicIf(0.5)(ret_pct, toUInt64(toYYYYMMDD(date)), ticker = 'VXX'), 3) AS vxx_median_daily_pct,
       round(quantileDeterministicIf(0.5)(ret_pct, toUInt64(toYYYYMMDD(date)), ticker = 'SPY'), 3) AS spy_median_daily_pct,
       countIf(ticker = 'VXX') AS vxx_sessions
FROM r
WHERE year >= 2020
GROUP BY year
ORDER BY year
Run this yourself

For 2020 di median VXX session move -1.038%, against 0.226% for SPY over di same sessions. For 2026, a partial year wey run go June 30, di median VXX session read -0.169%. Every year for di panel carry negative median for di volatility product. Daily percent changes dey use here on purpose, since di raw price line dey broken by repeated reverse splits and go flatter di product badly. Dem build dis instruments as short-horizon tools, and di roll cost na design feature of dem, no be defect.

FAQ

Wetin VIX of 20 mean?

VIX of 20 mean say S&P 500 options dey price for di index to move about 20% over di coming year, annualized. Divide am by 16, dat work out to roughly 1.25% move for a typical session, up or down. Di figure dey describe di size of expected movement and no talk anything about direction.

VIX na fear gauge?

VIX dey measure di price of S&P 500 option protection over di next 30 days. E don rise during past equity drawdowns often enough for di nickname to stick, and e remain price instead of sentiment survey or prediction. E also no get horizon beyond di 30-day window wey dem compute am over.

Wetin be normal VIX level?

Historical readings don spend most of dem time for di low-to-mid teens through di twenties, with brief excursions far higher during market stress. As reference point, SPY at-the-money implied volatility near 30 days average 14% for July 2026 for di panel above.

You fit buy VIX?

Di index na calculation, no be security, and e no fit buy. Exposure dey come through VIX futures, options on dem futures, or exchange-traded products wey dey hold dem, each one dey track di futures curve instead of di spot index. Di rolling cost of dem products dey charted above.

How you convert VIX into expected daily move?

Divide di VIX level by 16, di approximate square root of 252 trading sessions for a year. Level of 16 imply about 1% typical session, level of 24 about 1.5%. Dat na one-standard-deviation figure, so moves outside am dey ordinary instead of rare.


Every panel above store e SQL. Open any of dem to audit di calculation, or run di same measurement on di underlying of your choice for di Strasmore terminal. For dis measurement on one fund over a rolling window, see SPY implied volatility.