{"slug":"when-a-spread-expires-between-the-strikes","qid":"between_strikes_by_name","label":"Where the close finished on a narrow call vertical set at 3:00 p.m. ET","post_title":"When a Spread Expires Between the Strikes","post_url":"/blog/when-a-spread-expires-between-the-strikes#q-between_strikes_by_name","columns":["symbol","expiration_count","both_legs_worthless_pct","between_strikes_pct","both_legs_itm_pct"],"rows":[{"symbol":"TSLA","expiration_count":181,"both_legs_worthless_pct":85.6,"between_strikes_pct":14.4,"both_legs_itm_pct":0},{"symbol":"AMD","expiration_count":181,"both_legs_worthless_pct":90.6,"between_strikes_pct":9.4,"both_legs_itm_pct":0},{"symbol":"NVDA","expiration_count":181,"both_legs_worthless_pct":93.9,"between_strikes_pct":6.1,"both_legs_itm_pct":0},{"symbol":"MSFT","expiration_count":181,"both_legs_worthless_pct":96.1,"between_strikes_pct":3.9,"both_legs_itm_pct":0},{"symbol":"AAPL","expiration_count":181,"both_legs_worthless_pct":97.2,"between_strikes_pct":2.8,"both_legs_itm_pct":0},{"symbol":"SPY","expiration_count":181,"both_legs_worthless_pct":98.9,"between_strikes_pct":1.1,"both_legs_itm_pct":0}],"shape":"table","sql":"WITH bars AS (\n    SELECT\n        ticker                                                      AS symbol,\n        toDate(toTimeZone(window_start, 'America/New_York'))        AS session_date,\n        toHour(toTimeZone(window_start, 'America/New_York')) * 60\n          + toMinute(toTimeZone(window_start, 'America/New_York'))  AS et_minute,\n        toFloat64(close)                                            AS px\n    FROM global_markets.delayed_stocks_minute_aggs\n    WHERE ticker IN ('SPY', 'AAPL', 'MSFT', 'NVDA', 'AMD', 'TSLA')\n      AND window_start >= '2023-01-01 00:00:00'\n      AND window_start <  '2026-09-01 00:00:00'\n),\nday_marks AS (\n    SELECT\n        symbol,\n        session_date,\n        anyIf(px, et_minute = 900) AS px_3pm,\n        argMax(px, et_minute)      AS px_close\n    FROM bars\n    WHERE et_minute >= 570\n      AND et_minute <= 959\n    GROUP BY symbol, session_date\n    HAVING px_3pm > 0\n       AND px_close > 0\n       AND max(et_minute) >= 955\n),\nverticals AS (\n    SELECT\n        symbol,\n        px_close,\n        ceil(px_3pm * 1.005) AS short_strike,\n        ceil(px_3pm * 1.030) AS long_strike\n    FROM day_marks\n    WHERE toDayOfWeek(session_date) = 5\n)\nSELECT\n    symbol,\n    count()                                                                                      AS expiration_count,\n    round(100 * countIf(px_close <= short_strike) / count(), 1)                                  AS both_legs_worthless_pct,\n    round(100 * countIf(px_close > short_strike AND px_close < long_strike) / count(), 1)         AS between_strikes_pct,\n    round(100 * countIf(px_close >= long_strike) / count(), 1)                                    AS both_legs_itm_pct\nFROM verticals\nWHERE long_strike > short_strike\nGROUP BY symbol\nORDER BY between_strikes_pct DESC","computed_at":"2026-09-27T15:36:10.905924+00:00","elapsed":0.043904053}