{"slug":"pin-risk-at-options-expiration","qid":"strike_gaps","label":"How far the Friday close lands from the nearest whole dollar","post_title":"Pin Risk at Options Expiration Explained","post_url":"/blog/pin-risk-at-options-expiration#q-strike_gaps","columns":["gap_to_nearest_round_number","expiration_day_count","share_of_days_pct"],"rows":[{"gap_to_nearest_round_number":"0c to 5c","expiration_day_count":52,"share_of_days_pct":11.1},{"gap_to_nearest_round_number":"5c to 10c","expiration_day_count":46,"share_of_days_pct":9.8},{"gap_to_nearest_round_number":"10c to 15c","expiration_day_count":44,"share_of_days_pct":9.4},{"gap_to_nearest_round_number":"15c to 20c","expiration_day_count":66,"share_of_days_pct":14.1},{"gap_to_nearest_round_number":"20c to 25c","expiration_day_count":37,"share_of_days_pct":7.9},{"gap_to_nearest_round_number":"25c to 30c","expiration_day_count":46,"share_of_days_pct":9.8},{"gap_to_nearest_round_number":"30c to 35c","expiration_day_count":44,"share_of_days_pct":9.4},{"gap_to_nearest_round_number":"35c to 40c","expiration_day_count":43,"share_of_days_pct":9.2},{"gap_to_nearest_round_number":"40c to 45c","expiration_day_count":43,"share_of_days_pct":9.2},{"gap_to_nearest_round_number":"45c to 50c","expiration_day_count":47,"share_of_days_pct":10}],"shape":"ranking","sql":"WITH friday_closes AS\n(\n    SELECT\n        ticker,\n        date                                                     AS friday_session,\n        round(abs(toFloat64(close) - round(toFloat64(close))), 2) AS gap_to_round_number\n    FROM global_markets.stocks_daily_aggs\n    WHERE ticker IN ('AAPL', 'MSFT', 'NVDA', 'SPY', 'KO', 'AMD')\n      AND toDayOfWeek(date) = 5\n      AND date >= '2025-01-01'\n      AND date <  '2026-08-01'\n)\nSELECT\n    concat(toString(band_floor_cents), 'c to ', toString(band_floor_cents + 5), 'c') AS gap_to_nearest_round_number,\n    count()                                                                         AS expiration_day_count,\n    round(100 * count() / (SELECT count() FROM friday_closes), 1)                   AS share_of_days_pct\nFROM\n(\n    SELECT least(toUInt16(floor(gap_to_round_number * 20) * 5), 45) AS band_floor_cents\n    FROM friday_closes\n)\nGROUP BY band_floor_cents\nORDER BY band_floor_cents","computed_at":"2026-08-09T14:47:59.205496+00:00","elapsed":0.004390525}