STRASMORE/EXPLORE 2,173 QUERIES

early_closes

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-26, from what-time-do-options-start-trading.

as of series 2×6read in context →
early_closes — 2 rows by 6 columns, computed from US exchange, SIP and OPRA data.
holiday_labelholidayscheduled_open_etscheduled_close_etopen_hour_etclose_hour_et
Nov 27Thanksgiving09:30 AM01:00 PM9.513
Dec 24Christmas09:30 AM01:00 PM9.513
Rows × columns
2 × 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 early_closes, derived from the stored result.
ColumnTypeRangeNotes
holiday_label text 2 distinct values (Dec 24, Nov 27)
holiday date Christmas to Thanksgivi
scheduled_open_et text 1 distinct value (09:30 AM)
scheduled_close_et text 1 distinct value (01:00 PM)
open_hour_et number every row is 9.5 US dollars
close_hour_et number every row is 13 US dollars

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
    formatDateTime(date, '%b %e')                                          AS holiday_label,
    any(name)                                                              AS holiday,
    formatDateTime(toTimeZone(any(open),  'America/New_York'), '%I:%i %p') AS scheduled_open_et,
    formatDateTime(toTimeZone(any(close), 'America/New_York'), '%I:%i %p') AS scheduled_close_et,
    round((toHour(toTimeZone(any(open),  'America/New_York')) * 60
         + toMinute(toTimeZone(any(open),  'America/New_York'))) / 60, 2)  AS open_hour_et,
    round((toHour(toTimeZone(any(close), 'America/New_York')) * 60
         + toMinute(toTimeZone(any(close), 'America/New_York'))) / 60, 2)  AS close_hour_et
FROM global_markets.stocks_market_holidays
WHERE date >= today()
  AND status = 'early-close'
GROUP BY date
ORDER BY 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.

More from this analysiswhat-time-do-options-start-trading
spy_open_ramp series 46×3 session_clock series 21×3 One SPY $600 LEAPS call's price over two years (expired Jan 16 2026) series 470×2 2s10s spread, monthly average: last 20 years series 240×2 Growth of $100 in the 1x SOXX vs the 3x SOXL, Jan 2 to Jul 13 2026 series 131×3 SPY underwater curve: month end close against its running peak, 2016 to 2026 series 127×2 See all 2,173 queries →