{"slug":"market-recap-2026-h1","qid":"h1_spread_trend","label":"SPY median quoted spread on one labeled sample session per month (second Wednesdays), every NBBO update","post_title":"Market Recap: H1 2026","post_url":"/blog/market-recap-2026-h1#q-h1_spread_trend","columns":["session","med_spread_bps","quote_updates_m","invalid_dropped"],"rows":[{"session":"2026-01-14","med_spread_bps":0.145,"quote_updates_m":10.65,"invalid_dropped":1410},{"session":"2026-02-11","med_spread_bps":0.144,"quote_updates_m":12.39,"invalid_dropped":1365},{"session":"2026-03-11","med_spread_bps":0.295,"quote_updates_m":7.59,"invalid_dropped":5639},{"session":"2026-04-15","med_spread_bps":0.286,"quote_updates_m":2.12,"invalid_dropped":1047},{"session":"2026-05-13","med_spread_bps":0.27,"quote_updates_m":2.64,"invalid_dropped":661},{"session":"2026-06-10","med_spread_bps":0.409,"quote_updates_m":7.48,"invalid_dropped":12382}],"shape":"series","sql":"SELECT toDate(toTimeZone(sip_timestamp, 'America/New_York')) AS session,\n       round(quantileDeterministicIf(0.5)((toFloat64(ask_price) - toFloat64(bid_price)) / ((toFloat64(ask_price) + toFloat64(bid_price)) / 2) * 10000, toUInt64(toUnixTimestamp64Micro(sip_timestamp)), bid_price > 0 AND ask_price >= bid_price), 3) AS med_spread_bps,\n       round(count() / 1e6, 2) AS quote_updates_m,\n       countIf(NOT (bid_price > 0 AND ask_price > 0 AND ask_price >= bid_price)) AS invalid_dropped\nFROM global_markets.cache_stocks_quotes\nWHERE ticker = 'SPY'\n  AND ((sip_timestamp >= toDateTime64('2026-01-14 14:30:00', 9) AND sip_timestamp < toDateTime64('2026-01-14 21:00:00', 9))\n    OR (sip_timestamp >= toDateTime64('2026-02-11 14:30:00', 9) AND sip_timestamp < toDateTime64('2026-02-11 21:00:00', 9))\n    OR (sip_timestamp >= toDateTime64('2026-03-11 13:30:00', 9) AND sip_timestamp < toDateTime64('2026-03-11 20:00:00', 9))\n    OR (sip_timestamp >= toDateTime64('2026-04-15 13:30:00', 9) AND sip_timestamp < toDateTime64('2026-04-15 20:00:00', 9))\n    OR (sip_timestamp >= toDateTime64('2026-05-13 13:30:00', 9) AND sip_timestamp < toDateTime64('2026-05-13 20:00:00', 9))\n    OR (sip_timestamp >= toDateTime64('2026-06-10 13:30:00', 9) AND sip_timestamp < toDateTime64('2026-06-10 20:00:00', 9)))\nGROUP BY session\nORDER BY session ASC","computed_at":"2026-07-26T06:04:22.595123+00:00","elapsed":17.437246962}