{"slug":"what-breaks-an-options-backtest","qid":"vega_haircut","label":"How much of a modelled credit survives one volatility point of vega","post_title":"What Breaks an Options Backtest","post_url":"/blog/what-breaks-an-options-backtest#q-vega_haircut","columns":["dte_band","contract_count","avg_credit","haircut_pct","credit_retained_pct"],"rows":[{"dte_band":"01-07 days to expiry","contract_count":383995,"avg_credit":7.41,"haircut_pct":5.9,"credit_retained_pct":94.1},{"dte_band":"08-14 days to expiry","contract_count":460241,"avg_credit":7.27,"haircut_pct":8.1,"credit_retained_pct":91.9},{"dte_band":"15-21 days to expiry","contract_count":253028,"avg_credit":8.83,"haircut_pct":7,"credit_retained_pct":93},{"dte_band":"22-30 days to expiry","contract_count":315747,"avg_credit":10,"haircut_pct":7.3,"credit_retained_pct":92.7},{"dte_band":"31-45 days to expiry","contract_count":398604,"avg_credit":11.59,"haircut_pct":7.2,"credit_retained_pct":92.8},{"dte_band":"46-60 days to expiry","contract_count":151323,"avg_credit":13.96,"haircut_pct":7,"credit_retained_pct":93}],"shape":"table","sql":"SELECT\n    multiIf(days_to_expiry <=  7, '01-07 days to expiry',\n            days_to_expiry <= 14, '08-14 days to expiry',\n            days_to_expiry <= 21, '15-21 days to expiry',\n            days_to_expiry <= 30, '22-30 days to expiry',\n            days_to_expiry <= 45, '31-45 days to expiry',\n                                  '46-60 days to expiry')      AS dte_band,\n    count()                                                     AS contract_count,\n    round(avg(toFloat64(option_close)), 2)                      AS avg_credit,\n    round(100 * avg(toFloat64(vega) / toFloat64(option_close)), 1)       AS haircut_pct,\n    round(100 - 100 * avg(toFloat64(vega) / toFloat64(option_close)), 1) AS credit_retained_pct\nFROM global_markets.options_greeks\nWHERE underlying_symbol IN ('SPY', 'AAPL', 'MSFT', 'NVDA', 'KO')\n  AND date >= '2021-08-01'\n  AND iv_converged = 1\n  AND volume > 0\n  AND days_to_expiry BETWEEN 1 AND 60\n  AND toFloat64(option_close) >= 0.50\n  AND toFloat64(vega) > 0\n  AND toFloat64(underlying_close) > 0\n  AND abs(toFloat64(strike_price) / toFloat64(underlying_close) - 1) < 0.05\nGROUP BY dte_band\nORDER BY dte_band","computed_at":"2026-10-07T15:18:24.815015+00:00","elapsed":0.003458973}