skew_smile
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-09-23, from gld-implied-volatility.
| delta_bucket | gld_iv_pct | spy_iv_pct |
|---|---|---|
| 10 delta put | 27.31 | 23.17 |
| 25 delta put | 25.96 | 18.86 |
| at the money | 25.09 | 14.98 |
| 25 delta call | 25.73 | 12.7 |
| 10 delta call | 27.67 | 11.65 |
- Rows × columns
- 5 × 3
- Computed
- Completeness
- No missing values
- Source
- US exchange, SIP and OPRA market data
- Licence
- Strasmore terms · free, no signup
What each column holds
| Column | Type | Range | Notes |
|---|---|---|---|
delta_bucket |
text | 5 distinct values | |
gld_iv_pct |
number | 25.09 to 27.67 | percent |
spy_iv_pct |
number | 11.65 to 23.17 | percent |
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.
WITH wings AS
(
SELECT
underlying_symbol AS sym,
multiIf(
delta BETWEEN -0.15 AND -0.05, 1,
delta BETWEEN -0.32 AND -0.18, 2,
delta BETWEEN 0.45 AND 0.55, 3,
delta BETWEEN 0.18 AND 0.32, 4,
delta BETWEEN 0.05 AND 0.15, 5,
0) AS ord,
toFloat64(implied_volatility) * 100 AS iv_pct
FROM global_markets.options_greeks
WHERE underlying_symbol IN ('GLD', 'SPY')
AND date >= '2025-09-01'
AND date < '2026-09-01'
AND iv_converged = 1
AND volume > 0
AND days_to_expiry BETWEEN 20 AND 45
)
SELECT
['10 delta put', '25 delta put', 'at the money', '25 delta call', '10 delta call'][ord] AS delta_bucket,
round(avgIf(iv_pct, sym = 'GLD'), 2) AS gld_iv_pct,
round(avgIf(iv_pct, sym = 'SPY'), 2) AS spy_iv_pct
FROM wings
WHERE ord > 0
GROUP BY ord
HAVING countIf(sym = 'GLD') > 0
AND countIf(sym = 'SPY') > 0
ORDER BY ord
Work with this data in your AI assistant
Opens ready to query, with this page's data. Free, no account.