STRASMORE/EXPLORE 3,293 QUERIES

SPY realized volatility by calendar year, with the biggest day and the count of 2%+ sessions

Answered against 22 years of US equities and 12 years of US options data and published with the query that produced it. This result is stored as of 2026-10-24, from What Is a High VIX? Levels and Extremes.

as of ranking 23×4read in context →
SPY realized volatility by calendar year, with the biggest day and the count of 2%+ sessions — 23 rows by 4 columns, computed from US exchange, SIP and OPRA data.
yearrealized_vol_pctlargest_move_pctmoves_over_2pct
200411.21.80
200510.31.90
200610.12.12
200715.93.914
200841.114.570
200926.67.250
201017.94.422
201123.16.533
201212.82.57
201311.12.64
201411.32.54
201515.64.211
201613.23.610
20176.81.80
201817.25.119
201912.63.37
202033.810.942
202113.12.48
202224.35.546
202313.22.32
202412.637
202519.310.514
202612.92.94
Rows × columns
23 × 4
Computed
Completeness
No missing values
Source
US exchange, SIP and OPRA market data
Licence
Strasmore terms · free, no signup
Formats
JSON · CSV · the SQL below

What each column holds

Column definitions for SPY realized volatility by calendar year, with the biggest day and the count of 2%+ sessions, derived from the stored result.
ColumnTypeRangeNotes
year number 2,004 to 2,026
realized_vol_pct number 6.8 to 41.1 percent
largest_move_pct number 1.8 to 14.5 percent
moves_over_2pct number 0 to 70

Computed from Strasmore's warehouse of US exchange, SIP and OPRA market data. Equity prices are delayed; options greeks and implied volatility are end-of-day. This result is stored, not recomputed on load — it is exactly the numbers that were returned on , and the query below is what returned them.

Run it yourself

This is the exact query behind the result above. Change a ticker, a date or a column and run it against the warehouse — no account, no key. The no-signup tier is smaller than the one this page was computed on; a query that reaches past it comes back saying which plan runs it.

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 year
⌘/Ctrl + Enter

Work with this data in your AI assistant

Opens ready to query, with this page's data. Free, no account.

More from this analysisWhat Is a High VIX? Levels and Extremes
SPY 30-day at-the-money implied volatility, sessions per VIX-style rung ranking 4×4 → SPY on August 5, 2024, in half-hour buckets (ET): the low and the close of each series 13×3 → SPY daily closes from the VIX record close (March 16, 2020) through March 27 series 10×4 → Listed versus traded strikes by moneyness (SPY, Sep 18 2026 expiry, as of Aug 14 2026) ranking 10×3 → SPY near-the-money implied volatility by days to expiry ranking 8×2 → SPY absolute daily move, median and 90th percentile by year ranking 8×4 → See all 3,293 queries →