spy_strike_weights
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-18, from what-is-the-cme-cvol-index.
| moneyness | iv_pct | vix_style_weight_pct | cvol_style_weight_pct |
|---|---|---|---|
| -10% | 24.9 | 123.5 | 100 |
| -8% | 22.8 | 118.1 | 100 |
| -6% | 20.5 | 113.2 | 100 |
| -4% | 18.8 | 108.5 | 100 |
| -2% | 16.9 | 104.1 | 100 |
| 0% | 15 | 100 | 100 |
| +2% | 13.2 | 96.1 | 100 |
| +4% | 12.1 | 92.5 | 100 |
| +6% | 11.7 | 89 | 100 |
| +8% | 12.2 | 85.7 | 100 |
| +10% | 13.4 | 82.6 | 100 |
- Rows × columns
- 11 × 4
- 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 |
|---|---|---|---|
moneyness |
text | 11 distinct values (+10%, +2%, +4%…) | |
iv_pct |
number | 11.7 to 24.9 | percent |
vix_style_weight_pct |
number | 82.6 to 123.5 | percent |
cvol_style_weight_pct |
number | every row is 100 | 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.
the exact SQL behind every number
SELECT
concat(if(bucket_pct > 0, '+', ''), toString(bucket_pct), '%') AS moneyness,
round(100 * avg(implied_volatility), 1) AS iv_pct,
round(100 / pow(1 + bucket_pct / 100, 2), 1) AS vix_style_weight_pct,
100 AS cvol_style_weight_pct
FROM
(
SELECT
implied_volatility,
toInt32(2 * round((toFloat64(strike_price) / toFloat64(underlying_close) - 1) * 50)) AS bucket_pct
FROM global_markets.options_greeks
WHERE underlying_symbol = 'SPY'
AND date >= '2026-06-01'
AND date < '2026-07-01'
AND iv_converged = 1
AND volume > 0
AND days_to_expiry BETWEEN 23 AND 37
AND ((lower(toString(option_type)) IN ('put', 'p')
AND toFloat64(strike_price) < toFloat64(underlying_close))
OR (lower(toString(option_type)) IN ('call', 'c')
AND toFloat64(strike_price) > toFloat64(underlying_close)))
)
WHERE bucket_pct BETWEEN -10 AND 10
GROUP BY bucket_pct
ORDER BY bucket_pct
Run your own version of this
The same 22 years of US equities and 12 years of options data are queryable in SQL or plain English. A free account runs 100 queries a day and takes no card.
More from this analysiswhat-is-the-cme-cvol-index
spy_term_structure
ranking 7×2
→
Top 25 weekly-options underlyings by distinct contracts traded, with expiration weekdays
ranking 25×4
→
Annualized volatility vs total return, 25 large caps, calmest to wildest (~2 years)
ranking 25×3
→
SPY options median spread by expiration date, near-the-money strikes only
ranking 25×4
→
Share of prints with a placeholder participant timestamp, one March session per year (IBM and MSFT)
ranking 24×4
→
When market headlines publish, by New York clock hour
ranking 24×2
→
See all 2,358 queries →