{"slug":"market-making-in-prediction-markets","qid":"parity_check","label":"parity_check","post_title":"market-making-in-prediction-markets","post_url":"/blog/market-making-in-prediction-markets#q-parity_check","columns":["strike_vs_spot","call_delta","put_delta_abs","delta_sum","contract_count"],"rows":[{"strike_vs_spot":"-5%","call_delta":0.836,"put_delta_abs":0.176,"delta_sum":1.012,"contract_count":1391},{"strike_vs_spot":"-4%","call_delta":0.808,"put_delta_abs":0.206,"delta_sum":1.014,"contract_count":2864},{"strike_vs_spot":"-3%","call_delta":0.758,"put_delta_abs":0.254,"delta_sum":1.011,"contract_count":3087},{"strike_vs_spot":"-2%","call_delta":0.699,"put_delta_abs":0.312,"delta_sum":1.011,"contract_count":3387},{"strike_vs_spot":"-1%","call_delta":0.623,"put_delta_abs":0.382,"delta_sum":1.005,"contract_count":3510},{"strike_vs_spot":"+0%","call_delta":0.537,"put_delta_abs":0.463,"delta_sum":1.001,"contract_count":3678},{"strike_vs_spot":"+1%","call_delta":0.442,"put_delta_abs":0.552,"delta_sum":0.994,"contract_count":3282},{"strike_vs_spot":"+2%","call_delta":0.343,"put_delta_abs":0.643,"delta_sum":0.986,"contract_count":2739},{"strike_vs_spot":"+3%","call_delta":0.245,"put_delta_abs":0.725,"delta_sum":0.97,"contract_count":2263},{"strike_vs_spot":"+4%","call_delta":0.165,"put_delta_abs":0.793,"delta_sum":0.958,"contract_count":1919},{"strike_vs_spot":"+5%","call_delta":0.115,"put_delta_abs":0.822,"delta_sum":0.937,"contract_count":817}],"shape":"table","sql":"SELECT\n    concat(if(strike_pct >= 0, '+', ''), toString(strike_pct), '%') AS strike_vs_spot,\n    round(avgIf(d, is_call), 3)                                     AS call_delta,\n    round(-avgIf(d, NOT is_call), 3)                                AS put_delta_abs,\n    round(avgIf(d, is_call) - avgIf(d, NOT is_call), 3)             AS delta_sum,\n    count()                                                         AS contract_count\nFROM\n(\n    SELECT\n        toFloat64(delta)                    AS d,\n        startsWith(lower(option_type), 'c') AS is_call,\n        toInt32(round(100 * (toFloat64(strike_price) / toFloat64(underlying_close) - 1))) AS strike_pct\n    FROM global_markets.options_greeks\n    WHERE underlying_symbol = 'SPY'\n      AND date >= '2026-04-01'\n      AND date <= '2026-06-30'\n      AND iv_converged = 1\n      AND volume > 0\n      AND days_to_expiry >= 20\n      AND days_to_expiry <= 45\n      AND abs(toFloat64(strike_price) / toFloat64(underlying_close) - 1) <= 0.05\n)\nGROUP BY strike_pct\nHAVING countIf(is_call) > 0 AND countIf(NOT is_call) > 0\nORDER BY strike_pct","computed_at":"2026-09-24T15:00:12.163664+00:00","elapsed":0.004010272}