{"slug":"asx-options-expiry-and-settlement","qid":"open_gap_curve","label":"open_gap_curve","post_title":"asx-options-expiry-and-settlement","post_url":"/blog/asx-options-expiry-and-settlement#q-open_gap_curve","columns":["et_time","avg_gap_bps"],"rows":[{"et_time":"09:30","avg_gap_bps":5.7},{"et_time":"09:31","avg_gap_bps":7.4},{"et_time":"09:32","avg_gap_bps":8.2},{"et_time":"09:33","avg_gap_bps":9.4},{"et_time":"09:34","avg_gap_bps":10.2},{"et_time":"09:35","avg_gap_bps":11.1},{"et_time":"09:36","avg_gap_bps":11.5},{"et_time":"09:37","avg_gap_bps":12.1},{"et_time":"09:38","avg_gap_bps":12.3},{"et_time":"09:39","avg_gap_bps":12.9},{"et_time":"09:40","avg_gap_bps":12.5},{"et_time":"09:41","avg_gap_bps":13.3},{"et_time":"09:42","avg_gap_bps":14.1},{"et_time":"09:43","avg_gap_bps":14.3},{"et_time":"09:44","avg_gap_bps":14.9},{"et_time":"09:45","avg_gap_bps":15.5},{"et_time":"09:46","avg_gap_bps":16},{"et_time":"09:47","avg_gap_bps":16.5},{"et_time":"09:48","avg_gap_bps":16.5},{"et_time":"09:49","avg_gap_bps":16.8},{"et_time":"09:50","avg_gap_bps":17.6},{"et_time":"09:51","avg_gap_bps":17.9},{"et_time":"09:52","avg_gap_bps":17.9},{"et_time":"09:53","avg_gap_bps":18.4},{"et_time":"09:54","avg_gap_bps":18.5},{"et_time":"09:55","avg_gap_bps":18.8},{"et_time":"09:56","avg_gap_bps":19.3},{"et_time":"09:57","avg_gap_bps":20},{"et_time":"09:58","avg_gap_bps":21.1},{"et_time":"09:59","avg_gap_bps":21.5},{"et_time":"10:00","avg_gap_bps":21.3}],"shape":"series","sql":"WITH session_open AS (\n    SELECT\n        toDate(toTimeZone(window_start, 'America/New_York')) AS session_day,\n        argMin(toFloat64(open), window_start)                AS first_print\n    FROM global_markets.delayed_stocks_minute_aggs\n    WHERE ticker = 'SPY'\n      AND window_start >= today() - 300\n      AND window_start <  today() - 2\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\n    GROUP BY session_day\n)\nSELECT\n    formatDateTime(toTimeZone(m.window_start, 'America/New_York'), '%H:%i') AS et_time,\n    round(avg(abs(toFloat64(m.close) / s.first_print - 1) * 10000), 1)      AS avg_gap_bps\nFROM global_markets.delayed_stocks_minute_aggs AS m\nINNER JOIN session_open AS s\n    ON toDate(toTimeZone(m.window_start, 'America/New_York')) = s.session_day\nWHERE m.ticker = 'SPY'\n  AND m.window_start >= today() - 300\n  AND m.window_start <  today() - 2\n  AND (toHour(toTimeZone(m.window_start, 'America/New_York')) * 60\n       + toMinute(toTimeZone(m.window_start, 'America/New_York'))) BETWEEN 570 AND 600\n  AND s.first_print > 0\nGROUP BY et_time\nHAVING count() > 0\nORDER BY et_time","computed_at":"2026-09-30T15:30:16.500258+00:00","elapsed":3.611786829}