When a blog post tells you "sell 30-delta puts at 45 DTE with a 50% profit take," you have no way to know whether that rule is near-optimal, arbitrary, or picked because it happens to look good in the author's sample. The only cure for cherry-picking is not to pick — compute the full surface and show where the edge actually lives.
So I did.
For every trading day from 2018-04-16 to 2026-04-02, for every SPY expiry with a usable SVI fit, for every short-strike delta in [0.05, 0.40] and every width in {1, 2, 3, 5, 10, 20}, I priced the theoretical credit spread under Black-Scholes with surface-consistent IVs, then joined each row with the actual SPY close at expiry.
18.3M rows. 1,698 trading days. 1,525 unique expiries. ~48 seconds to rebuild from raw SVI parameters and daily forwards.
Here's what fell out.
The headline numbers
| Metric | Value |
|---|---|
| Average theoretical EV (flat-vol BSM) | -$0.48 |
| Average realized P&L (joined with spot at expiry) | +$0.58 |
| Realized edge (realized − theoretical) | +$1.06 |
| Realized winrate | 92.9% |
| Max-loss rate | 5.6% |
Every bucket -EV by theory. Every year +P&L by reality. The gap is the variance risk premium plus SPY's structural drift — both invisible to flat-vol pricing.
Finding 1 — Every theoretical bucket is negative EV
Across all 18,307,256 rows, average theoretical EV is -$0.484. There is no slice of the (DTE, delta, width) grid where theoretical EV is positive. Under the flat-vol lens, put credit spreads are net losers in expectation.
Flat-vol pricing is a trap. If it's your only model, the conclusion is clear and wrong: "don't sell put spreads." Flat-vol doesn't price VRP or SPY drift — it only prices the skew the market is literally quoting.
Finding 2 — Realized P&L is positive almost everywhere
Average realized P&L across the full matrix: +$0.577. The skew premium was paid fully, and then some.
Year-by-year breakdown, restricted to a single strategy footprint (width = $5, short delta 0.20-0.30):
| Year | n | Theo EV | Realized P&L | Edge | Winrate | Max-loss | Avg IV |
|---|---|---|---|---|---|---|---|
| 2023 | 119,986 | -$0.43 | +$0.97 | +$1.39 | 97.8% | 1.2% | 21.1 |
| 2024 | 124,447 | -$0.47 | +$0.86 | +$1.33 | 97.5% | 1.8% | 18.7 |
| 2026 Q1 | 29,114 | -$0.57 | +$0.86 | +$1.43 | 97.0% | 1.9% | 25.2 |
| 2020 | 131,318 | -$0.51 | +$0.84 | +$1.35 | 95.6% | 3.7% | 32.2 |
| 2025 | 117,429 | -$0.54 | +$0.77 | +$1.31 | 96.3% | 3.1% | 21.8 |
| 2019 | 70,470 | -$0.40 | +$0.50 | +$0.91 | 89.8% | 8.3% | 19.7 |
| 2018 (Apr-Dec) | 46,479 | -$0.41 | +$0.28 | +$0.69 | 84.9% | 11.5% | 21.2 |
| 2021 | 129,952 | -$0.62 | +$0.21 | +$0.83 | 85.7% | 12.2% | 25.5 |
| 2022 | 108,386 | -$0.52 | +$0.02 | +$0.54 | 78.5% | 18.2% | 28.5 |
Every year profitable. Every year's theoretical EV negative. The only year close to breakeven: 2022 — the one true bear year in the sample.
Finding 3 — Capital efficiency flips the verdict on short DTE
Absolute P&L per spread goes up with DTE. Annualized return on capital does not. For short delta 0.20-0.30, width $5:
| DTE bucket | Avg credit | Realized P&L | Per-trade ROC | Annualized ROC | Winrate |
|---|---|---|---|---|---|
| 0-7 | $0.68 | +$0.042 | 0.97% | 75.3% | 83.1% |
| 8-21 | $0.74 | +$0.069 | 1.62% | 41.0% | 84.2% |
| 22-45 | $0.76 | +$0.121 | 2.86% | 32.1% | 85.9% |
| 46-90 | $0.79 | +$0.255 | 6.05% | 32.7% | 88.5% |
| 91+ | $1.06 | +$0.752 | 19.1% | 17.7% | 93.6% |
Four caveats that matter:
- Fill costs eat the 0-7 DTE number alive. Mid-quote model prices + real bid/ask on 0DTE SPY = most of that $0.04 edge gone. Upper bound, not strategy.
- 91+ DTE locks capital for 394 days on average. +19% per-trade only annualizes to ~18%.
- 22-90 DTE is the comfortable zone. ~32-33% annualized, winrates in the high 80s.
- No profit takes, no stops, held to expiry. Overlays change everything.
Finding 4 — Risk-adjusted: the best Sharpe isn't where you'd guess
IID Sharpe from the per-trade P&L distribution, 15 representative profiles (one trade per day, closest to target delta):
| Profile | Ann Sharpe | Ann ROC | Winrate | Max-loss |
|---|---|---|---|---|
| 45 DTE 40Δ $10 wide | 0.49 | 67.6% | 79.5% | 12.9% |
| 45 DTE 40Δ $5 wide | 0.48 | 74.8% | 78.2% | 17.3% |
| 45 DTE 30Δ $5 wide | 0.47 | 57.2% | 85.2% | 12.1% |
| 180 DTE 25Δ $5 wide | 0.46 | 22.8% | 91.0% | 8.7% |
| 45 DTE 25Δ $5 wide | 0.42 | 44.3% | 87.9% | 9.5% |
| 7 DTE 40Δ $5 wide | 0.39 | 142.5% | 74.1% | 16.1% |
| 30 DTE 40Δ $5 wide | 0.35 | 65.9% | 76.9% | 20.0% |
What Sharpe 0.48 actually means: SPY buy-and-hold over 2018-2026 runs Sharpe ~0.55-0.70. Typical long-only equity strategies: 0.4-0.8. The best put-spread profile here is competitive with passive SPY, not a free lunch. The honest use case is diversification — theta/VRP returns only weakly correlated to daily SPY path, so a small allocation lowers total-portfolio vol.
Finding 5 — IV regime counter-intuitively favors crisis
Bucketing the 22-45 DTE, 20-30Δ, $5-wide set by short-strike IV:
| IV regime | Theo EV | Realized P&L | Edge | Winrate | Max-loss | n |
|---|---|---|---|---|---|---|
| crisis (30+) | -$0.42 | +$0.54 | +$0.95 | 92.8% | 6.1% | 15,555 |
| high (22-30) | -$0.42 | +$0.16 | +$0.59 | 86.3% | 10.6% | 26,486 |
| elevated (16-22) | -$0.42 | +$0.05 | +$0.47 | 85.1% | 11.5% | 30,132 |
| normal (12-16) | -$0.38 | -$0.10 | +$0.28 | 81.7% | 13.1% | 17,848 |
| calm (<12 IV) | -$0.37 | -$0.66 | -$0.30 | 71.3% | 22.6% | 1,676 |
Calm is the worst regime. Crisis is the best. The VRP in one table — highest edge at the point of maximum perceived danger.
Caveats that should be loud
A clean dashboard is seductive. Several assumptions push the real-world numbers down from the model numbers:
- No transaction costs. Short-DTE in particular: average $0.11 credit at 7 DTE 40Δ, realistic slippage budget $0.10-0.20. The 142% annualized ROC is a model ceiling, not a target.
- Theoretical prices are mid-quote proxies. Reconstructed from SVI + BS. Executable credit closer to bid.
- No liquidity filter. Thin strikes where SVI fit ≠ strikes that fill at modeled price.
- No stops, no profit takes. Held to expiry.
- IID Sharpe is an upper bound. Losses cluster in bear regimes (clearly 2022). Real drawdowns > IID math implies.
- Single underlying, structural upward drift. Single-name, earnings-driven underlyings look much worse.
- 8 years is short. One real bear year. Confidence intervals on "crisis wins" are wide.
None invalidate the shape; all push the magnitude down. The theoretical-vs-realized gap is real; the exact basis-point edge is smaller than this model suggests.
How I reproduced this
Three ingredients: historical SVI surface parameters, daily forwards, SPY spot at expiry. All three via the flashalpha Python package — same surface fits the live product uses, walk-forward by default, no look-ahead.
pip install flashalpha
from flashalpha import Client
import pandas as pd
fa = Client(api_key="...")
surfaces = fa.historical.surface("SPY",
start="2018-04-16", end="2026-04-02")
# surfaces is a DataFrame: ts, expiry, dte, forward,
# svi_a, svi_b, svi_rho, svi_m, svi_sigma
# From there: reconstruct IV at every strike, price BS puts,
# enumerate spread permutations, join with spot at expiry.
TL;DR
Over 8 years and 18M simulated SPY put credit spreads, the market priced skew premium into every bucket. Flat-vol BSM theoretical EV averaged -$0.48. Actual realized P&L, joined with real spot at expiry, averaged +$0.58. The +$1.06 gap is the variance risk premium plus SPY's drift, paid out in cash. Put selling on SPY is renting the market's fear. The rent has been paid every year in the sample.
Originally published at flashalpha.com. The full version has yearly stress-test breakdowns, delta-by-delta tables at 30-DTE, the full Sharpe math, and a $100k portfolio scaling example with 2022 drawdown stress.
Top comments (0)