{"slug":"how-much-does-it-cost-to-trade-options","qid":"expiry_spread_shape","label":"SPY options median spread by expiration date, near-the-money strikes only","post_title":"How Much Does It Cost to Trade Options?","post_url":"/blog/how-much-does-it-cost-to-trade-options#q-expiry_spread_shape","columns":["expiry_code","quote_updates_millions","median_spread_bps","median_width_cents"],"rows":[{"expiry_code":"260702","quote_updates_millions":16.8,"median_spread_bps":113.64,"median_width_cents":2},{"expiry_code":"260706","quote_updates_millions":11,"median_spread_bps":104.71,"median_width_cents":3},{"expiry_code":"260707","quote_updates_millions":10.8,"median_spread_bps":144.58,"median_width_cents":3},{"expiry_code":"260708","quote_updates_millions":12.7,"median_spread_bps":130.72,"median_width_cents":3},{"expiry_code":"260709","quote_updates_millions":12.3,"median_spread_bps":118.34,"median_width_cents":3},{"expiry_code":"260710","quote_updates_millions":14.7,"median_spread_bps":106.19,"median_width_cents":3},{"expiry_code":"260713","quote_updates_millions":13.4,"median_spread_bps":96.15,"median_width_cents":3},{"expiry_code":"260714","quote_updates_millions":13.2,"median_spread_bps":82.99,"median_width_cents":3},{"expiry_code":"260715","quote_updates_millions":12.4,"median_spread_bps":77.22,"median_width_cents":3},{"expiry_code":"260716","quote_updates_millions":2.3,"median_spread_bps":80.32,"median_width_cents":4},{"expiry_code":"260717","quote_updates_millions":14.4,"median_spread_bps":71.51,"median_width_cents":3},{"expiry_code":"260724","quote_updates_millions":13,"median_spread_bps":65.49,"median_width_cents":4},{"expiry_code":"260731","quote_updates_millions":12.5,"median_spread_bps":54.27,"median_width_cents":4},{"expiry_code":"260807","quote_updates_millions":7.1,"median_spread_bps":50.25,"median_width_cents":5},{"expiry_code":"260814","quote_updates_millions":5.3,"median_spread_bps":47.01,"median_width_cents":6},{"expiry_code":"260821","quote_updates_millions":11.3,"median_spread_bps":45.18,"median_width_cents":6},{"expiry_code":"260831","quote_updates_millions":10.2,"median_spread_bps":43.96,"median_width_cents":6},{"expiry_code":"260918","quote_updates_millions":12.2,"median_spread_bps":30.07,"median_width_cents":5},{"expiry_code":"260930","quote_updates_millions":7.1,"median_spread_bps":35.4,"median_width_cents":7},{"expiry_code":"261016","quote_updates_millions":2.6,"median_spread_bps":34.12,"median_width_cents":7},{"expiry_code":"261030","quote_updates_millions":3.6,"median_spread_bps":39.56,"median_width_cents":9},{"expiry_code":"261120","quote_updates_millions":1.9,"median_spread_bps":35.89,"median_width_cents":10},{"expiry_code":"261130","quote_updates_millions":4.8,"median_spread_bps":39.31,"median_width_cents":10},{"expiry_code":"261218","quote_updates_millions":2.3,"median_spread_bps":30.49,"median_width_cents":9},{"expiry_code":"261231","quote_updates_millions":1.7,"median_spread_bps":37.16,"median_width_cents":11}],"shape":"ranking","sql":"WITH opts AS (\n    SELECT\n        toFloat64(ask_price) - toFloat64(bid_price) AS width,\n        (toFloat64(ask_price) + toFloat64(bid_price)) / 2 AS mid,\n        substring(ticker, -15, 6) AS expiry_code,\n        toUInt32OrZero(substring(ticker, -8)) / 1000 AS strike,\n        cityHash64(ticker, sip_timestamp) AS det\n    FROM global_markets.cache_options_quotes\n    WHERE sip_timestamp >= '2026-07-02 13:30:00' AND sip_timestamp < '2026-07-02 20:00:00'\n      AND ticker >= 'O:SPY26' AND ticker < 'O:SPY27'\n      AND bid_price > 0 AND ask_price > 0 AND ask_price > bid_price\n      AND strike BETWEEN 730 AND 760\n)\nSELECT\n    expiry_code,\n    round(count() / 1e6, 1) AS quote_updates_millions,\n    round(quantileDeterministic(0.5)(width / mid * 10000, det), 2) AS median_spread_bps,\n    round(quantileDeterministic(0.5)(width * 100, det), 2) AS median_width_cents\nFROM opts\nGROUP BY expiry_code\nHAVING count() >= 1000000\nORDER BY expiry_code ASC","computed_at":"2026-08-14T14:21:37.016417+00:00","elapsed":0.002971361}