STRASMORE/EXPLORE 3,256 QUERIES

premarket_clock_lagos

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-10-09, from us-daylight-saving-switch-lagos-time.

as of series 7×8read in context →
premarket_clock_lagos — 7 rows by 8 columns, computed from US exchange, SIP and OPRA data.
monthmonth_labelpremarket_first_lagosregular_open_lagosregular_close_lagospremarket_first_hoursregular_open_hoursregular_close_hours
2025-10Oct 202509:0014:3021:00914.521
2025-11Nov 202510:0015:3022:001015.522
2025-12Dec 202510:0015:3022:001015.522
2026-01Jan 202610:0015:3022:001015.522
2026-02Feb 202610:0015:3022:001015.522
2026-03Mar 202609:0014:3021:00914.521
2026-04Apr 202609:0014:3021:00914.521
Rows × columns
7 × 8
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 premarket_clock_lagos, derived from the stored result.
ColumnTypeRangeNotes
month text 7 distinct values (2025-10, 2025-11, 2025-12…)
month_label text 7 distinct values (Apr 2026, Dec 2025, Feb 2026…)
premarket_first_lagos text 2 distinct values (09:00, 10:00)
regular_open_lagos text 2 distinct values (14:30, 15:30)
regular_close_lagos text 2 distinct values (21:00, 22:00)
premarket_first_hours number 9 to 10
regular_open_hours number 14.5 to 15.5 US dollars
regular_close_hours number 21 to 22 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.

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
    formatDateTime(day, '%Y-%m')     AS month,
    argMax(month_label, day)         AS month_label,
    argMax(premarket_label, day)     AS premarket_first_lagos,
    argMax(open_label, day)          AS regular_open_lagos,
    argMax(close_label, day)         AS regular_close_lagos,
    argMax(premarket_hours, day)     AS premarket_first_hours,
    argMax(open_hours, day)          AS regular_open_hours,
    argMax(close_hours, day)         AS regular_close_hours
FROM
(
    SELECT
        day,
        formatDateTime(day, '%b %Y')                                    AS month_label,
        formatDateTime(first_bar, '%H:%i')                              AS premarket_label,
        formatDateTime(regular_open, '%H:%i')                           AS open_label,
        formatDateTime(regular_close, '%H:%i')                          AS close_label,
        round(toHour(first_bar) + toMinute(first_bar) / 60, 2)          AS premarket_hours,
        round(toHour(regular_open) + toMinute(regular_open) / 60, 2)    AS open_hours,
        round(toHour(regular_close) + toMinute(regular_close) / 60, 2)  AS close_hours
    FROM
    (
        SELECT
            toDate(toTimeZone(window_start, 'America/New_York'))  AS day,
            toTimeZone(min(window_start), 'Africa/Lagos')         AS first_bar,
            toTimeZone(minIf(window_start, et_minute >= 570 AND et_minute < 960), 'Africa/Lagos') AS regular_open,
            toTimeZone(maxIf(window_start, et_minute >= 570 AND et_minute < 960) + toIntervalMinute(1), 'Africa/Lagos') AS regular_close
        FROM
        (
            SELECT
                window_start,
                toHour(toTimeZone(window_start, 'America/New_York')) * 60
                  + toMinute(toTimeZone(window_start, 'America/New_York')) AS et_minute
            FROM global_markets.delayed_stocks_minute_aggs
            WHERE ticker = 'SPY'
              AND window_start >= toDateTime('2025-10-01 04:00:00')
              AND window_start <  toDateTime('2026-05-01 04:00:00')
        )
        GROUP BY day
        HAVING count() >= 500
           AND countIf(et_minute >= 570 AND et_minute < 960) >= 380
    )
)
GROUP BY month
ORDER BY month
⌘/Ctrl + Enter

Work with this data in your AI assistant

Opens ready to query, with this page's data. Free, no account.