{"slug":"futures-price-limits-and-price-banding","qid":"velocity_clock","label":"Typical and tail one-minute moves in the S&P 500 ETF, by half hour of the session","post_title":"Futures Price Limits and Price Banding","post_url":"/blog/futures-price-limits-and-price-banding#q-velocity_clock","columns":["et_time","median_minute_move_pct","p99_minute_move_pct"],"rows":[{"et_time":"09:30","median_minute_move_pct":0.025,"p99_minute_move_pct":0.171},{"et_time":"10:00","median_minute_move_pct":0.022,"p99_minute_move_pct":0.158},{"et_time":"10:30","median_minute_move_pct":0.019,"p99_minute_move_pct":0.138},{"et_time":"11:00","median_minute_move_pct":0.016,"p99_minute_move_pct":0.123},{"et_time":"11:30","median_minute_move_pct":0.015,"p99_minute_move_pct":0.113},{"et_time":"12:00","median_minute_move_pct":0.014,"p99_minute_move_pct":0.116},{"et_time":"12:30","median_minute_move_pct":0.014,"p99_minute_move_pct":0.114},{"et_time":"13:00","median_minute_move_pct":0.014,"p99_minute_move_pct":0.102},{"et_time":"13:30","median_minute_move_pct":0.013,"p99_minute_move_pct":0.121},{"et_time":"14:00","median_minute_move_pct":0.013,"p99_minute_move_pct":0.114},{"et_time":"14:30","median_minute_move_pct":0.013,"p99_minute_move_pct":0.113},{"et_time":"15:00","median_minute_move_pct":0.013,"p99_minute_move_pct":0.114},{"et_time":"15:30","median_minute_move_pct":0.017,"p99_minute_move_pct":0.137}],"shape":"series","sql":"SELECT\n    formatDateTime(toStartOfInterval(toTimeZone(window_start, 'America/New_York'), INTERVAL 30 MINUTE), '%H:%i') AS et_time,\n    round(100 * quantileDeterministic(0.5)(abs(toFloat64(close) / toFloat64(open) - 1),\n                                           toUInt64(toUnixTimestamp(window_start))), 3) AS median_minute_move_pct,\n    round(100 * quantileDeterministic(0.99)(abs(toFloat64(close) / toFloat64(open) - 1),\n                                            toUInt64(toUnixTimestamp(window_start))), 3) AS p99_minute_move_pct\nFROM global_markets.delayed_stocks_minute_aggs\nWHERE ticker = 'SPY'\n  AND window_start >= '2024-01-01 00:00:00'\n  AND window_start <  '2026-10-01 00:00:00'\n  AND volume > 0\n  AND open > 0\n  AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60\n       + toMinute(toTimeZone(window_start, 'America/New_York'))) >= 570\n  AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60\n       + toMinute(toTimeZone(window_start, 'America/New_York'))) < 960\nGROUP BY et_time\nORDER BY et_time ASC","computed_at":"2026-10-09T16:48:18.471237+00:00","elapsed":0.001685076}