{"slug":"the-volatility-risk-premium","qid":"vrp_worst_windows","label":"The ten deepest 21 session shortfalls, one per calendar month","post_title":"The Volatility Risk Premium, Measured","post_url":"/blog/the-volatility-risk-premium#q-vrp_worst_windows","columns":["label","implied_vol_pct","realized_vol_pct","shortfall_pct"],"rows":[{"label":"Mar 25, 2025","implied_vol_pct":15.56,"realized_vol_pct":51.28,"shortfall_pct":35.72},{"label":"Apr 1, 2025","implied_vol_pct":18.84,"realized_vol_pct":50.72,"shortfall_pct":31.89},{"label":"Apr 20, 2022","implied_vol_pct":17.56,"realized_vol_pct":35.14,"shortfall_pct":17.58},{"label":"Jul 15, 2024","implied_vol_pct":12.14,"realized_vol_pct":21.29,"shortfall_pct":9.14},{"label":"Mar 30, 2022","implied_vol_pct":16.49,"realized_vol_pct":25.5,"shortfall_pct":9.01},{"label":"Sep 9, 2022","implied_vol_pct":20.72,"realized_vol_pct":28.96,"shortfall_pct":8.24},{"label":"Feb 18, 2025","implied_vol_pct":12.48,"realized_vol_pct":20.51,"shortfall_pct":8.03},{"label":"May 17, 2022","implied_vol_pct":24.04,"realized_vol_pct":31.79,"shortfall_pct":7.75},{"label":"Aug 18, 2022","implied_vol_pct":17.81,"realized_vol_pct":25.49,"shortfall_pct":7.68},{"label":"Feb 9, 2022","implied_vol_pct":17.33,"realized_vol_pct":24.84,"shortfall_pct":7.51}],"shape":"ranking","sql":"WITH\ncloses AS\n(\n    SELECT\n        date,\n        toFloat64(any(close)) AS px\n    FROM global_markets.stocks_daily_aggs\n    WHERE ticker = 'SPY'\n      AND date >= '2021-06-01'\n    GROUP BY date\n),\ndaily_returns AS\n(\n    SELECT\n        date,\n        pow(log(px / lagInFrame(px) OVER (ORDER BY date ROWS BETWEEN 1 PRECEDING AND CURRENT ROW)), 2) AS r2\n    FROM closes\n),\nforward_rv AS\n(\n    SELECT\n        date,\n        100 * sqrt(252 * avg(r2) OVER (ORDER BY date ROWS BETWEEN 1 FOLLOWING AND 21 FOLLOWING)) AS rv_pct,\n        count(r2) OVER (ORDER BY date ROWS BETWEEN 1 FOLLOWING AND 21 FOLLOWING)                 AS sessions_ahead\n    FROM daily_returns\n    WHERE isFinite(r2)\n),\nimplied AS\n(\n    SELECT\n        date,\n        100 * avg(toFloat64(implied_volatility)) AS iv_pct\n    FROM global_markets.options_greeks\n    WHERE underlying_symbol = 'SPY'\n      AND iv_converged = 1\n      AND volume > 0\n      AND days_to_expiry BETWEEN 20 AND 45\n      AND abs(toFloat64(strike_price) / toFloat64(underlying_close) - 1) < 0.05\n      AND date >= '2021-08-01'\n    GROUP BY date\n    HAVING count() >= 20\n),\npaired AS\n(\n    SELECT\n        i.date              AS date,\n        i.iv_pct            AS iv_pct,\n        f.rv_pct            AS rv_pct,\n        i.iv_pct - f.rv_pct AS premium_pct\n    FROM implied AS i\n    INNER JOIN forward_rv AS f ON f.date = i.date\n    WHERE f.sessions_ahead = 21\n)\nSELECT\n    formatDateTime(argMin(date, premium_pct), '%b %e, %Y') AS label,\n    round(argMin(iv_pct, premium_pct), 2)                  AS implied_vol_pct,\n    round(argMin(rv_pct, premium_pct), 2)                  AS realized_vol_pct,\n    round(-1 * min(premium_pct), 2)                        AS shortfall_pct\nFROM paired\nGROUP BY toStartOfMonth(date)\nORDER BY min(premium_pct) ASC\nLIMIT 10","computed_at":"2026-10-16T15:53:33.388542+00:00","elapsed":0.006114138}