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.
| session | quote_updates | invalid_dropped | med_spread_cents | tw_spread_cents | med_spread_bps | tw_spread_bps | pct_above_tightest_session |
|---|---|---|---|---|---|---|---|
| 2026-06-12 | 2197469 | 17642 | 9 | 23.5 | 5.34 | 7.64 | 282 |
| 2026-06-15 | 751208 | 6573 | 8 | 9.8 | 4.49 | 5.48 | 174 |
| 2026-06-16 | 1082316 | 5002 | 13 | 16 | 6.09 | 7.56 | 278 |
| 2026-06-17 | 909802 | 2817 | 14 | 17.6 | 7.1 | 8.96 | 348 |
| 2026-06-18 | 1205224 | 3689 | 6 | 7 | 3.34 | 3.88 | 94 |
| 2026-06-22 | 592445 | 1141 | 3 | 3.3 | 1.86 | 2 | 0 |
| 2026-06-23 | 582874 | 1459 | 5 | 5.3 | 3.03 | 3.33 | 66 |
| 2026-06-24 | 819296 | 1090 | 10 | 11.5 | 6.32 | 7.38 | 269 |
| 2026-06-25 | 724695 | 540 | 8 | 8.8 | 5.24 | 5.79 | 190 |
| 2026-06-26 | 599789 | 1723 | 6 | 7.3 | 3.87 | 4.72 | 136 |
| 2026-06-29 | 657982 | 550 | 6 | 7.4 | 3.83 | 4.66 | 133 |
| 2026-06-30 | 474902 | 351 | 6 | 7.9 | 3.54 | 4.7 | 135 |
- 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
What each column holds
| Column | Type | Range | Notes |
|---|---|---|---|
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 →