{"slug":"how-to-pick-an-option-strike-price","qid":"dte_drift","label":"The 15 to 25 delta band at three horizons: implied versus realized in the money share","post_title":"How to Pick an Option Strike Price by Delta","post_url":"/blog/how-to-pick-an-option-strike-price#q-dte_drift","columns":["snapshot","implied_pct","call_itm_pct","put_itm_pct","contract_count"],"rows":[{"snapshot":"30 days out","implied_pct":19.7,"call_itm_pct":25,"put_itm_pct":11.6,"contract_count":7075},{"snapshot":"14 days out","implied_pct":19.7,"call_itm_pct":25.9,"put_itm_pct":10.8,"contract_count":12822},{"snapshot":"7 days out","implied_pct":19.7,"call_itm_pct":24.4,"put_itm_pct":12.9,"contract_count":9970}],"shape":"table","sql":"WITH\npx AS\n(\n    SELECT\n        underlying_symbol     AS sym,\n        toDate(date)          AS d,\n        any(underlying_close) AS close_at_expiry\n    FROM global_markets.options_greeks\n    WHERE date >= '2024-01-01'\n      AND date <  '2026-09-01'\n      AND underlying_close > 0\n      AND underlying_symbol IN ('AAPL', 'MSFT', 'NVDA', 'AMZN', 'SPY', 'KO', 'JPM', 'XOM')\n    GROUP BY sym, d\n),\nobs AS\n(\n    SELECT\n        ticker                  AS contract,\n        underlying_symbol       AS sym,\n        if(upper(substring(toString(option_type), 1, 1)) = 'C', 'call', 'put') AS opt,\n        strike_price            AS strike,\n        toDate(expiration_date) AS expiry,\n        abs(delta)              AS abs_delta,\n        toInt32(days_to_expiry) AS dte,\n        multiIf(days_to_expiry BETWEEN 27 AND 33, 30,\n                days_to_expiry BETWEEN 12 AND 16, 14,\n                7)              AS horizon\n    FROM global_markets.options_greeks\n    WHERE date >= '2024-01-01'\n      AND date <  '2026-09-01'\n      AND delta != 0\n      AND volume > 0\n      AND toDate(expiration_date) < '2026-09-01'\n      AND underlying_symbol IN ('AAPL', 'MSFT', 'NVDA', 'AMZN', 'SPY', 'KO', 'JPM', 'XOM')\n      AND (days_to_expiry BETWEEN 5 AND 9\n           OR days_to_expiry BETWEEN 12 AND 16\n           OR days_to_expiry BETWEEN 27 AND 33)\n),\nsnaps AS\n(\n    SELECT\n        contract,\n        horizon,\n        any(sym)                              AS sym,\n        any(opt)                              AS opt,\n        any(strike)                           AS strike,\n        any(expiry)                           AS expiry,\n        argMin(abs_delta, abs(dte - horizon)) AS abs_delta\n    FROM obs\n    GROUP BY contract, horizon\n    HAVING abs_delta >= 0.15 AND abs_delta < 0.25\n),\njoined AS\n(\n    SELECT\n        s.horizon   AS horizon,\n        s.opt       AS opt,\n        s.abs_delta AS abs_delta,\n        if(s.opt = 'call',\n           p.close_at_expiry > s.strike,\n           p.close_at_expiry < s.strike) AS finished_itm\n    FROM snaps AS s\n    INNER JOIN px AS p ON p.sym = s.sym AND p.d = s.expiry\n)\nSELECT\n    concat(toString(horizon), ' days out')                                        AS snapshot,\n    round(100 * avg(abs_delta), 1)                                                AS implied_pct,\n    round(100 * countIf(finished_itm AND opt = 'call') / countIf(opt = 'call'), 1) AS call_itm_pct,\n    round(100 * countIf(finished_itm AND opt = 'put') / countIf(opt = 'put'), 1)   AS put_itm_pct,\n    count()                                                                       AS contract_count\nFROM joined\nGROUP BY horizon\nHAVING countIf(opt = 'call') > 0 AND countIf(opt = 'put') > 0\nORDER BY horizon DESC","computed_at":"2026-09-27T15:21:48.058840+00:00","elapsed":0.007629184}