Backtesting Proxy Carry Strategies: Pitfalls, Survivorship Bias, and Regime Sensitivity
Ran the proxy carry backtest over 2019–2023. Result: 48% APY, Sharpe 1.8, max drawdown 9%. Traded it live for 18 months. Realized: 31% APY, Sharpe 1.1, drawdown 16%.
That 17-point gap is not bad luck. It is four specific backtesting errors stacking on top of each other. Every options backtest on a proxy basket has the same failure modes. Here is where the inflation comes from and how to strip it out.
Survivorship Bias in Options and Basket Data
Most historical options databases only contain contracts that survived to expiration with meaningful volume. Delisted underlyings, halted names, and dead chains drop out silently.
That matters for proxy carry backtesting because the basket is built from liquid single-names. Run a backtest today using today’s liquid names projected backward and you have selected for winners. The two industrial mid-caps that looked like clean proxies in 2024? In 2020 one of them had a 3-week trading halt and its options chain went no-bid. Your backtest never sees that because the data vendor fills it with mid-marks or drops the dates entirely.
Same problem on the ETF leg. Backtests pull current constituents and current options liquidity backward. Historical spreads were wider, short-dated OI was thinner, and several strikes your backtest “traded” did not exist at the time.
Fix: build the basket point-in-time. At each rebalance date, select only instruments that passed the liquidity filter — ADV > 20× notional, OI > 500 contracts — using data available on that date. If a name fails the filter, it is out, and the backtest takes the tracking error hit. That single change cut 5 points off our 48% backtested APY.
Look-Ahead Bias in Factor Loadings
This is the quietest source of inflation in any proxy carry backtest.
The proxy basket exists to match the micro-cap’s factor loadings — market beta, sector beta, value tilt. The naive approach estimates those betas over the full sample, then builds the basket. That means the January 2020 hedge ratio already knows what the March 2020 crash did to correlations.
In stress, betas move fast. Our illustrative micro-cap showed a full-sample market beta of 1.35. Estimated on trailing 252-day windows available at the time, that beta ranged from 1.12 to 1.68. A backtest using the fixed 1.35 stays perfectly hedged through the crash. A live portfolio running trailing estimates drifts 0.2–0.3 off target and eats the tracking gap.
Fix: walk-forward only. At each monthly rebalance, estimate loadings on trailing data ending that day, with a minimum 60-day lag for accounting data in value and quality factors. Freeze the loadings, size the basket, then step forward one month. No overlapping estimation and holding windows. No full-sample normalization. When we re-ran with strict walk-forward betas, tracking error doubled from 4% to 8% annualized — and that is the honest number.
Transaction Costs: The Missing 8 Points
Options backtests love mid-prices. Live trading pays the spread, every roll, every month.
On a 30 DTE 30-delta call in a small-cap industrial name, the bid-ask is typically $0.15–$0.30 on a $2.50 option. That is 6–12% of premium per leg. Add the put spread — two legs, 60 DTE, wider spreads on the short wing — and round-trip friction runs 8–15% of gross premium collected.
Our backtest assumed mid-price fills minus $0.65 per contract commission. Live fills averaged 35% of the bid-ask paid away from mid. On $64,000/month gross premium, that is $5,000–$7,000/month in spread cost the backtest never booked. Annualized against the $2.0M notional, that is roughly 4 points of APY.
Then add basket rebalancing. Monthly rebalancing of a $1.7M basket at 3 bps equity spread plus borrow on any hard-to-borrow single-name leg: another 1–2 points per year. Add assignment and early-exercise friction on the short calls around dividends: another point.
Total transaction cost omission in the naive backtest: 6–8 points of APY. Fix: model fills at bid minus 10% improvement for shorts, ask plus 10% slippage for longs. Never use mids. Include a fixed 5 bps per equity rebalance and flag any backtest period where short interest exceeded 10% of float — borrow cost applies.
Vol-Cycle Cherry-Picking
Proxy carry is short vol. It harvests premium when implied volatility is normal to elevated and bleeds when vol collapses.
Backtest 2020–2022 and the strategy looks like a money printer: sector IV averaged 32%, 30-delta calls paid $64,000/month, net carry cleared 40%+ APY after hedge cost. Backtest 2017–2019 and the same structure nets 18–22% APY — IV averaged 19%, premium compressed, and the put spread cost stayed fixed.
Most published backtests pick the window that includes a vol spike and annualize it as if it repeats. It does not. A full vol cycle — spike, normalization, compression, spike — runs 5–7 years in small-cap industrials.
Fix: require the backtest to cover at least one full cycle, minimum 6 years, and report APY by vol regime separately. Our numbers:
- High vol (sector IV > 28): 44% APY net
- Normal vol (IV 20–28): 31% APY net
- Low vol (IV < 20): 14% APY net, frequently below hedge cost for months at a time
The blended 31% realized APY is the only number that matters. The 48% was a high-vol subsample dressed up as an expectation.
What Each Bias Costs
| Bias source | Inflation effect | Fix |
|---|---|---|
| Survivorship in options / basket data | +4–6 pts APY | Point-in-time liquidity filter, drop dead chains |
| Look-ahead in factor loadings | +3–5 pts APY | Walk-forward betas, trailing 252-day window, no full-sample inputs |
| Transaction cost omission | +6–8 pts APY | Trade at bid/ask with slippage, include rebalance and borrow cost |
| Vol-cycle cherry-picking | +5–10 pts APY | Minimum 6-year window, report APY split by IV regime |
| Combined | +18–29 pts APY | Stacked fixes turn 48% backtest into ~31% realized |
The biases compound. They do not average.
Honest Backtest Checklist
Before trusting any proxy carry backtesting result, confirm these seven items:
- Point-in-time universe. Basket members selected only on data available at each rebalance date.
- Walk-forward betas. Trailing 252-day OLS, re-estimated monthly, no full-sample inputs anywhere including normalization.
- Realistic fills. Shorts at bid, longs at ask, with documented slippage. No mid-price execution.
- Full cost stack. Commissions, bid-ask, equity rebalance spread, borrow cost, assignment friction.
- Full vol cycle. Minimum 6 years covering high, normal, and low IV regimes with regime-split reporting.
- Dead-chain handling. Halted underlyings and no-bid options periods coded as untradable, not interpolated.
- Out-of-sample holdout. Final 18–24 months untouched during parameter tuning, reported separately.
Our re-run with all seven applied: 33% APY backtested, 31% realized. Two points of residual gap — mostly timing luck on rolls. That is a backtest you can size a position against.
Anything showing 45%+ APY without this checklist is not a strategy. It is a data artifact with a premium-collection story attached.