{"slug":"why-spreads-widen-at-the-open","qid":"open_vs_midday","label":"The opening premium priced: median and 90th-percentile spread at the open (9:30-10:00 ET) vs. midday (12:00-14:00 ET)","post_title":"Why Are Spreads Wider at the Open? Real Data","post_url":"/blog/why-spreads-widen-at-the-open#q-open_vs_midday","columns":["ticker","valid_updates_m","open30_cents","midday_cents","open30_bps","midday_bps","open_vs_midday_x","open30_p90_cents","midday_p90_cents","open30_p90_bps","p90_x","dropped_onesided_locked_crossed"],"rows":[{"ticker":"SPY","valid_updates_m":29.47,"open30_cents":2,"midday_cents":2,"open30_bps":0.27,"midday_bps":0.27,"open_vs_midday_x":1,"open30_p90_cents":3,"midday_p90_cents":3,"open30_p90_bps":0.41,"p90_x":1,"dropped_onesided_locked_crossed":"163496"},{"ticker":"AAPL","valid_updates_m":12.55,"open30_cents":7,"midday_cents":4,"open30_bps":2.09,"midday_bps":1.17,"open_vs_midday_x":1.79,"open30_p90_cents":12,"midday_p90_cents":5,"open30_p90_bps":3.9,"p90_x":2.34,"dropped_onesided_locked_crossed":"36079"},{"ticker":"ETSY","valid_updates_m":0.2,"open30_cents":20,"midday_cents":6,"open30_bps":23.8,"midday_bps":7.23,"open_vs_midday_x":3.29,"open30_p90_cents":50,"midday_p90_cents":11,"open30_p90_bps":59.92,"p90_x":4.69,"dropped_onesided_locked_crossed":"141"}],"shape":"table","sql":"SELECT ticker,\n       round(countIf(isNotNull(spread_cents)) / 1e6, 2) AS valid_updates_m,\n       round(quantileExactIf(0.5)(spread_cents, clock_min BETWEEN 810 AND 839), 2) AS open30_cents,\n       round(quantileExactIf(0.5)(spread_cents, clock_min BETWEEN 960 AND 1079), 2) AS midday_cents,\n       round(quantileExactIf(0.5)(spread_bps, clock_min BETWEEN 810 AND 839), 2) AS open30_bps,\n       round(quantileExactIf(0.5)(spread_bps, clock_min BETWEEN 960 AND 1079), 2) AS midday_bps,\n       round(quantileExactIf(0.5)(spread_bps, clock_min BETWEEN 810 AND 839)\n             / quantileExactIf(0.5)(spread_bps, clock_min BETWEEN 960 AND 1079), 2) AS open_vs_midday_x,\n       round(quantileExactIf(0.9)(spread_cents, clock_min BETWEEN 810 AND 839), 2) AS open30_p90_cents,\n       round(quantileExactIf(0.9)(spread_cents, clock_min BETWEEN 960 AND 1079), 2) AS midday_p90_cents,\n       round(quantileExactIf(0.9)(spread_bps, clock_min BETWEEN 810 AND 839), 2) AS open30_p90_bps,\n       round(quantileExactIf(0.9)(spread_bps, clock_min BETWEEN 810 AND 839)\n             / quantileExactIf(0.9)(spread_bps, clock_min BETWEEN 960 AND 1079), 2) AS p90_x,\n       toString(countIf(isNull(spread_cents))) AS dropped_onesided_locked_crossed\nFROM (\n    SELECT ticker,\n           toHour(sip_timestamp) * 60 + toMinute(sip_timestamp) AS clock_min,\n           if(bid_price > 0 AND ask_price > bid_price, toFloat64(ask_price - bid_price) * 100, NULL) AS spread_cents,\n           if(bid_price > 0 AND ask_price > bid_price, toFloat64(ask_price - bid_price) / ((toFloat64(ask_price) + toFloat64(bid_price)) / 2) * 10000, NULL) AS spread_bps\n    FROM global_markets.cache_stocks_quotes\n    WHERE ticker IN ('SPY', 'AAPL', 'ETSY')\n      AND sip_timestamp >= toDateTime(today() - 14)\n      AND sip_timestamp < toDateTime(today() - 3)\n      AND (toHour(sip_timestamp) * 60 + toMinute(sip_timestamp)) BETWEEN 810 AND 1199\n)\nGROUP BY ticker\nORDER BY indexOf(['SPY', 'AAPL', 'ETSY'], ticker)","computed_at":"2026-08-08T04:50:40.115962+00:00","elapsed":39.080944557}