expiry_day
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.
| expiry_date | expiry_label | premium_prior_close | value_at_expiry | pct_of_premium_left | spy_move_pct |
|---|---|---|---|---|---|
| 2026-06-01 | Mon Jun 1 | 2.5 | 0.58 | 23 | 0.12 |
| 2026-06-02 | Tue Jun 2 | 2.71 | 2.63 | 97 | 0.4 |
| 2026-06-03 | Wed Jun 3 | 1.62 | 0 | 0 | -1.2 |
| 2026-06-04 | Thu Jun 4 | 3.99 | 3.56 | 89 | 0.53 |
| 2026-06-05 | Fri Jun 5 | 2.98 | 0 | 0 | -2.54 |
| 2026-06-08 | Mon Jun 8 | 3.95 | 3.72 | 94 | 0.46 |
| 2026-06-09 | Tue Jun 9 | 2.75 | 0 | 0 | -0.41 |
| 2026-06-10 | Wed Jun 10 | 3.61 | 0 | 0 | -1.74 |
| 2026-06-11 | Thu Jun 11 | 5.44 | 16.48 | 303 | 2.3 |
| 2026-06-12 | Fri Jun 12 | 3.5 | 3.45 | 99 | 0.4 |
| 2026-06-15 | Mon Jun 15 | 3.48 | 11.91 | 342 | 1.54 |
| 2026-06-16 | Tue Jun 16 | 2.22 | 0 | 0 | -0.42 |
| 2026-06-17 | Wed Jun 17 | 2.23 | 0 | 0 | -0.69 |
| 2026-06-18 | Thu Jun 18 | 0.89 | 0.94 | 106 | 0.18 |
| 2026-06-22 | Mon Jun 22 | 3.15 | 0 | 0 | -0.44 |
| 2026-06-23 | Tue Jun 23 | 2.78 | 0 | 0 | -1.16 |
| 2026-06-24 | Wed Jun 24 | 2.75 | 2.2 | 80 | 0.3 |
| 2026-06-25 | Thu Jun 25 | 2.68 | 0 | 0 | -0.61 |
| 2026-06-26 | Fri Jun 26 | 3.61 | 0 | 0 | -0.2 |
| 2026-06-29 | Mon Jun 29 | 3.86 | 9.76 | 253 | 1.31 |
| 2026-06-30 | Tue Jun 30 | 2.31 | 5.3 | 229 | 0.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
What each column holds
| Column | Type | Range | Notes |
|---|---|---|---|
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.
the exact SQL behind every number
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
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.