STRASMORE/EXPLORE 3,256 QUERIES

An at-the-money SPY call: prior close versus value at the expiry close, every June 2026 expiry

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 Are 0DTE Options High Risk? What the Greeks Say.

as of series 21×6read in context →
An at-the-money SPY call: prior close versus value at the expiry close, every June 2026 expiry — 21 rows by 6 columns, computed from US exchange, SIP and OPRA data.
expiry_dateexpiry_labelpremium_prior_closevalue_at_expirypct_of_premium_leftspy_move_pct
2026-06-01Mon Jun 12.50.58230.12
2026-06-02Tue Jun 22.712.63970.4
2026-06-03Wed Jun 31.6200-1.2
2026-06-04Thu Jun 43.993.56890.53
2026-06-05Fri Jun 52.9800-2.54
2026-06-08Mon Jun 83.953.72940.46
2026-06-09Tue Jun 92.7500-0.41
2026-06-10Wed Jun 103.6100-1.74
2026-06-11Thu Jun 115.4416.483032.3
2026-06-12Fri Jun 123.53.45990.4
2026-06-15Mon Jun 153.4811.913421.54
2026-06-16Tue Jun 162.2200-0.42
2026-06-17Wed Jun 172.2300-0.69
2026-06-18Thu Jun 180.890.941060.18
2026-06-22Mon Jun 223.1500-0.44
2026-06-23Tue Jun 232.7800-1.16
2026-06-24Wed Jun 242.752.2800.3
2026-06-25Thu Jun 252.6800-0.61
2026-06-26Fri Jun 263.6100-0.2
2026-06-29Mon Jun 293.869.762531.31
2026-06-30Tue Jun 302.315.32290.75
Rows × columns
21 × 6
Period covered
to
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 An at-the-money SPY call: prior close versus value at the expiry close, every June 2026 expiry, derived from the stored result.
ColumnTypeRangeNotes
expiry_date date 2026-06-01 to 2026-06-30
expiry_label text 21 distinct values (Fri Jun 12, Fri Jun 26, Fri Jun 5…)
premium_prior_close number 0.89 to 5.44 US dollars
value_at_expiry number 0 to 16.48
pct_of_premium_left number 0 to 342 percent
spy_move_pct number -2.54 to 2.3 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 spy_by_day AS
(
    SELECT
        toDate(date)                             AS d,
        medianExact(toFloat64(underlying_close)) AS spot
    FROM global_markets.options_greeks
    WHERE underlying_symbol = 'SPY'
      AND date >= toDate('2026-06-01')
      AND date <  toDate('2026-07-01')
      AND underlying_close > 0
    GROUP BY d
),
last_sessions AS
(
    SELECT
        toDate(expiration_date) AS exp_date,
        max(toDate(date))       AS prior_session
    FROM global_markets.options_greeks
    WHERE underlying_symbol = 'SPY'
      AND expiration_date >= toDate('2026-06-01')
      AND expiration_date <  toDate('2026-07-01')
      AND date >= toDate('2026-05-22')
      AND date <  expiration_date
      AND volume > 0
    GROUP BY exp_date
),
atm AS
(
    SELECT
        toDate(g.expiration_date)                                                                                AS exp_date,
        argMin(toFloat64(g.strike_price), abs(toFloat64(g.strike_price) - toFloat64(g.underlying_close)))        AS strike,
        argMin(toFloat64(g.option_close), abs(toFloat64(g.strike_price) - toFloat64(g.underlying_close)))        AS premium_before,
        argMin(toFloat64(g.underlying_close), abs(toFloat64(g.strike_price) - toFloat64(g.underlying_close)))    AS spy_before
    FROM global_markets.options_greeks AS g
    INNER JOIN last_sessions AS ls
        ON ls.exp_date = toDate(g.expiration_date) AND ls.prior_session = toDate(g.date)
    WHERE g.underlying_symbol = 'SPY'
      AND lower(toString(g.option_type)) IN ('call', 'c')
      AND g.date >= toDate('2026-05-22')
      AND g.date <  toDate('2026-07-01')
      AND g.volume > 0
      AND g.option_close > 0
    GROUP BY exp_date
)
SELECT
    toString(a.exp_date)                                                                   AS expiry_date,
    concat(formatDateTime(a.exp_date, '%a %b '), toString(toDayOfMonth(a.exp_date)))       AS expiry_label,
    round(a.premium_before, 2)                                                             AS premium_prior_close,
    round(greatest(s.spot - a.strike, 0.0), 2)                                             AS value_at_expiry,
    round(greatest(s.spot - a.strike, 0.0) / a.premium_before * 100, 0)                    AS pct_of_premium_left,
    round((s.spot / a.spy_before - 1) * 100, 2)                                            AS spy_move_pct
FROM atm AS a
INNER JOIN spy_by_day AS s
    ON s.d = a.exp_date
ORDER BY a.exp_date
⌘/Ctrl + Enter

Travaillez ces données dans votre assistant IA

S'ouvre prêt à interroger, avec les données de cette page. Gratuit, sans compte.

More from this analysisAre 0DTE Options High Risk? What the Greeks Say
Gamma and theta per dollar of premium, by days to expiry (June 2026) series 5×5 → Delta change from a 1% SPY move, by distance from the strike (June 2026) ranking 9×3 → What an at-the-money SPY call cost, by days to expiry (June 2026) table 5×5 → How the at-the-money call finished, June 2026 expiries ranking 5×2 → SPY expiration dates per weekday, by month, since October 2021 series 60×6 → One SPY $740 call's price over its 7-week life (expired Jun 18 2026) series 31×2 → See all 3,256 queries →