{"slug":"how-risky-is-options-trading","qid":"weekend_gaps","label":"Weekend gaps: prior close to next open, six widely held names, August 2024 to July 2026","post_title":"How Risky Is Options Trading? The Mechanics","post_url":"/blog/how-risky-is-options-trading#q-weekend_gaps","columns":["ticker","gap_count","median_weekend_gap_pct","p95_weekend_gap_pct","largest_weekend_gap_pct"],"rows":[{"ticker":"TSLA","gap_count":104,"median_weekend_gap_pct":1.44,"p95_weekend_gap_pct":6.46,"largest_weekend_gap_pct":10.81},{"ticker":"NVDA","gap_count":104,"median_weekend_gap_pct":1.17,"p95_weekend_gap_pct":4.29,"largest_weekend_gap_pct":14.19},{"ticker":"AAPL","gap_count":104,"median_weekend_gap_pct":0.44,"p95_weekend_gap_pct":2.58,"largest_weekend_gap_pct":9.42},{"ticker":"MSFT","gap_count":104,"median_weekend_gap_pct":0.51,"p95_weekend_gap_pct":1.9,"largest_weekend_gap_pct":4.73},{"ticker":"SPY","gap_count":104,"median_weekend_gap_pct":0.38,"p95_weekend_gap_pct":1.51,"largest_weekend_gap_pct":4},{"ticker":"KO","gap_count":104,"median_weekend_gap_pct":0.24,"p95_weekend_gap_pct":0.98,"largest_weekend_gap_pct":5.3}],"shape":"table","sql":"WITH sessions AS (\n    SELECT ticker,\n           toDate(toTimeZone(window_start, 'America/New_York')) AS session_date,\n           argMin(toFloat64(open), window_start) AS session_open,\n           argMax(toFloat64(close), window_start) AS session_close\n    FROM global_markets.delayed_stocks_minute_aggs\n    WHERE ticker IN ('AAPL', 'MSFT', 'NVDA', 'TSLA', 'KO', 'SPY')\n      AND window_start >= toDateTime('2024-08-01 00:00:00')\n      AND window_start < toDateTime('2026-08-01 00:00:00')\n      AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60\n           + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959\n    GROUP BY ticker, session_date\n),\nlinked AS (\n    SELECT ticker,\n           session_date,\n           session_open,\n           any(session_close) OVER (PARTITION BY ticker ORDER BY session_date\n                                    ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) AS prev_close,\n           any(session_date) OVER (PARTITION BY ticker ORDER BY session_date\n                                   ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) AS prev_date\n    FROM sessions\n),\ngaps AS (\n    SELECT ticker,\n           session_date,\n           abs(session_open / prev_close - 1) * 100 AS gap_pct\n    FROM linked\n    WHERE prev_close > 0\n      AND dateDiff('day', prev_date, session_date) >= 3\n)\nSELECT ticker,\n       count() AS gap_count,\n       round(quantileDeterministic(0.5)(gap_pct, cityHash64(session_date)), 2) AS median_weekend_gap_pct,\n       round(quantileDeterministic(0.95)(gap_pct, cityHash64(session_date)), 2) AS p95_weekend_gap_pct,\n       round(max(gap_pct), 2) AS largest_weekend_gap_pct\nFROM gaps\nGROUP BY ticker\nORDER BY p95_weekend_gap_pct DESC","computed_at":"2026-08-01T09:06:08.712852+00:00","elapsed":0.003720401}