STRASMORE/EXPLORE 2,170 QUERIES

SPY implied volatility by strike distance, 20 to 45 days to expiry (Jan to Jun 2026)

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-08-12, from Heston Model and the Volatility Smile.

as of ranking 13×4read in context →
SPY implied volatility by strike distance, 20 to 45 days to expiry (Jan to Jun 2026) — 13 rows by 4 columns, computed from US exchange, SIP and OPRA data.
moneynessiv_pctiv_vs_atm_ptscontracts
-12%28.0511.611853
-10%26.329.884733
-8%24.127.686276
-6%225.567898
-4%20.053.6110363
-2%18.171.7312370
0%16.44014027
+2%15.03-1.4111470
+4%13.96-2.488233
+6%13.59-2.855133
+8%13.65-2.793165
+10%14.63-1.811921
+12%15.56-0.88708
Rows × columns
13 × 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 implied volatility by strike distance, 20 to 45 days to expiry (Jan to Jun 2026), derived from the stored result.
ColumnTypeRangeNotes
moneyness text 13 distinct values (+10%, +12%, +2%…)
iv_pct number 13.59 to 28.05 percent
iv_vs_atm_pts number -2.85 to 11.61 ratio or rate
contracts number 708 to 14,027 count

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
WITH
    (
        SELECT avg(implied_volatility)
        FROM global_markets.options_greeks
        WHERE underlying_symbol = 'SPY'
          AND date BETWEEN '2026-01-02' AND '2026-06-30'
          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.01
    ) AS atm_iv
SELECT
    concat(if(m_bucket > 0, '+', ''), toString(m_bucket), '%') AS moneyness,
    round(avg(iv) * 100, 2)                                    AS iv_pct,
    round((avg(iv) - atm_iv) * 100, 2)                          AS iv_vs_atm_pts,
    count()                                                     AS contracts
FROM
(
    SELECT
        implied_volatility AS iv,
        toInt16(round((toFloat64(strike_price) / toFloat64(underlying_close) - 1) * 50) * 2) AS m_bucket
    FROM global_markets.options_greeks
    WHERE underlying_symbol = 'SPY'
      AND date BETWEEN '2026-01-02' AND '2026-06-30'
      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.12
)
GROUP BY m_bucket
HAVING count() >= 100
ORDER BY m_bucket

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 analysisHeston Model and the Volatility Smile
How far at-the-money implied volatility itself travelled (Jan to Jun 2026) ranking 6×4 Near-the-money implied volatility by time to expiry (Jan to Jun 2026) ranking 6×3 Put-side versus call-side implied volatility, 20 to 45 days (Jan to Jun 2026) ranking 6×4 Daily at-the-money implied volatility, SPY and NVDA (Apr to Jun 2026) series 62×3 At-the-money implied volatility across six names (Jul 6 2026, Jul-17 expiry) ranking 6×3 One near-money call each, premium as a share of the stock (Jul 6 2026) ranking 2×4 See all 2,170 queries →