{"slug":"spacex-spcx-first-month","qid":"spread_seasoning","label":"The seasoning curve: regular-hours spread by session, per-update and time-weighted","post_title":"SPCX: SpaceX's First Month on the Public Market","post_url":"/blog/spacex-spcx-first-month#q-spread_seasoning","columns":["session","quote_updates","invalid_dropped","med_spread_cents","tw_spread_cents","med_spread_bps","tw_spread_bps","pct_above_tightest_session"],"rows":[{"session":"2026-06-12","quote_updates":2197469,"invalid_dropped":17642,"med_spread_cents":9,"tw_spread_cents":23.5,"med_spread_bps":5.34,"tw_spread_bps":7.64,"pct_above_tightest_session":282},{"session":"2026-06-15","quote_updates":751208,"invalid_dropped":6573,"med_spread_cents":8,"tw_spread_cents":9.8,"med_spread_bps":4.49,"tw_spread_bps":5.48,"pct_above_tightest_session":174},{"session":"2026-06-16","quote_updates":1082316,"invalid_dropped":5002,"med_spread_cents":13,"tw_spread_cents":16,"med_spread_bps":6.09,"tw_spread_bps":7.56,"pct_above_tightest_session":278},{"session":"2026-06-17","quote_updates":909802,"invalid_dropped":2817,"med_spread_cents":14,"tw_spread_cents":17.6,"med_spread_bps":7.1,"tw_spread_bps":8.96,"pct_above_tightest_session":348},{"session":"2026-06-18","quote_updates":1205224,"invalid_dropped":3689,"med_spread_cents":6,"tw_spread_cents":7,"med_spread_bps":3.34,"tw_spread_bps":3.88,"pct_above_tightest_session":94},{"session":"2026-06-22","quote_updates":592445,"invalid_dropped":1141,"med_spread_cents":3,"tw_spread_cents":3.3,"med_spread_bps":1.86,"tw_spread_bps":2,"pct_above_tightest_session":0},{"session":"2026-06-23","quote_updates":582874,"invalid_dropped":1459,"med_spread_cents":5,"tw_spread_cents":5.3,"med_spread_bps":3.03,"tw_spread_bps":3.33,"pct_above_tightest_session":66},{"session":"2026-06-24","quote_updates":819296,"invalid_dropped":1090,"med_spread_cents":10,"tw_spread_cents":11.5,"med_spread_bps":6.32,"tw_spread_bps":7.38,"pct_above_tightest_session":269},{"session":"2026-06-25","quote_updates":724695,"invalid_dropped":540,"med_spread_cents":8,"tw_spread_cents":8.8,"med_spread_bps":5.24,"tw_spread_bps":5.79,"pct_above_tightest_session":190},{"session":"2026-06-26","quote_updates":599789,"invalid_dropped":1723,"med_spread_cents":6,"tw_spread_cents":7.3,"med_spread_bps":3.87,"tw_spread_bps":4.72,"pct_above_tightest_session":136},{"session":"2026-06-29","quote_updates":657982,"invalid_dropped":550,"med_spread_cents":6,"tw_spread_cents":7.4,"med_spread_bps":3.83,"tw_spread_bps":4.66,"pct_above_tightest_session":133},{"session":"2026-06-30","quote_updates":474902,"invalid_dropped":351,"med_spread_cents":6,"tw_spread_cents":7.9,"med_spread_bps":3.54,"tw_spread_bps":4.7,"pct_above_tightest_session":135}],"shape":"series","sql":"SELECT\n    session,\n    quote_updates,\n    invalid_dropped,\n    med_spread_cents,\n    tw_spread_cents,\n    med_spread_bps,\n    tw_spread_bps,\n    round(100 * (tw_spread_bps / min(tw_spread_bps) OVER () - 1), 0) AS pct_above_tightest_session\nFROM (\n    SELECT\n        session,\n        count() AS quote_updates,\n        countIf(NOT valid) AS invalid_dropped,\n        round(quantileDeterministicIf(0.5)(spread, toUInt64(ts_us), valid) * 100, 1) AS med_spread_cents,\n        round(sumIf(spread * dt, valid AND dt > 0) / sumIf(dt, valid AND dt > 0) * 100, 1) AS tw_spread_cents,\n        round(quantileDeterministicIf(0.5)(spread / mid * 10000, toUInt64(ts_us), valid), 2) AS med_spread_bps,\n        round(sumIf(spread / mid * dt, valid AND dt > 0) / sumIf(dt, valid AND dt > 0) * 10000, 2) AS tw_spread_bps\n    FROM (\n        SELECT session, spread, mid, valid, ts_us,\n               greatest(if(next_us = 0, end_us, least(next_us, end_us)) - ts_us, 0) AS dt\n        FROM (\n            SELECT\n                toDate(toTimeZone(sip_timestamp, 'America/New_York')) AS session,\n                toFloat64(ask_price) - toFloat64(bid_price) AS spread,\n                (toFloat64(ask_price) + toFloat64(bid_price)) / 2 AS mid,\n                (bid_price > 0 AND ask_price > 0 AND ask_price >= bid_price) AS valid,\n                toUnixTimestamp64Micro(sip_timestamp) AS ts_us,\n                toUnixTimestamp64Micro(toDateTime64(concat(toString(toDate(toTimeZone(sip_timestamp, 'America/New_York'))), ' 20:00:00'), 6, 'UTC')) AS end_us,\n                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\n            FROM global_markets.cache_stocks_quotes\n            WHERE ticker = 'SPCX'\n              AND sip_timestamp >= toDateTime64('2026-06-12 15:46:00', 9)\n              AND sip_timestamp < toDateTime64('2026-07-01 00:00:00', 9)\n              AND (toHour(sip_timestamp) * 60 + toMinute(sip_timestamp)) BETWEEN 810 AND 1199\n        )\n    )\n    GROUP BY session\n)\nORDER BY session","computed_at":"2026-07-27T00:08:46.381954+00:00","elapsed":0.005203254}