{"slug":"market-order-vs-limit-order","qid":"calm_vs_fast","label":"SPY on a calm day vs. a fast day: session range, per-minute movement, and quoted spread","post_title":"Market Order vs Limit Order, Measured","post_url":"/blog/market-order-vs-limit-order#q-calm_vs_fast","columns":["session","session_range_pct","avg_minute_range_cents","worst_minute_range_cents","median_spread_cents"],"rows":[{"session":"2026-07-08","session_range_pct":0.9,"avg_minute_range_cents":37.2,"worst_minute_range_cents":133,"median_spread_cents":2},{"session":"2025-04-09","session_range_pct":10.8,"avg_minute_range_cents":156.4,"worst_minute_range_cents":1638,"median_spread_cents":5}],"shape":"series","sql":"WITH quotes AS (\n    SELECT toDate(toTimeZone(sip_timestamp, 'America/New_York')) AS d,\n           round(quantileDeterministicIf(0.5)(toFloat64(ask_price - bid_price) * 100, cityHash64(ticker, sip_timestamp), bid_price > 0 AND ask_price > bid_price), 1) AS median_spread_cents\n    FROM global_markets.cache_stocks_quotes\n    WHERE ticker = 'SPY'\n      AND ((sip_timestamp >= '2026-07-08 04:00:00' AND sip_timestamp < '2026-07-09 04:00:00')\n        OR (sip_timestamp >= '2025-04-09 04:00:00' AND sip_timestamp < '2025-04-10 04:00:00'))\n      AND (toHour(toTimeZone(sip_timestamp, 'America/New_York')) * 60 + toMinute(toTimeZone(sip_timestamp, 'America/New_York'))) BETWEEN 570 AND 959\n    GROUP BY d\n    HAVING countIf(bid_price > 0 AND ask_price > bid_price) > 0\n),\nbars AS (\n    SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS d,\n           round(avg(toFloat64(high - low) * 100), 1) AS avg_minute_range_cents,\n           round(max(toFloat64(high - low) * 100), 0) AS worst_minute_range_cents,\n           round((max(high) - min(low)) / argMin(toFloat64(open), window_start) * 100, 1) AS session_range_pct\n    FROM global_markets.delayed_stocks_minute_aggs\n    WHERE ticker = 'SPY'\n      AND ((window_start >= '2026-07-08 04:00:00' AND window_start < '2026-07-09 04:00:00')\n        OR (window_start >= '2025-04-09 04:00:00' AND window_start < '2025-04-10 04:00:00'))\n      AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959\n    GROUP BY d\n)\nSELECT formatDateTime(quotes.d, '%Y-%m-%d') AS session,\n       bars.session_range_pct,\n       bars.avg_minute_range_cents,\n       bars.worst_minute_range_cents,\n       quotes.median_spread_cents\nFROM quotes INNER JOIN bars ON quotes.d = bars.d\nORDER BY quotes.d DESC","computed_at":"2026-07-26T05:41:13.873532+00:00","elapsed":2.054689222}