STRASMORE/EXPLORE 3,293 QUERIES 22Y EQUITIES · 12Y OPTIONS

3,293 answered market questions

every one with its exact SQL, its result and the date it was computed · free, no signup

The Volatility Risk Premium, Measured
The ten deepest 21 session shortfalls, one per calendar monthranking · 2026-10-16 · 10×4Preview: 10 ranked values, smallest first. SPY implied volatility against the realized volatility that followed, by monthseries · 2026-10-16 · 62×5Preview: a 16-point series, roughly flat. Distribution of the 21 session volatility risk premium, in volatility pointsranking · 2026-10-16 · 6×3Preview: 6 ranked values, largest first. The volatility risk premium by option tenor, each matched to its own realized windowtable · 2026-10-16 · 4×5 The 21 session premium across strikes, puts and calls, 20 to 45 days to expiryranking · 2026-10-16 · 7×3Preview: 7 ranked values, largest first.
The ten deepest 21 session shortfalls, one per calendar month

The ten deepest 21 session shortfalls, one per calendar month

most recentas of ranking 10×4read in context →
The ten deepest 21 session shortfalls, one per calendar month — 10 rows by 4 columns, computed from US exchange, SIP and OPRA data.
labelimplied_vol_pctrealized_vol_pctshortfall_pct
Mar 25, 202515.5651.2835.72
Apr 1, 202518.8450.7231.89
Apr 20, 202217.5635.1417.58
Jul 15, 202412.1421.299.14
Mar 30, 202216.4925.59.01
Sep 9, 202220.7228.968.24
Feb 18, 202512.4820.518.03
May 17, 202224.0431.797.75
Aug 18, 202217.8125.497.68
Feb 9, 202217.3324.847.51
the exact SQL behind every number
WITH
closes AS
(
    SELECT
        date,
        toFloat64(any(close)) AS px
    FROM global_markets.stocks_daily_aggs
    WHERE ticker = 'SPY'
      AND date >= '2021-06-01'
    GROUP BY date
),
daily_returns AS
(
    SELECT
        date,
        pow(log(px / lagInFrame(px) OVER (ORDER BY date ROWS BETWEEN 1 PRECEDING AND CURRENT ROW)), 2) AS r2
    FROM closes
),
forward_rv AS
(
    SELECT
        date,
        100 * sqrt(252 * avg(r2) OVER (ORDER BY date ROWS BETWEEN 1 FOLLOWING AND 21 FOLLOWING)) AS rv_pct,
        count(r2) OVER (ORDER BY date ROWS BETWEEN 1 FOLLOWING AND 21 FOLLOWING)                 AS sessions_ahead
    FROM daily_returns
    WHERE isFinite(r2)
),
implied AS
(
    SELECT
        date,
        100 * avg(toFloat64(implied_volatility)) AS iv_pct
    FROM global_markets.options_greeks
    WHERE underlying_symbol = 'SPY'
      AND iv_converged = 1
      AND volume > 0
      AND days_to_expiry BETWEEN 20 AND 45
      AND abs(toFloat64(strike_price) / toFloat64(underlying_close) - 1) < 0.05
      AND date >= '2021-08-01'
    GROUP BY date
    HAVING count() >= 20
),
paired AS
(
    SELECT
        i.date              AS date,
        i.iv_pct            AS iv_pct,
        f.rv_pct            AS rv_pct,
        i.iv_pct - f.rv_pct AS premium_pct
    FROM implied AS i
    INNER JOIN forward_rv AS f ON f.date = i.date
    WHERE f.sessions_ahead = 21
)
SELECT
    formatDateTime(argMin(date, premium_pct), '%b %e, %Y') AS label,
    round(argMin(iv_pct, premium_pct), 2)                  AS implied_vol_pct,
    round(argMin(rv_pct, premium_pct), 2)                  AS realized_vol_pct,
    round(-1 * min(premium_pct), 2)                        AS shortfall_pct
FROM paired
GROUP BY toStartOfMonth(date)
ORDER BY min(premium_pct) ASC
LIMIT 10
$