{"slug":"options-approval-levels-explained","qid":"spread_ladder","label":"Every $5 call spread on the same AAPL expiration: risk against maximum gain","post_title":"Options Approval Levels: What Each Tier Allows","post_url":"/blog/options-approval-levels-explained#q-spread_ladder","columns":["spread_label","max_loss_per_share","max_gain_per_share"],"rows":[{"spread_label":"$310 / $315","max_loss_per_share":3,"max_gain_per_share":2},{"spread_label":"$315 / $320","max_loss_per_share":2.66,"max_gain_per_share":2.34},{"spread_label":"$320 / $325","max_loss_per_share":1.99,"max_gain_per_share":3.01},{"spread_label":"$325 / $330","max_loss_per_share":1.6,"max_gain_per_share":3.4},{"spread_label":"$330 / $335","max_loss_per_share":1.25,"max_gain_per_share":3.75},{"spread_label":"$335 / $340","max_loss_per_share":0.91,"max_gain_per_share":4.09},{"spread_label":"$340 / $345","max_loss_per_share":0.65,"max_gain_per_share":4.35}],"shape":"ranking","sql":"WITH chain AS\n(\n    SELECT\n        expiration_date,\n        toFloat64(strike_price)          AS strike,\n        toFloat64(strike_price) + 5      AS next_strike,\n        avg(toFloat64(option_close))     AS premium,\n        avg(toFloat64(underlying_close)) AS spot,\n        sum(volume)                      AS contracts\n    FROM global_markets.options_greeks\n    WHERE underlying_symbol = 'AAPL'\n      AND lower(option_type) IN ('call', 'c')\n      AND date >= today() - 30\n      AND date = (\n              SELECT max(date)\n              FROM global_markets.options_greeks\n              WHERE underlying_symbol = 'AAPL'\n                AND date >= today() - 30\n          )\n      AND days_to_expiry BETWEEN 20 AND 45\n      AND iv_converged = 1\n      AND volume > 0\n    GROUP BY expiration_date, strike, next_strike\n),\nbusiest AS\n(\n    SELECT expiration_date\n    FROM chain\n    GROUP BY expiration_date\n    ORDER BY sum(contracts) DESC\n    LIMIT 1\n)\nSELECT\n    concat('$', toString(round(lo.strike, 2)), ' / $', toString(round(hi.strike, 2))) AS spread_label,\n    round(lo.premium - hi.premium, 2)                                                 AS max_loss_per_share,\n    round(5 - (lo.premium - hi.premium), 2)                                           AS max_gain_per_share\nFROM chain AS lo\nINNER JOIN chain AS hi\n    ON lo.expiration_date = hi.expiration_date\n   AND lo.next_strike = hi.strike\nWHERE lo.expiration_date IN (SELECT expiration_date FROM busiest)\n  AND lo.strike >= lo.spot * 0.97\n  AND lo.strike <= lo.spot * 1.08\nORDER BY lo.strike","computed_at":"2026-08-22T04:17:52.255799+00:00","elapsed":0.109695177}