{"slug":"market-recap-2026-06-29","qid":"quote_tape","label":"What it cost to cross the spread: NBBO updates and median quoted width, regular hours","post_title":"Market Recap: June 29, 2026, The Day in Numbers","post_url":"/blog/market-recap-2026-06-29#q-quote_tape","columns":["ticker","nbbo_updates_m","median_spread_bps","open_30min_spread_bps","midday_spread_bps","open_minus_midday_bps","dropped_invalid_quotes"],"rows":[{"ticker":"MU","nbbo_updates_m":0.75,"median_spread_bps":4.6,"open_30min_spread_bps":6.55,"midday_spread_bps":4.11,"open_minus_midday_bps":2.44,"dropped_invalid_quotes":414},{"ticker":"QQQ","nbbo_updates_m":4.42,"median_spread_bps":0.84,"open_30min_spread_bps":0.98,"midday_spread_bps":0.55,"open_minus_midday_bps":0.42,"dropped_invalid_quotes":629},{"ticker":"SPY","nbbo_updates_m":3.98,"median_spread_bps":0.41,"open_30min_spread_bps":0.41,"midday_spread_bps":0.27,"open_minus_midday_bps":0.14,"dropped_invalid_quotes":1544},{"ticker":"WDC","nbbo_updates_m":0.12,"median_spread_bps":8.2,"open_30min_spread_bps":14.33,"midday_spread_bps":7.55,"open_minus_midday_bps":6.78,"dropped_invalid_quotes":43}],"shape":"table","sql":"SELECT\n    ticker,\n    round(count() / 1e6, 2) AS nbbo_updates_m,\n    round(quantileExactIf(0.5)((toFloat64(ask_price) - toFloat64(bid_price)) / ((toFloat64(ask_price) + toFloat64(bid_price)) / 2) * 10000, bid_price > 0 AND ask_price >= bid_price), 2) AS median_spread_bps,\n    round(quantileExactIf(0.5)((toFloat64(ask_price) - toFloat64(bid_price)) / ((toFloat64(ask_price) + toFloat64(bid_price)) / 2) * 10000, bid_price > 0 AND ask_price >= bid_price AND sip_timestamp >= '2026-06-29 13:30:00' AND sip_timestamp < '2026-06-29 14:00:00'), 2) AS open_30min_spread_bps,\n    round(quantileExactIf(0.5)((toFloat64(ask_price) - toFloat64(bid_price)) / ((toFloat64(ask_price) + toFloat64(bid_price)) / 2) * 10000, bid_price > 0 AND ask_price >= bid_price AND sip_timestamp >= '2026-06-29 17:00:00' AND sip_timestamp < '2026-06-29 17:30:00'), 2) AS midday_spread_bps,\n    round(quantileExactIf(0.5)((toFloat64(ask_price) - toFloat64(bid_price)) / ((toFloat64(ask_price) + toFloat64(bid_price)) / 2) * 10000, bid_price > 0 AND ask_price >= bid_price AND sip_timestamp >= '2026-06-29 13:30:00' AND sip_timestamp < '2026-06-29 14:00:00')\n        - quantileExactIf(0.5)((toFloat64(ask_price) - toFloat64(bid_price)) / ((toFloat64(ask_price) + toFloat64(bid_price)) / 2) * 10000, bid_price > 0 AND ask_price >= bid_price AND sip_timestamp >= '2026-06-29 17:00:00' AND sip_timestamp < '2026-06-29 17:30:00'), 2) AS open_minus_midday_bps,\n    countIf(NOT (bid_price > 0 AND ask_price >= bid_price)) AS dropped_invalid_quotes\nFROM global_markets.cache_stocks_quotes\nWHERE ticker IN ('SPY', 'QQQ', 'MU', 'WDC')\n  AND sip_timestamp >= '2026-06-29 13:30:00' AND sip_timestamp < '2026-06-29 20:00:00'\nGROUP BY ticker\nORDER BY ticker","computed_at":"2026-07-26T05:43:08.686436+00:00","elapsed":3.903354522}