{"slug":"what-time-do-options-start-trading","qid":"session_clock","label":"session_clock","post_title":"what-time-do-options-start-trading","post_url":"/blog/what-time-do-options-start-trading#q-session_clock","columns":["et_time","contracts_millions","share_pct"],"rows":[{"et_time":"07:00","contracts_millions":0,"share_pct":0},{"et_time":"07:30","contracts_millions":0,"share_pct":0},{"et_time":"08:00","contracts_millions":0,"share_pct":0},{"et_time":"08:30","contracts_millions":0,"share_pct":0},{"et_time":"09:00","contracts_millions":0,"share_pct":0},{"et_time":"09:30","contracts_millions":33.43,"share_pct":13.32},{"et_time":"10:00","contracts_millions":28.54,"share_pct":11.37},{"et_time":"10:30","contracts_millions":24.56,"share_pct":9.79},{"et_time":"11:00","contracts_millions":21.7,"share_pct":8.65},{"et_time":"11:30","contracts_millions":18.75,"share_pct":7.47},{"et_time":"12:00","contracts_millions":15.53,"share_pct":6.19},{"et_time":"12:30","contracts_millions":13.82,"share_pct":5.5},{"et_time":"13:00","contracts_millions":14.16,"share_pct":5.64},{"et_time":"13:30","contracts_millions":13.33,"share_pct":5.31},{"et_time":"14:00","contracts_millions":14.58,"share_pct":5.81},{"et_time":"14:30","contracts_millions":13.15,"share_pct":5.24},{"et_time":"15:00","contracts_millions":15.47,"share_pct":6.16},{"et_time":"15:30","contracts_millions":21.67,"share_pct":8.63},{"et_time":"16:00","contracts_millions":2.26,"share_pct":0.9},{"et_time":"16:30","contracts_millions":0.04,"share_pct":0.02},{"et_time":"17:00","contracts_millions":0,"share_pct":0}],"shape":"series","sql":"WITH\n    tape AS\n    (\n        SELECT\n            intDiv(\n                toHour(toTimeZone(window_start, 'America/New_York')) * 60\n              + toMinute(toTimeZone(window_start, 'America/New_York')), 30) * 30 AS bucket_minute,\n            sum(volume)                                                          AS contracts\n        FROM global_markets.options_minute_aggs\n        WHERE window_start >= today() - 12\n          AND window_start <  today() - 2\n        GROUP BY bucket_minute\n    ),\n    shares AS\n    (\n        SELECT\n            bucket_minute,\n            contracts,\n            round(100 * contracts / sum(contracts) OVER (), 2) AS share_pct\n        FROM tape\n    )\nSELECT\n    formatDateTime(toDateTime('2026-01-01 00:00:00') + grid.bucket_minute * 60, '%H:%i') AS et_time,\n    round(ifNull(s.contracts, 0) / 1000000, 2)                                           AS contracts_millions,\n    ifNull(s.share_pct, 0)                                                               AS share_pct\nFROM\n(\n    SELECT 420 + 30 * arrayJoin(range(21)) AS bucket_minute\n) AS grid\nLEFT JOIN shares AS s ON s.bucket_minute = grid.bucket_minute\nORDER BY grid.bucket_minute","computed_at":"2026-08-26T14:34:47.704377+00:00","elapsed":1.793818667}