{"slug":"reading-an-event-contract-ladder","qid":"digital_ladder","label":"digital_ladder","post_title":"reading-an-event-contract-ladder","post_url":"/blog/reading-an-event-contract-ladder#q-digital_ladder","columns":["threshold","prob_above_pct","bucket_pct"],"rows":[{"threshold":705,"prob_above_pct":93.9,"bucket_pct":-2.1},{"threshold":715,"prob_above_pct":96,"bucket_pct":4.5},{"threshold":725,"prob_above_pct":91.5,"bucket_pct":11.9},{"threshold":735,"prob_above_pct":79.6,"bucket_pct":-0.5},{"threshold":745,"prob_above_pct":80.1,"bucket_pct":19.7},{"threshold":755,"prob_above_pct":60.4,"bucket_pct":16.5},{"threshold":765,"prob_above_pct":43.9,"bucket_pct":17.7},{"threshold":775,"prob_above_pct":26.2,"bucket_pct":14.8},{"threshold":785,"prob_above_pct":11.4,"bucket_pct":5.7},{"threshold":795,"prob_above_pct":5.7,"bucket_pct":4.2},{"threshold":805,"prob_above_pct":1.5,"bucket_pct":1.5}],"shape":"ranking","sql":"WITH\n    pinned AS\n    (\n        SELECT max(date) AS as_of\n        FROM global_markets.options_greeks\n        WHERE underlying_symbol = 'SPY'\n          AND date <= '2026-05-29'\n    ),\n    chain AS\n    (\n        SELECT\n            expiration_date,\n            strike_price,\n            option_close,\n            underlying_close,\n            volume\n        FROM global_markets.options_greeks\n        WHERE underlying_symbol = 'SPY'\n          AND date = (SELECT as_of FROM pinned)\n          AND iv_converged = 1\n          AND volume > 0\n          AND delta > 0.01\n          AND delta < 0.99\n          AND days_to_expiry BETWEEN 20 AND 45\n          AND toDayOfWeek(expiration_date) = 5\n    ),\n    busiest AS\n    (\n        SELECT expiration_date\n        FROM chain\n        GROUP BY expiration_date\n        ORDER BY sum(volume) DESC\n        LIMIT 1\n    ),\n    legs AS\n    (\n        SELECT\n            toUInt32(round(toFloat64(strike_price))) AS strike,\n            round(avg(toFloat64(option_close)), 4)   AS call_price\n        FROM chain\n        WHERE expiration_date = (SELECT expiration_date FROM busiest)\n          AND abs(toFloat64(strike_price) / toFloat64(underlying_close) - 1) < 0.08\n          AND modulo(toUInt32(round(toFloat64(strike_price))), 10) = 0\n        GROUP BY strike\n    ),\n    ranked AS\n    (\n        SELECT\n            strike,\n            call_price,\n            row_number() OVER (ORDER BY strike) AS rn\n        FROM legs\n    ),\n    digitals AS\n    (\n        SELECT\n            (a.strike + b.strike) / 2                                                 AS threshold,\n            100 * greatest((a.call_price - b.call_price) / (b.strike - a.strike), 0)   AS prob_pct,\n            row_number() OVER (ORDER BY a.strike)                                     AS rn\n        FROM ranked AS a\n        INNER JOIN ranked AS b ON b.rn = a.rn + 1\n    )\nSELECT\n    round(d.threshold, 1)                AS threshold,\n    round(d.prob_pct, 1)                 AS prob_above_pct,\n    round(d.prob_pct - n.prob_pct, 1)    AS bucket_pct\nFROM digitals AS d\nLEFT JOIN digitals AS n ON n.rn = d.rn + 1\nORDER BY d.threshold","computed_at":"2026-10-01T15:25:00.056837+00:00","elapsed":0.005831138}