{"slug":"covered-calls-on-aapl","qid":"delta_ladder","label":"One AAPL call per delta target, about 30 days out, with the covered call math applied","post_title":"Covered Calls on AAPL: A Worked Example","post_url":"/blog/covered-calls-on-aapl#q-delta_ladder","columns":["delta_target","strike","call_delta","premium","premium_per_contract","static_return_pct","if_called_pct","breakeven","days_to_expiry","as_of"],"rows":[{"delta_target":"0.15","strike":"360","call_delta":0.141,"premium":1.53,"premium_per_contract":"153","static_return_pct":0.46,"if_called_pct":8.37,"breakeven":"332.07","days_to_expiry":"28","as_of":"October 2, 2026"},{"delta_target":"0.20","strike":"355","call_delta":0.196,"premium":2.33,"premium_per_contract":"233","static_return_pct":0.7,"if_called_pct":7.11,"breakeven":"331.27","days_to_expiry":"28","as_of":"October 2, 2026"},{"delta_target":"0.25","strike":"350","call_delta":0.264,"premium":3.48,"premium_per_contract":"348","static_return_pct":1.04,"if_called_pct":5.96,"breakeven":"330.12","days_to_expiry":"28","as_of":"October 2, 2026"},{"delta_target":"0.30","strike":"350","call_delta":0.264,"premium":3.48,"premium_per_contract":"348","static_return_pct":1.04,"if_called_pct":5.96,"breakeven":"330.12","days_to_expiry":"28","as_of":"October 2, 2026"},{"delta_target":"0.35","strike":"345","call_delta":0.336,"premium":4.79,"premium_per_contract":"479","static_return_pct":1.44,"if_called_pct":4.85,"breakeven":"328.81","days_to_expiry":"28","as_of":"October 2, 2026"},{"delta_target":"0.40","strike":"340","call_delta":0.424,"premium":6.95,"premium_per_contract":"695","static_return_pct":2.08,"if_called_pct":4,"breakeven":"326.65","days_to_expiry":"28","as_of":"October 2, 2026"}],"shape":"table","sql":"WITH\n    (\n        SELECT max(date)\n        FROM global_markets.options_greeks\n        WHERE underlying_symbol = 'AAPL'\n          AND lower(toString(option_type)) IN ('call', 'c')\n          AND toFloat64(option_close) > 0\n    ) AS snap_date,\n    (\n        SELECT argMin(expiration_date, abs(toInt32(days_to_expiry) - 30))\n        FROM global_markets.options_greeks\n        WHERE underlying_symbol = 'AAPL'\n          AND lower(toString(option_type)) IN ('call', 'c')\n          AND toFloat64(option_close) > 0\n          AND date = snap_date\n          AND toInt32(days_to_expiry) BETWEEN 21 AND 45\n    ) AS write_expiry\nSELECT\n    delta_target,\n    toString(round(argMin(strike_usd, gap), 1)) AS strike,\n    round(argMin(delta_measured, gap), 3) AS call_delta,\n    round(argMin(premium_usd, gap), 2) AS premium,\n    toString(round(argMin(premium_usd, gap) * 100, 0)) AS premium_per_contract,\n    round(argMin(static_pct, gap), 2) AS static_return_pct,\n    round(argMin(called_pct, gap), 2) AS if_called_pct,\n    toString(round(argMin(breakeven_usd, gap), 2)) AS breakeven,\n    toString(argMin(dte, gap)) AS days_to_expiry,\n    argMin(as_of, gap) AS as_of\nFROM\n(\n    SELECT\n        tg.delta_target AS delta_target,\n        abs(toFloat64(g.delta) - toFloat64(tg.delta_target)) AS gap,\n        toFloat64(g.strike_price) AS strike_usd,\n        toFloat64(g.delta) AS delta_measured,\n        toFloat64(g.option_close) AS premium_usd,\n        100 * toFloat64(g.option_close) / toFloat64(g.underlying_close) AS static_pct,\n        100 * (toFloat64(g.option_close) + toFloat64(g.strike_price) - toFloat64(g.underlying_close))\n            / toFloat64(g.underlying_close) AS called_pct,\n        toFloat64(g.underlying_close) - toFloat64(g.option_close) AS breakeven_usd,\n        toInt32(g.days_to_expiry) AS dte,\n        concat(monthName(toDate(g.date)), ' ', toString(toDayOfMonth(toDate(g.date))), ', ', toString(toYear(toDate(g.date)))) AS as_of\n    FROM global_markets.options_greeks AS g\n    CROSS JOIN\n    (\n        SELECT arrayJoin(['0.15', '0.20', '0.25', '0.30', '0.35', '0.40']) AS delta_target\n    ) AS tg\n    WHERE g.underlying_symbol = 'AAPL'\n      AND lower(toString(g.option_type)) IN ('call', 'c')\n      AND g.date = snap_date\n      AND g.expiration_date = write_expiry\n      AND toFloat64(g.option_close) > 0\n      AND toFloat64(g.delta) BETWEEN 0.05 AND 0.60\n)\nGROUP BY delta_target\nORDER BY delta_target","computed_at":"2026-10-05T15:27:21.506413+00:00","elapsed":6.794189167}