{"slug":"locked-and-crossed-markets","qid":"tape_census","label":"Whole-tape census: locked, crossed, and one-sided records across every NBBO update of the session","post_title":"Locked and Crossed Markets, Explained With Data","post_url":"/blog/locked-and-crossed-markets#q-tape_census","columns":["session_date","updates_m","locked_m","crossed_k","locked_per_crossed","locked_or_crossed_per_10k","one_sided_per_10k"],"rows":[{"session_date":"2026-08-18","updates_m":406,"locked_m":7.41,"crossed_k":43.8,"locked_per_crossed":169,"locked_or_crossed_per_10k":183.4,"one_sided_per_10k":3.2}],"shape":"scalar","sql":"WITH (\n    SELECT max(toDate(toTimeZone(window_start, 'America/New_York')))\n    FROM global_markets.delayed_stocks_minute_aggs\n    WHERE ticker = 'SPY' AND window_start < toDateTime(today() - 3)\n) AS census_day\nSELECT\n    formatDateTime(census_day, '%Y-%m-%d') AS session_date,\n    round(count() / 1e6, 0) AS updates_m,\n    round(countIf(bid_price = ask_price AND bid_price > 0) / 1e6, 2) AS locked_m,\n    round(countIf(bid_price > ask_price AND ask_price > 0) / 1e3, 1) AS crossed_k,\n    round(countIf(bid_price = ask_price AND bid_price > 0) / toFloat64(greatest(countIf(bid_price > ask_price AND ask_price > 0), 1)), 0) AS locked_per_crossed,\n    round(countIf(bid_price >= ask_price AND ask_price > 0 AND bid_price > 0) / toFloat64(count()) * 1e4, 1) AS locked_or_crossed_per_10k,\n    round(countIf(bid_price <= 0 OR ask_price <= 0) / toFloat64(count()) * 1e4, 1) AS one_sided_per_10k\nFROM global_markets.cache_stocks_quotes\nWHERE sip_timestamp >= toDateTime(census_day)\n  AND sip_timestamp < toDateTime(census_day + 1)","computed_at":"2026-08-22T04:15:23.842284+00:00","elapsed":59.032832997}