{"slug":"event-contract-prices-as-probabilities","qid":"yes_no_ladder","label":"Yes and No probabilities across one SPY chain: call side, put side, and the pair total","post_title":"Event Contract Prices as Probabilities","post_url":"/blog/event-contract-prices-as-probabilities#q-yes_no_ladder","columns":["strike_vs_spot","yes_prob_pct","no_prob_pct","pair_total_pct","strikes"],"rows":[{"strike_vs_spot":"-8% vs spot","yes_prob_pct":91.6,"no_prob_pct":7.8,"pair_total_pct":99.5,"strikes":4},{"strike_vs_spot":"-6% vs spot","yes_prob_pct":91.2,"no_prob_pct":11.5,"pair_total_pct":102.7,"strikes":5},{"strike_vs_spot":"-4% vs spot","yes_prob_pct":80.6,"no_prob_pct":18.3,"pair_total_pct":98.9,"strikes":13},{"strike_vs_spot":"-2% vs spot","yes_prob_pct":68.8,"no_prob_pct":29.8,"pair_total_pct":98.6,"strikes":13},{"strike_vs_spot":"0% vs spot","yes_prob_pct":54.1,"no_prob_pct":45.7,"pair_total_pct":99.8,"strikes":15},{"strike_vs_spot":"+2% vs spot","yes_prob_pct":36.2,"no_prob_pct":63.3,"pair_total_pct":99.5,"strikes":11},{"strike_vs_spot":"+4% vs spot","yes_prob_pct":18.4,"no_prob_pct":81.9,"pair_total_pct":100.3,"strikes":7},{"strike_vs_spot":"+6% vs spot","yes_prob_pct":3.6,"no_prob_pct":82.5,"pair_total_pct":86.2,"strikes":1}],"shape":"table","sql":"WITH chain AS (\n    SELECT strike_price,\n           toFloat64(any(underlying_close)) AS spot,\n           avgIf(delta, delta > 0) AS call_delta,\n           avgIf(-delta, delta < 0) AS put_delta_abs,\n           countIf(delta > 0) AS calls,\n           countIf(delta < 0) AS puts\n    FROM global_markets.options_greeks\n    WHERE underlying_symbol = 'SPY'\n      AND date = toDate('2026-06-30')\n      AND expiration_date = toDate('2026-07-31')\n      AND iv_converged = 1\n      AND volume > 0\n    GROUP BY strike_price\n    HAVING calls > 0 AND puts > 0\n),\nbanded AS (\n    SELECT toInt32(round(100 * (toFloat64(strike_price) / spot - 1) / 2) * 2) AS band,\n           call_delta,\n           put_delta_abs\n    FROM chain\n)\nSELECT concat(if(band > 0, '+', ''), toString(band), '% vs spot') AS strike_vs_spot,\n       round(100 * avg(call_delta), 1) AS yes_prob_pct,\n       round(100 * avg(put_delta_abs), 1) AS no_prob_pct,\n       round(100 * avg(call_delta + put_delta_abs), 1) AS pair_total_pct,\n       count() AS strikes\nFROM banded\nWHERE abs(band) <= 8\nGROUP BY band\nORDER BY band","computed_at":"2026-08-03T10:23:47.791061+00:00","elapsed":0.003914929}