
New /learn article: why your synthetic LETF backtest probably overstates returns by ~60%
Just published https://sma200.trade/learn/leveraged-etf-borrow-cost
Background: I posted backtest numbers in r/LETFs last week with synthetic TQQQ going back to 1999. A commenter asked how my numbers compared to Testfolio. They didn't, by a lot. Turns out I had been using the simplified L × daily − ER/252 formula that almost every Reddit/forum synthetic LETF backtest uses, and it omits the daily borrow cost real leveraged ETFs pay on the swap-financing of their leveraged exposure.
Calibration vs real TQQQ over 2015-2024:
- Real TQQQ (ProShares fund): 20.4× wealth multiple
- Simple-formula synthetic: 33.0× (+62% overshoot)
- Borrow-modeled synthetic (^(IRX) + 40bps spread): 21.5× (within 5% of real)
The article walks through:
- The exact missing formula term and why every retail synthetic LETF backtest ignores it
- The calibration proof against real TQQQ
- Corrected 27-year synthetic TQQQ: B&H CAGR drops from 8.46% to 3.52%, SMA200 filter Sharpe edge drops from +0.141 to +0.019
- The refined framing: SMA200 filter's value scales with how much equity-vol-decay is in your portfolio. +0.238 Sharpe lift on a 75/25 UPRO/UGL portfolio, +0.019 on a 25/75. The filter is a portfolio construction tool, not a single-asset rescue.
Also open-sourced the harness as a standalone Python package: https://github.com/prismlfx/sma200-bt
MIT licensed, pip-installable, calibrated against real TQQQ, six pytest cases pinning the formula. Anyone can verify the article's numbers in about 10 lines of code (README walks through it).
This is also the public correction to the Reddit numbers I posted last week. Better to be wrong loudly and corrected publicly than confidently wrong forever.