STRASMORE/EXPLORE 2,469 QUERIES

closure_window

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-22, from after-hours-trading-on-holidays-and-weekends.

as of series 12×5read in context →
closure_window — 12 rows by 5 columns, computed from US exchange, SIP and OPRA data.
session_dateweekdayfirst_print_et_minutelast_print_et_minutelast_print_et
2025-11-24Mon240119919:59
2025-11-25Tue240119919:59
2025-11-26Wed240113918:59
2025-11-27Thu00no trading
2025-11-28Fri240101916:59
2025-11-29Sat00no trading
2025-11-30Sun00no trading
2025-12-01Mon240119919:59
2025-12-02Tue240119919:59
2025-12-03Wed240119919:59
2025-12-04Thu240119919:59
2025-12-05Fri240113918:59
Rows × columns
12 × 5
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 closure_window, derived from the stored result.
ColumnTypeRangeNotes
session_date date 2025-11-24 to 2025-12-05
weekday text 7 distinct values (Fri, Mon, Sat…)
first_print_et_minute number 0 to 240
last_print_et_minute number 0 to 1,199
last_print_et text 4 distinct values (16:59, 18:59, 19:59…)

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.

SELECT
    toString(cal.day)                       AS session_date,
    formatDateTime(cal.day, '%a')           AS weekday,
    toUInt32(ifNull(t.first_minute, 0))     AS first_print_et_minute,
    toUInt32(ifNull(t.last_minute, 0))      AS last_print_et_minute,
    if(last_print_et_minute = 0,
       'no trading',
       concat(leftPad(toString(intDiv(last_print_et_minute, 60)), 2, '0'), ':',
              leftPad(toString(modulo(last_print_et_minute, 60)), 2, '0'))) AS last_print_et
FROM
(
    SELECT toDate('2025-11-24') + arrayJoin(range(12)) AS day
) AS cal
LEFT JOIN
(
    SELECT
        toDate(toTimeZone(window_start, 'America/New_York')) AS d,
        min(toHour(toTimeZone(window_start, 'America/New_York')) * 60
            + toMinute(toTimeZone(window_start, 'America/New_York'))) AS first_minute,
        max(toHour(toTimeZone(window_start, 'America/New_York')) * 60
            + toMinute(toTimeZone(window_start, 'America/New_York'))) AS last_minute
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker = 'SPY'
      AND window_start >= '2025-11-24 00:00:00'
      AND window_start <  '2025-12-06 06:00:00'
    GROUP BY d
) AS t ON t.d = cal.day
ORDER BY cal.day
⌘/Ctrl + Enter
More from this analysisafter-hours-trading-on-holidays-and-weekends
upcoming_closures series 12×7 weekday_tape series 7×4 session_clock ranking 15×4 The 2s10s spread by month, full history series 604×5 One SPY $600 LEAPS call's price over two years (expired Jan 16 2026) series 470×2 3m10y and 2s10s spreads, monthly averages over twenty years series 241×4 See all 2,469 queries →