- Home
- Strategies
- Calendar Spread
- Backtest
Strategy deep-dive
Calendar spread backtest: SPY put calendars, filtered by the curve
Five years of ATM put calendars on SPY — sell the ~30-day put, buy the ~60-day put at the same strike. The whole result turns on one entry condition: was the front month's implied vol richer than the back month's?
Simulated data for display. Illustrative narrative — not a verified live backtest. Build real backtests on the strategy builder.
On this page
How the test was run
- Underlying
- SPY only. No earnings, deep monthly and weekly chains, and a term structure that is quoted tightly enough that a four-legged round trip does not eat the edge.
- Structure
- Long ATM put calendar — sell the front-month put at roughly 30 DTE, buy the back-month put at roughly 60 DTE, same strike. Paid for as a net debit.
- Entry filter
- The ratio of 30-day ATM implied vol to 60-day ATM implied vol had to be above 1.02 — the front month richer than the back. Scanned monthly; the condition cleared 19 times in 60 months.
- Sizing
- One contract at a time, average net debit $1.20 ($120 per contract). No adds, no rolls.
- Exit
- Close the whole spread five trading days before front-month expiration — out before expiration week. Two alternative exits are compared further down.
- Period
- January 2021 – December 2025, 60 monthly observations.
The payoff math, stated honestly
Most strategy pages hand you two formulas and move on. A calendar only has one of them, and pretending otherwise is where people get hurt.
You pay a net debit, D. The long back-month option costs more than the short front-month option brings in, so the position is opened for a debit. One contract costs D × 100 out of pocket.
Max loss = D × 100. Both legs are the same strike and the same type, so the spread can never be worth less than zero and you can never owe more than you paid. At D = $1.20 the maximum loss is $120 per contract, full stop. That floor is approached in both tails: far above the strike both puts expire worthless, and far below it both puts are worth roughly their shared intrinsic value, so the difference between them collapses toward zero either way.
Max profit has no closed form. There is no formula to quote. At front-month expiration the short leg is settled but the back-month option you own is still alive, and its value on that date depends on where the underlying sits relative to the strike, what back-month implied vol is at that moment, and how much time the back leg has left. Profit peaks with the underlying near the strike — that is where the leg you sold expires worthless while the leg you own keeps the most time value — but the height of the peak is unknowable in advance and can only be estimated by modelling the back-month price.
Breakevens are model-dependent too. There are two of them, one either side of the strike, and they move with back-month implied vol. They are not arithmetic off the debit the way a vertical's breakeven is.
The practical consequence: you can size a calendar precisely, because the downside is a known number the moment you pay for it. You cannot set a profit target as a fraction of "max profit", because that quantity does not exist until the day the front leg expires.
What the tent actually looks like
One modelled instance: SPY, $600 strike, $1.20 net debit, valued at front-month expiration with roughly 30 days still on the back leg.
The shape is the whole strategy. Profit peaks with SPY pinned near $600, crosses back through zero at roughly $586 and $614, and flattens toward the −$120 floor as price runs away in either direction. The band is about 4.7% wide — that is the entire zone in which this trade works.
The peak in this instance is about +$112. The best trade in the sample below made +$149 on the same $1.20 debit. Same structure, same strike distance, different back-month implied vol on the day the front leg expired. That gap is exactly why no max-profit formula exists.
The entry filter is the strategy
Control group first: take the calendar on the first trading day of every month for 60 months, ignoring the curve entirely. Then bucket those 60 forced entries by the 30-day / 60-day ATM IV ratio at the moment of entry.
| Front / back IV ratio at entry | Months | Win rate | Avg return on debit | Net P&L |
|---|---|---|---|---|
| Below 0.98 — front cheaper | 26 | 38% | -20% | -$624 |
| 0.98–1.02 — flat | 15 | 50% | -3% | -$54 |
| 1.02–1.08 — front richer ★ | 13 | 62% | +21% | +$328 |
| Above 1.08 — steeply inverted | 6 | 67% | +14% | +$101 |
Across all 60 forced entries the program is a net loser: -$249, 49% win rate, -3% on the debit. Two thirds of those months sat in contango or flat, where you are buying the richer leg and selling the cheaper one and the curve is quietly working against you the whole time.
Keep only the 19 months where the ratio cleared 1.02 and the same mechanical trade produces +$429, a 63% win rate, and +19% on the debit. Nothing about the structure changed. The filter is not an optimisation on top of the strategy — on this sample it is the strategy.
Finding the condition across a universe
SPY is one symbol and the condition cleared 19 times in five years. That is a patient program. The same relationship — front-month implied vol sitting above back-month — is a screenable property of every optionable name, and it is what ApexVol's Calendar Scanner ranks the universe by: front IV over back IV, with the inverted names surfacing as the long-calendar candidates and the contango names filtered out.
Two cautions the illustrative results reinforce. First, a ratio built from constant-maturity buckets is a shortlist, not a trade — re-check the real expirations you can actually fill before pricing anything. Second, a ratio above 1.02 with an earnings date sitting between the two expirations is a different trade entirely: the front leg carries an event premium that has to be modelled rather than harvested, and those cases were excluded here by using SPY.
To price a specific pair by hand, the calendar spread calculator models front and back month values, and the IV calculator gives the IV context for the underlying before you commit a debit.
Model the front and back month values, check the IV context, and see the debit you would actually be risking.
Open the calendar calculatorExit rules: get out before expiration week
Same 19 entries, same strikes, three different exits:
| Exit rule | Win rate | Avg return on debit | Worst trade | Net P&L |
|---|---|---|---|---|
| Close 5 days before front expiry ★ | 63% | +19% | -$104 | +$429 |
| Hold into front expiration week | 58% | +9% | -$120 (full debit) | +$205 |
| Close at +25% / -50% of debit | 74% | +12% | -$62 | +$274 |
Holding into expiration week halves the return and is the only exit that produced full −$120 losses. In the final days the short front-month put's gamma is at its largest, so a one-percent move in SPY moves the spread more than a five-percent move did a month earlier. You are no longer trading the term structure; you are trading the last few hours of pin risk.
The bracketed +25% / −50% exit posts the highest win rate but the lowest expectancy of the two profitable rules — it caps the trades where the back leg stayed rich, which are the ones that pay for everything else. Same trade-off you see on the butterfly backtest: capping a bounded-loss, unbounded-shape payoff hurts more than it helps.
Year by year
| Year | Qualifying trades | W – L | Net P&L | Character |
|---|---|---|---|---|
| 2021 | 3 | 2 – 1 | +$74 | Curve in contango almost all year. Few entries. |
| 2022 | 6 | 4 – 2 | +$168 | Best year. Repeated inversions; the filter fired often. |
| 2023 | 3 | 2 – 1 | +$61 | Vol grinding lower; curve re-steepened. |
| 2024 | 4 | 3 – 1 | +$122 | Two entries off the summer vol spike inversion. |
| 2025 | 3 | 1 – 2 | +$4 | Flat curve; the few entries were marginal and trended. |
2022 is the counterintuitive result. A long calendar is a neutral, pin-seeking structure, and 2022 was the least pin-like year in the sample — yet it was the best, because an inverted curve is the condition the filter is looking for and stress is when inversions happen. The trade is not a bet on calm; it is a bet on the front month being priced richer than the back and the underlying not travelling far before the front leg dies.
Anatomy of the worst trade
Opened an ATM SPY put calendar for a $1.18 debit with the 30-day / 60-day IV ratio at 1.06 — a clean qualifying signal. Eleven days later a macro headline pushed SPY roughly 5.5% below the strike and it kept going. The short front-month put went deep in the money, the long back-month put went deep in the money alongside it, and the two values converged: the spread was worth $0.14 when it was closed out at the five-day mark, a −$104 loss on a $118 debit.
Back-month implied vol actually rose nine points over that stretch, which is supposed to help a net-long-vega structure. It did not save the trade. Distance from the strike swamped it. That is the lesson the payoff curve above already tells you — outside the roughly 4.7% band, nothing the vol surface does will rescue the position.
The consolation is the one thing a calendar guarantees: the loss stopped at $104 and could never have exceeded the $118 paid. There is no version of this trade where a gap-down costs more than the debit.
Common mistakes
- Quoting a max profit. Any number presented as the max profit on a calendar is a model output with assumptions baked in, not a property of the structure. Treat it as an estimate that moves with back-month IV.
- Setting targets as a percentage of "max profit". The denominator does not exist. Size and target off the debit, which is a real, known number.
- Entering because IV rank is low. IV rank describes one point on the curve. A calendar trades the relationship between two points. Low IV rank with the front month cheaper than the back is a losing bucket in the table above.
- Ignoring an earnings date between the legs. An event sitting after the front expiry and before the back one changes the pricing of both legs and turns a term-structure trade into an event trade.
- Holding into expiration week. The only exit in the sample that produced full-debit losses, for half the return.
- Trading it in a thin name. Four half-spreads to get in and out. A wide market on either expiration eats the entire edge before the thesis gets a chance.
Five takeaways
- The entry filter carried the entire result. Unfiltered monthly calendars lost money over 60 months. Restricting to a front/back IV ratio above 1.02 turned −$249 into +$429 on 19 trades.
- Know your max loss exactly; do not pretend to know your max profit. Debit × 100 is the floor. The ceiling depends on what the back-month option is worth on front-expiry day, which peaks near the strike and is not a formula.
- Distance from the strike, not vega, is what kills it. The worst trade in the sample lost on a directional move while back-month IV was rising.
- Exit five days before front expiration. Double the return of holding through, and it is the difference between a −$104 worst case and a −$120 one.
- Stress regimes generate the signal. 2022 produced the most qualifying entries and the best year, because inversions cluster where volatility is being repriced.
Backtest narrative is illustrative — built from typical calendar spread mechanics and historical volatility term-structure behaviour, not from live broker fills. Payoff relationships described here (max loss equals the net debit; no closed-form max profit) are structural properties and hold generally; the performance figures do not. Past performance, simulated or real, does not predict future results. See methodology.
Keep reading
The structure,
then its cousins.
You know the debit.
Now price the pair.
The Strategy Lab builds the same front and back month legs on a live chain, with the real term structure, the payoff at front expiry and the breakevens that move with back-month vol. Run it on AAPL with a free account, no card.
Real market data, not a sandbox. Open the Strategy Lab on AAPL.