STRASMORE/EXPLORE 2,170 QUERIES

The seasoning curve: regular-hours spread by session, per-update and time-weighted

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-07-27, from SPCX: SpaceX's First Month on the Public Market.

as of series 12×8read in context →
The seasoning curve: regular-hours spread by session, per-update and time-weighted — 12 rows by 8 columns, computed from US exchange, SIP and OPRA data.
sessionquote_updatesinvalid_droppedmed_spread_centstw_spread_centsmed_spread_bpstw_spread_bpspct_above_tightest_session
2026-06-12219746917642923.55.347.64282
2026-06-15751208657389.84.495.48174
2026-06-161082316500213166.097.56278
2026-06-1790980228171417.67.18.96348
2026-06-1812052243689673.343.8894
2026-06-22592445114133.31.8620
2026-06-23582874145955.33.033.3366
2026-06-2481929610901011.56.327.38269
2026-06-2572469554088.85.245.79190
2026-06-26599789172367.33.874.72136
2026-06-2965798255067.43.834.66133
2026-06-3047490235167.93.544.7135
Rows × columns
12 × 8
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 The seasoning curve: regular-hours spread by session, per-update and time-weighted, derived from the stored result.
ColumnTypeRangeNotes
session date 2026-06-12 to 2026-06-30
quote_updates number 474,902 to 2,197,469
invalid_dropped number 351 to 17,642
med_spread_cents number 3 to 14
tw_spread_cents number 3.3 to 23.5
med_spread_bps number 1.86 to 7.1
tw_spread_bps number 2 to 8.96
pct_above_tightest_session number 0 to 348 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
SELECT
    session,
    quote_updates,
    invalid_dropped,
    med_spread_cents,
    tw_spread_cents,
    med_spread_bps,
    tw_spread_bps,
    round(100 * (tw_spread_bps / min(tw_spread_bps) OVER () - 1), 0) AS pct_above_tightest_session
FROM (
    SELECT
        session,
        count() AS quote_updates,
        countIf(NOT valid) AS invalid_dropped,
        round(quantileDeterministicIf(0.5)(spread, toUInt64(ts_us), valid) * 100, 1) AS med_spread_cents,
        round(sumIf(spread * dt, valid AND dt > 0) / sumIf(dt, valid AND dt > 0) * 100, 1) AS tw_spread_cents,
        round(quantileDeterministicIf(0.5)(spread / mid * 10000, toUInt64(ts_us), valid), 2) AS med_spread_bps,
        round(sumIf(spread / mid * dt, valid AND dt > 0) / sumIf(dt, valid AND dt > 0) * 10000, 2) AS tw_spread_bps
    FROM (
        SELECT session, spread, mid, valid, ts_us,
               greatest(if(next_us = 0, end_us, least(next_us, end_us)) - ts_us, 0) AS dt
        FROM (
            SELECT
                toDate(toTimeZone(sip_timestamp, 'America/New_York')) AS session,
                toFloat64(ask_price) - toFloat64(bid_price) AS spread,
                (toFloat64(ask_price) + toFloat64(bid_price)) / 2 AS mid,
                (bid_price > 0 AND ask_price > 0 AND ask_price >= bid_price) AS valid,
                toUnixTimestamp64Micro(sip_timestamp) AS ts_us,
                toUnixTimestamp64Micro(toDateTime64(concat(toString(toDate(toTimeZone(sip_timestamp, 'America/New_York'))), ' 20:00:00'), 6, 'UTC')) AS end_us,
                leadInFrame(toUnixTimestamp64Micro(sip_timestamp)) OVER (PARTITION BY toDate(toTimeZone(sip_timestamp, 'America/New_York')) ORDER BY sip_timestamp ASC, sequence_number ASC ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) AS next_us
            FROM global_markets.cache_stocks_quotes
            WHERE ticker = 'SPCX'
              AND sip_timestamp >= toDateTime64('2026-06-12 15:46:00', 9)
              AND sip_timestamp < toDateTime64('2026-07-01 00:00:00', 9)
              AND (toHour(sip_timestamp) * 60 + toMinute(sip_timestamp)) BETWEEN 810 AND 1199
        )
    )
    GROUP BY session
)
ORDER BY session

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 analysisSPCX: SpaceX's First Month on the Public Market
Symbol-reuse receipt: thirteen months of SPCX minute bars, May 2026 is absent entirely series 12×5 FINRA off-exchange short volume by session: marked-short share and reported volume series 12×4 The sessions: regular-hours close, close-over-close change, full-day volume series 12×5 Options session by session: contracts, the call/put split, and the put/call ratio series 10×7 What it cost to trade the busiest contract: NBBO spread over its three sessions series 3×6 Where the contracts landed: call and put volume by strike bucket table 19×5 See all 2,170 queries →