{"slug":"why-spreads-widen-at-the-open","qid":"spread_clock","label":"Median spread each half hour, as a multiple of each name's tightest bucket (regular hours, ET)","post_title":"Why Are Spreads Wider at the Open? Real Data","post_url":"/blog/why-spreads-widen-at-the-open#q-spread_clock","columns":["et_time","spy_x","aapl_x","etsy_x"],"rows":[{"et_time":"09:30","spy_x":1.01,"aapl_x":2.36,"etsy_x":4.98},{"et_time":"10:00","spy_x":1.01,"aapl_x":1.98,"etsy_x":3.4},{"et_time":"10:30","spy_x":1.01,"aapl_x":1.67,"etsy_x":2.81},{"et_time":"11:00","spy_x":1.01,"aapl_x":1.5,"etsy_x":2.01},{"et_time":"11:30","spy_x":1.01,"aapl_x":1.34,"etsy_x":2.02},{"et_time":"12:00","spy_x":1,"aapl_x":1.33,"etsy_x":1.72},{"et_time":"12:30","spy_x":1,"aapl_x":1.33,"etsy_x":1.52},{"et_time":"13:00","spy_x":1,"aapl_x":1.13,"etsy_x":1.46},{"et_time":"13:30","spy_x":1,"aapl_x":1.11,"etsy_x":1.51},{"et_time":"14:00","spy_x":1.01,"aapl_x":1.02,"etsy_x":1.47},{"et_time":"14:30","spy_x":1,"aapl_x":1.12,"etsy_x":1.27},{"et_time":"15:00","spy_x":1,"aapl_x":1.01,"etsy_x":1.26},{"et_time":"15:30","spy_x":1,"aapl_x":1,"etsy_x":1}],"shape":"series","sql":"SELECT et_time,\n       round(anyIf(rel, ticker = 'SPY'), 2) AS spy_x,\n       round(anyIf(rel, ticker = 'AAPL'), 2) AS aapl_x,\n       round(anyIf(rel, ticker = 'ETSY'), 2) AS etsy_x\nFROM (\n    SELECT ticker,\n           et_time,\n           median_bps / min(median_bps) OVER (PARTITION BY ticker) AS rel\n    FROM (\n        SELECT ticker,\n               formatDateTime(toStartOfInterval(toTimeZone(sip_timestamp, 'America/New_York'), INTERVAL 30 MINUTE), '%H:%i') AS et_time,\n               quantileExact(0.5)(toFloat64(ask_price - bid_price) / ((toFloat64(ask_price) + toFloat64(bid_price)) / 2) * 10000) AS median_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          AND bid_price > 0\n          AND ask_price > bid_price\n        GROUP BY ticker, et_time\n    )\n)\nGROUP BY et_time\nORDER BY et_time","computed_at":"2026-08-08T04:49:22.476479+00:00","elapsed":37.482160353}