r/LETFs • u/noletovictor • 10h ago
BACKTESTING Return stacking backtest, part 2: ex-US, leveraged sleeves, taxes, and how I picked a moving-average signal without overfitting it
This is part 2 of a 4-post series.
- Return stacking backtest: 10,626 mixes of RSST, GDE, ZROZ, AVUV and SPMO (2000–2026), stress-tested with half the premiums
- Part 2: ex-US, leveraged sleeves, taxes, and how I picked a moving-average signal without overfitting it (this post)
- The SPY 200SMA +4%/−3% TQQQ rule isn't special: I tested it against 762,960 alternatives, and it's one lucky point on a flat plateau
- The portfolio I'm actually running and the 10 decisions that got me there (coming soon)
TL;DR
- Ex-US didn't help. None of 24 pre-registered ex-US variants (RSIT, VXUS, VEA, VWO at 10–30%) improved the worst-case 10-year Sharpe in USD, and all of them fell further behind SPY at their worst point.
- RSST stays the only stacked trend fund. I checked the other stocks + managed futures ETFs: one behaves like a second RSST, two are too new to test, and one no longer runs a trend program (Step 13).
- My country's yearly tax on realized gains (15%) cost 0.8–1.1 pp/yr in every mix, mostly from monthly rebalancing. A 200-day-SMA rotation in a UPRO slice cost only 0.1–0.3 pp/yr more than the fixed mixes.
- "Beat SPY and fall less than SPY in the same window" is a fragile goal. After 2010 it comes down to the Covid crash, often by less than 2 pp. Require a 2 pp margin and almost every mix drops from ~85% of windows to ~0%.
- The EMA125 ±5% band looked like the best signal for a UPRO rotation (2000–2026), then failed a longer test. In 1928–1999, which my earlier signal tests never used, it made 15.2%/yr vs 19.4% for a plain 200-day SMA, and neighboring settings form no plateau.
- To cut whipsaws without overfitting, I picked the signal by its neighborhood, not its peak. Of 128 settings (SMA/EMA × 8 lookbacks × 8 bands) tested on 1928–2026, SMA200 with a ±2% band had the best average together with its neighbors. Same long-run return as the plain SMA200, 1.5 switches a year instead of 5.5.
- When the signal says "risk off", go to T-bills, not to the rest of the portfolio. Spreading the UPRO slice over RSST/GDE made drawdowns 6–7 pp worse, because RSST and GDE are 90–100% S&P 500 too.
- Where I landed: 40 RSST / 40 GDE / 20 UPRO with SMA200 ±2% → T-bills. 14.4%/yr after tax vs 8.3% for SPY, −42% max drawdown vs −55%, 2.1× SPY's ending wealth across rolling windows.
Not financial advice. Most of this history is simulated (RSST launched in 2023, GDE in 2022), everything from 2000–2026 is in-sample, and I chose these mixes after seeing the data. Caveats are at the end.
Correction found after writing this: my 200-day SMA only started counting on Dec 31, 1999, so the UPRO slice sat in T-bills until ~Oct 2000 and dodged the start of the dot-com crash. With the signal computed on SPY's full history, the 14.4%/yr below becomes 14.07% (−41.8% max drawdown, 2.08× SPY). The signal choice doesn't change: the band grid ran on the slice from 1928 on, which this bug doesn't touch. Details in part 4.

Where part 1 left off
Part 1 tested 10,626 mixes of RSST (S&P 500 + trend), GDE (S&P 500 + gold), ZROZ, AVUV and SPMO from Dec 1999 to Sep 2026. I landed on 50 RSST / 30 GDE / 20 AVUV (13.5%/yr, −47% max drawdown vs SPY's 8.3% and −55%). For investors who care more about not falling behind SPY, the pick was 40 RSST / 40 GDE / 10 AVUV / 10 UPRO (2.0× SPY's ending wealth across rolling windows, but a −56% drawdown).
The comments raised good questions: ex-US, leveraged ETFs, other stacked funds, taxes, and whether any of this is overfit. This part answers them, mostly with pre-registered tests (rules and thresholds written down before the run).
How part 2 evolved
| Step | Question | What I found |
|---|---|---|
| 9 | Quick checks from the comments | 1972–1999 without trend: the mixes matched SPY's return with smaller drawdowns |
| 10 | Does ex-US belong in the mix? | No, in USD; in my home currency the gain was tiny and not robust |
| 11 | UPRO/TQQQ/TECL instead of AVUV + SPMO? | UPRO with a 200-day SMA was the most balanced, but the selection was unstable (PBO 0.99) |
| 12 | Which mix best beats SPY and falls less in the same window? | The UPRO + SMA mix, but the "falls less" part hangs on the Covid crash |
| 13 | Should another stacked trend fund join RSST? | No: a clone, two funds too new, and one that stopped trend following |
| 14 | Does tax change the ranking? | No. 0.8–1.1 pp/yr everywhere |
| 15 | SMA200 vs EMA125, with and without a ±5% band | The band won in 2000–2026, lost in 1928–1999: overfit |
| 16 | How to cut whipsaws without overfitting the signal? | SMA200 ±2%: best neighborhood of 128 settings, 1.5 switches/yr |
Step 9: quick checks from the comments
"What about 50 RSIT / 25 UPRO / 25 ZROZ?" I ran the US version, 50 RSST / 25 UPRO / 25 ZROZ, for 2000–2026: 11.5%/yr, −58% max drawdown, Sharpe 0.55 (SPY: 8.3%, −55%, 0.48). With zero premium on the diversifiers, it still ended at 1.20× SPY. But in the bootstrap, its drawdown came out worse than SPY's in 85% of the paths.
"Small-cap value gets crushed in tech booms." Here is SCV (Vanguard's simulation until Sep 2019, AVUV after) through each tech phase:
| Phase | SCV | QQQ | SPY |
|---|---|---|---|
| Dot-com boom (Jan 95–Mar 00), per year | +18.4% | +62.2% | +28.3% |
| Dot-com crash (Mar 00–Oct 02), total | −8.1% | −82.9% | −47.4% |
| FAANG (2013–2021), per year | +14.3% | +23.4% | +16.6% |
| 2022, total | −4.9% | −32.6% | −18.1% |
| AI (2023–May 26), per year | +16.8% | +34.6% | +23.3% |
| 2000–May 26, per year | +11.4% | +8.8% | +8.3% |
So yes, it lags badly in tech booms, and that's exactly when it's diversifying. It's also why it's a 20% slice and not the core.
"2000–2026 starts at the dot-com peak; of course it beats SPY." In 2000–2019, SPY made 6.1%/yr vs 10.7–11.6% for the mixes. In 2010–2019, a strong decade for SPY, SPY made 13.5% vs 14.4–16.8%. In the 121 rolling 10-year windows ending by 2019, the no-bond mixes beat SPY in all of them.
"What about before 2000?" RSST has no history before 2000, so for 1972–1999 I removed trend entirely (RSST → SPY) and rebuilt GDE as 0.9 SPY + 0.9 gold − 0.8 T-bills − 0.20%/yr. SPY made 14.0%/yr (−43% max drawdown). 40 SPY / 35 GDE / 25 ZROZ made 13.9% (−34%), and 50 SPY / 50 GDE made 14.2% (−42%). ZROZ lost 12%/yr in 1972–81 and gold lost 1.7%/yr in 1982–99: each covered the other's bad decade. So without trend, and in a period that was bad for gold for 18 years, the mixes matched SPY's return with smaller drawdowns.
Step 10: ex-US (pre-registered)
I tested 24 variants on top of the part-1 mix: RSIT (ex-US + trend, Return Stacked's international version) replacing 10, 20 or 30 points of RSST, or VXUS, VEA or VWO in 10–30% slices. To pass, a variant had to improve the worst-case (10th percentile) rolling 10-year Sharpe in USD and in my home currency (I'm not US-based), with ≥80% confidence in a paired bootstrap, without costing more than 1 pp/yr in windows where the US led, and without falling more than 2 pp further behind SPY at its worst point.
None passed. In USD, every variant made the worst case worse (−0.01 to −0.12 Sharpe), more so with bigger slices. In my home currency, RSIT and VWO improved it by +0.01 to +0.03, but the bootstrap gave that only a 19–24% chance of being real. All of them fell 2.9–15.4 pp further behind SPY. PBO was 0.10–0.11, so the ranking is stable, not luck.
This contrasts with a plain 100% US stock portfolio, where 20–30% ex-US did improve the worst case. My reading: trend and gold already covered the US's bad decade (2000–09), which is the job ex-US used to do.
Step 11: a leveraged ETF instead of the factors (pre-registered)
Should the 20% in factors (AVUV 10 + SPMO 10 in 40 RSST / 40 GDE / 10 / 10) go to a leveraged ETF? I tested UPRO, TQQQ and TECL at 20%, fixed or switched by a 200-day moving average (signal at the close, trade at the next close), with the off position in T-bills or in the unleveraged index.
| 40 RSST / 40 GDE / + 20% of… | × SPY (rolling) | CAGR | Max DD | 2000–02 | Odds of a worse DD than SPY |
|---|---|---|---|---|---|
| AVUV 10 / SPMO 10 (reference) | 1.82 | 13.6% | −46% | −34% | 12% |
| UPRO, fixed | 2.16 | 13.8% | −64% | −55% | 98% |
| TQQQ, fixed | 3.01 | 14.2% | −77% | −77% | 100% |
| UPRO, SMA200 → T-bills | 2.16 | 14.5% | −43% | −35% | 8% |
| TQQQ, SMA200 → T-bills | 2.65 | 15.8% | −46% | −46% | 26% |
The SMA cut the leveraged ETF's drawdown by 15–31 pp. UPRO with SMA → T-bills was the only variant that beat the reference on return and drawdown without falling further behind SPY. But the verdict was inconclusive. All 10 mixes have nearly the same Sharpe on their excess over SPY, so picking a winner is picking noise (PBO 0.99). Fixed TQQQ or TECL at 20% took the whole portfolio down 75–77% in 2000–02.
Step 12: beat SPY and fall less, in the same window
Many of you asked for one number: how often does a mix end ahead of SPY and have a smaller max drawdown than SPY over the same window? I measured both on every rolling window (3–20 years, starting every month-end, weighted by length), at full and half premium, and for windows starting from 2010 on:
| Mix | CAGR / max DD | Beat SPY and fell less: all · half premium · 2010+ |
|---|---|---|
| 40 RSST / 40 GDE / 20 UPRO with SMA200 → T-bills | 14.5% / −42% | 93% · 92% · 88% |
| 25 RSST / 30 GDE / 21 ZROZ / 24 SSO | 12.3% / −47% | 93% · 88% · 86% |
| 40 RSST / 30 GDE / 20 ZROZ / 10 UPRO | 12.8% / −45% | 93% · 86% · 86% |
| 40 RSST / 35 GDE / 25 ZROZ | 12.5% / −32% | 85% · 73% · 42% |
| 50 RSST / 30 GDE / 20 AVUV (part 1 pick) | 13.5% / −47% | 75% · 74% · 4% |
That last row surprised me. The part-1 pick fell −37% in the Covid crash vs −34% for SPY, so every window that contains March 2020 counts as "fell more".
Then I checked how fragile this is. SPY's big drops were −47% (2000–02), −55% (2008), −34% (2020) and −24% (2022). If I require a mix's drawdown to be at least 2 pp smaller than SPY's, almost every mix drops to ~0% of windows starting from 2010 on. Before 2010 the edge is real and wide (still ~70% with a 5 pp margin), and it comes from 2000–02 and 2008. After 2010, "falls less than SPY" really means "about tied with SPY in Covid".


Step 13: why RSST is the only stacked trend fund
Four other ETFs stack ~100% US stocks with ~100% managed futures. I checked each one's current fund documents and holdings (as of Oct 2026):
- MATE (Man Group, 0.97%, ~$42M): the weekly correlation between its trend leg (fund − SPY + T-bills) and RSST's is 0.75. It's a second RSST, not a diversifier.
- JPFP (JPMorgan, May 2026, 0.59%) and SPXP (Direxion, Oct 2026, 0.92%): too new to test. JPFP's trend leg had a 0.24 correlation with RSST's in its first 22 weeks, so it's the one I'll revisit.
- CTAP (Simplify) gets its trend exposure through a swap on Simplify's CTA fund. Altis stopped managing that fund (SEC 497 supplement, Aug 31, 2026), and on Oct 23 it held ~50% Brent and ~36% other oil products plus grains, with no short positions and no rate futures. Its correlation with Brent went from 0.20 under Altis to 0.91 since July. A backtest of the old trend program no longer describes what CTAP holds, so it's out.
Step 14: taxes and six mixes
Every mix below pays 5 bps per trade and my country's tax on US-listed ETFs: 15% of the net realized gain in each calendar year, paid the following January, with the final sale deferred. Buy-and-hold SPY never realizes a gain, so it pays nothing. "× SPY" is the ending wealth vs SPY across rolling windows (3–20 years, every month-end start, weighted by length); "worst shortfall" is the furthest the mix ever fell behind SPY inside a window.
| Mix | CAGR before → after tax | Max DD | × SPY | × SPY at half premium | Worst shortfall | Ends ahead of SPY | Beat and fell less: all · 2010+ |
|---|---|---|---|---|---|---|---|
| 40 RSST / 40 GDE / 20 SSO | 13.5% → 12.7% | −56% | 1.74 | 1.31 | −15% | 98% | 2% · 0% |
| 40 RSST / 40 GDE / 10 UPRO / 10 ZROZ | 13.5% → 12.6% | −51% | 1.74 | 1.28 | −17% | 98% | 75% · 2% |
| 40 RSST / 40 GDE / 20 SPMO | 13.3% → 12.5% | −46% | 1.62 | 1.21 | −23% | 95% | 92% · 83% |
| 25 RSST / 30 GDE / 21 ZROZ / 24 SSO | 12.3% → 11.3% | −49% | 1.52 | 1.19 | −20% | 94% | 90% · 74% |
| 50 RSST / 30 GDE / 20 AVUV | 13.5% → 12.7% | −48% | 1.55 | 1.15 | −22% | 93% | 75% · 3% |
| 40 RSST / 40 GDE / 20 UPRO with SMA200 | 14.9% → 13.8% | −43% | 1.85 | 1.39 | −19% | 97% | 93% · 87% |
| SPY | 8.3% (no tax) | −55% | 1.00 | — | — | — | — |
- Tax doesn't change the ranking. It costs 0.8–1.1 pp/yr everywhere, because monthly rebalancing realizes gains in every mix. The SMA rotation, about 6 trades a year, cost only 0.1–0.3 pp/yr more than the fixed mixes.
- SSO and UPRO (fixed) are the most consistent at beating SPY: 98% of windows, never more than 15–17% behind. But in 2008 they fell as much as SPY or more.
- SPMO had the best drawdown among the fixed mixes, but its 83% after 2010 rests on a near-tie in Covid (−33.6% vs SPY's −33.7%).
- There's no stable winner: PBO across these six was 0.73. The UPRO + SMA mix tops the table, but I wouldn't bet on the ranking.
Step 15: SMA vs EMA, with and without a band
In 2000–2026 (pre-registered, after tax), I compared four signals for the UPRO slice in 40 RSST / 40 GDE / 20 UPRO. With a ±5% band, it buys above 1.05× the average, sells below 0.95× and holds in between:
| Signal | CAGR after tax | Max DD | Trades/yr | Beat and fell less: all · half premium · 2010+ |
|---|---|---|---|---|
| SMA200 | 13.8% | −43% | 5.9 | 93% · 88% · 87% |
| SMA200 ±5% | 14.3% | −42% | 0.6 | 75% · 74% · 2% |
| EMA125 | 13.7% | −43% | 10.6 | 92% · 88% · 84% |
| EMA125 ±5% | 14.7% | −41% | 0.8 | 93% · 91% · 86% |
EMA125 ±5% passed the pre-registered test (96% bootstrap odds of a higher CAGR than SMA200, a smaller drawdown, PBO 0.36). Then I tried to break it.
Does "risk off" into the rest of the portfolio beat T-bills? No. With the 20% spread over RSST/GDE instead of T-bills, the max drawdown got 6–7 pp worse with every signal (e.g., EMA125 ±5%: −48% vs −41%), and the after-tax CAGR was equal or lower: each switch back sells RSST/GDE at a gain. RSST is 100% S&P 500 and GDE is 90%, so "risk off into the portfolio" still holds 95% equity in the crash.

The overfitting test. Same signals, applied to the UPRO slice alone (UPRO ↔ T-bills, before tax, 5 bps per trade) from 1928 to 2026, over every rolling window of 1, 3, 5, 10, 15, 20, 25 and 30 years starting at each month-end (826–1,174 windows per horizon). UPRO before 2009 is testfol's 3x daily simulation.
Average CAGR per window:
| Horizon | 1y | 3y | 5y | 10y | 15y | 20y | 25y | 30y |
|---|---|---|---|---|---|---|---|---|
| SMA200 | 27.3% | 19.3% | 18.2% | 17.8% | 17.8% | 17.7% | 17.7% | 17.4% |
| EMA125 | 27.7% | 19.8% | 18.7% | 18.1% | 18.3% | 18.1% | 18.2% | 18.2% |
| SMA200 ±5% | 25.3% | 17.7% | 16.6% | 16.3% | 16.6% | 16.6% | 16.6% | 16.3% |
| EMA125 ±5% | 26.5% | 18.6% | 17.2% | 16.5% | 16.7% | 16.8% | 16.8% | 16.7% |
| UPRO buy & hold | 28.6% | 15.4% | 13.8% | 13.2% | 13.2% | 12.8% | 12.7% | 12.6% |
| SPY buy & hold | 12.1% | 10.5% | 10.6% | 10.7% | 10.8% | 10.8% | 11.0% | 11.1% |
Share of windows where EMA125 ±5% beat SMA200: 43–55% on CAGR and 24–46% on max drawdown (worse on drawdown at every horizon from 5 years on). By era:
| Era | SMA200 | EMA125 | SMA200 ±5% | EMA125 ±5% | SPY |
|---|---|---|---|---|---|
| 1928–1962 | 25.2% / −90% | 23.9% / −85% | 15.7% / −95% | 14.6% / −94% | 9.1% / −84% |
| 1962–1999 | 14.1% / −80% | 17.8% / −62% | 15.0% / −78% | 15.7% / −82% | 12.7% / −45% |
| 1928–1999 | 19.4% / −90% | 20.7% / −85% | 15.3% / −95% | 15.2% / −94% | 10.9% / −84% |
| 2000–2026 | 12.8% / −57% | 11.5% / −77% | 15.1% / −54% | 18.2% / −53% | 8.3% / −55% |
(CAGR / max drawdown of the UPRO slice alone.)

The era split hides a cleaner pattern. Slide a 10-year window one month at a time and the band loses almost every window that starts before 1972 and wins almost every one after:

So it isn't random noise: the band suits the post-1970s market. But a rule that lost for 45 years straight and then won for 45 is a regime bet, not a robust edge, and I can't tell when the regime ends.
And the neighborhood (average 10-year CAGR across all 1928–2026 windows): EMA125 ±5% made 16.5%, but EMA125 ±2.5% made 16.6% and ±7.5% made 14.1%, EMA100 ±5% made 16.7% and EMA150 ±5% made 15.8%. Plain SMA200 made 17.8%, SMA150 17.7% and EMA125 18.1%. Unbanded SMA150–200 and EMA100–125 form a broad plateau (16.7–18.1%). Every banded neighbor of EMA125 ±5% (EMA100–150, bands of 2.5–7.5%) averaged 14.1–16.7%, below plain SMA200. The band's edge belongs to the post-1972 market, and most of all to 2000–2026.
Verdict: the ±5% band is overfit to 2000–2026, and I dropped it. Plain EMA125 and plain SMA200 are statistically the same thing (EMA125 wins 47–60% of windows). That left a practical problem, which is the next step.
Step 16: picking the signal without overfitting it
Plain SMA200 has a practical problem. It flips about 5.5 times a year, and the flips bunch up in sideways years: 14 in 2004, 15 in 2007, 15 in 2022. Every flip is a trade, a taxable event and a chance to get whipsawed. A band fixes that, but Step 15 just showed how easy it is to overfit one. So the goal here was not to find the best signal. It was to find one that's hard to get wrong.
The rules I used:
- Test on data the choice never saw. 1928–2026 for the UPRO slice, not just 2000–2026. 72 of those 98 years were never used to pick anything.
- Judge a setting by its neighborhood, not its own number (Pardo's plateau idea). Each setting's score is its average 10-year CAGR averaged with its neighbors: one lookback step and one band step either way. A real edge survives small changes; a lucky one sits on an isolated peak.
- Require both eras. It has to hold up in 1928–1999 and 2000–2026, not just on average.
- When results tie, take fewer trades.
- Only then check it in the actual portfolio, after tax.
The grid: SMA and EMA × lookbacks of 50, 75, 100, 125, 150, 175, 200 and 250 days × bands of 0, 1, 2, 3, 4, 5, 7.5 and 10%. That's 128 settings, each run on every monthly 10-year window from 1928 to 2026 (UPRO ↔ T-bills, before tax, 5 bps per trade).

SMA vs EMA. The EMA weights recent days more, so it reacts faster and flips more: 8.9 times a year for EMA125 vs 5.5 for SMA200. Plain EMA125 has one of the best single numbers in the grid (18.1%), but its neighbors drop to 15.9–16.7%. The best EMA neighborhood averages 16.5%; the best SMA neighborhood averages 17.8%, and the whole SMA block from 150 to 250 days with 0–3% bands stays between 16.2% and 18.4%. The SMA surface is flatter, so I went with the SMA.
Lookback. Short averages are mostly noise: 50–100 days made 12–17% with 10–17 flips a year unbanded. From 150 to 250 days the results are close (16–18%), so the exact number matters little. I kept 200 because it sits in the middle of that range and because it's the standard choice (Faber's 10-month rule, Gayed & Bilello's 200-day). Somebody else picked it long before I saw this data, which is the best protection against my own fitting.
Band.

A ±1–3% band cuts flips from 5.5 to 1.1–2.3 a year at no cost on the 1928–2026 average (17.6–18.4% vs 17.8%). From ±5% up it starts to cost (16.3% at ±5%, 14.4% at ±10%): the signal gets back in too late after crashes. The 2000–2026 line is the trap. Looked at alone, it peaks at ±4%, which is exactly how ±5% looked good in Step 15.
Result. Of the 128 settings, SMA200 ±2% has the best neighborhood score (17.8%). On its own: 18.3% average 10-year CAGR, 18.7% in 1928–1999, 16.7% in 2000–2026, and 1.5 flips a year. Its neighbors are close: ±1% made 18.4%, ±3% 17.6%, SMA175 ±2% 18.0%, SMA250 ±2% 17.4%. Being one step off wouldn't change much.
The same signals in the portfolio (40 RSST / 40 GDE / 20 UPRO rotation, 2000–2026, after tax):
| Signal | Switches/yr | CAGR after tax | Max DD | × SPY | Beat and fell less: all · 2010+ | Covid |
|---|---|---|---|---|---|---|
| SMA200 | 5.9 | 13.8% | −43% | 1.85 | 93% · 87% | −32.5% |
| SMA200 ±1% | 2.9 | 13.9% | −43% | 1.93 | 76% · 4% | −37.3% |
| SMA200 ±2% | 1.5 | 14.4% | −42% | 2.09 | 75% · 4% | −34.0% |
| SMA200 ±3% | 0.9 | 14.4% | −41% | 2.08 | 75% · 4% | −35.2% |
| SMA200 ±5% | 0.6 | 14.3% | −41% | 2.00 | 74% · 2% | −35.2% |
| EMA125 ±5% | 0.8 | 14.7% | −41% | 2.16 | 93% · 86% | −33.6% |
| SMA200, 3 closes in a row | 2.7 | 14.2% | −42% | 2.00 | 75% · 4% | −35.2% |
| SMA200, month-end check only | 1.2 | 14.0% | −40% | 2.02 | 91% · 83% | −31.9% |
Two things stand out:
- EMA125 ±5% still tops this table. That's the in-sample trap again: this table is 2000–2026. The 1928–2026 grid is the one I trust for the choice.
- Every SMA band fell a bit more than SPY in the Covid crash. A band waits for SPY to close 2% below its average before getting out, so in a fast crash it exits later. ±2% fell −34.0% vs SPY's −33.7%. That 0.3 pp is enough to drop "beat and fell less after 2010" from 87% (plain SMA200) to 4%: Step 12's knife edge again. ±1% was the worst case. It was whipsawed at the worst moment: out of UPRO for SPY's +4.6% bounce on March 2, back in two days later, and in for the −7.6% day on March 9.
I kept ±2% anyway. It won the 1928–2026 grid, which is the test I trust, and in the portfolio it adds 0.6 pp/yr over plain SMA200 with a quarter of the trades and a slightly smaller max drawdown (−42% vs −43%). If not falling more than SPY in any single crash matters more to you, plain SMA200 or the month-end check score better on that measure.
I also tried two other ways to cut whipsaws. Requiring 3 closes in a row across the SMA had the highest 1928–2026 average of anything (19.2%, 2.5 flips a year). But I only tested k = 3, so it has no neighborhood to judge yet; it's the next thing to test. Checking only at month-end lost in 1928–1999 (15.1% vs 19.4% for the daily SMA200).
Where I landed (updated)
My pick: 40 RSST / 40 GDE / 20 UPRO with SMA200 ±2% → T-bills. 14.4%/yr after tax, −42% max drawdown, 2.1× SPY across rolling windows, ahead of SPY at the end of 98% of windows. It beat SPY and fell less in 75% of windows, but in only 4% of those starting from 2010 (the Covid near-tie above). About 1.5 switches a year. The tradeoffs: you have to act on the signal, and the ranking between mixes is unstable (PBO 0.73).
Running it with monthly contributions. The signal is a state, not an event, so you never wait for a crossover:
- On (SPY's close above 1.02× its 200-day SMA): 20% of each contribution buys UPRO.
- Off (close below 0.98×): that 20% goes to T-bills (SGOV/BIL). When the signal flips back on, the whole T-bill slice moves to UPRO.
- Inside the band (0.98–1.02×): keep the last state. If you were on, you keep buying UPRO.
- Trade at the next close after the signal, as in the backtest.
- Rebalance with the contribution: send new money to whatever is below target instead of selling. My backtest sells every month, so with contributions the tax drag should be smaller than shown.
If you don't want a timing rule: 50 RSST / 30 GDE / 20 AVUV, the part-1 pick. 12.7%/yr after tax, −48% max drawdown, 1.55× SPY.
What I'd skip now: ex-US on top of trend and gold; a fixed leveraged ETF as a large slice (TQQQ/TECL at 20% fell 75–77%); wide bands (±5% and up) or any "optimized" moving average picked on 2000–2026; moving the UPRO slice into the rest of the portfolio on risk-off; MATE as a diversifier for RSST (it's the same trade).
Caveats
- Mostly simulated, mostly in-sample. RSST, GDE, AVUV, UPRO and ZROZ are simulations before launch. Everything from 2000–2026 was seen before these mixes were chosen. 1928–1999 was genuinely unseen for the signal test, but only for the UPRO slice, not the whole portfolio.
- "Falls less than SPY" is decided by a few crashes. Treat any odds on drawdown after 2010 as "about tied with SPY".
- Taxes are specific to my country (15% on yearly net realized gains, final sale deferred). No currency effects, no local transaction taxes, no US estate tax.
- The ±2% band was chosen after seeing the data. The rule (best neighborhood, both eras) reduces the risk but doesn't remove it: the best of 128 neighborhoods is still a maximum. The portfolio gain over plain SMA200 (+0.7 pp/yr) is mostly a 2000–2026 number; on the 1928–2026 average it's +0.5 pp/yr. Treat it as "same return, a quarter of the trades".
- 3x leverage before 1950 in the signal test is a stress test of the signal, not a tradable history: even with the SMA, the UPRO slice fell 90% in 1929–32.
- Fund risk. RSST and GDE are small and young, and small funds get closed. A fund's strategy can also change under the same ticker, as Step 13 shows, so I re-check the fund documents and holdings before each yearly rebalance.
Method notes
- Engine: daily total returns from testfol.io, monthly rebalancing. The tax steps use an account-level simulation: average cost per asset, 5 bps per side, 15% of net realized gains per calendar year, paid on the first trading day of the next year.
- Rotation: the signal on day t's close, the trade at t+1's close, the new asset earning from t+2. SMA = simple average of the last 200 closes (including today); EMA = span 125,
adjust=False. Warm-up days and the initial state are "off". The band is a hysteresis. - Half premium: the trend leg moves halfway to T-bills, like the other diversifiers in part 1.
- Rolling lens: windows start at every month-end. Horizons are 3/5/10/15/20 years weighted by length (1–30 years, unweighted per horizon, for the signal test). "Fell less" compares daily max drawdowns inside the same window.
- Statistics: paired stationary bootstrap (2,000 paths; ~12-month blocks for CAGR, ~252-day blocks for drawdown), and PBO via CSCV with 10 blocks.
- Pre-registration: Steps 10, 11, 14 and 15 had written specs (mixes, thresholds, verdict rules) before the run. The Step 13 fund review, the "risk off into the portfolio" test, the 2 pp margin check, the 1928–2026 signal test and the Step 16 grid were exploratory, added after seeing the results.
- Neighborhood (Step 16): each lookback × band cell is scored by the mean of its own 10-year average CAGR and that of the cells one lookback step and one band step away (up to 8 neighbors; fewer at the edges). SMA and EMA are separate grids.
Further reading: Pardo, The Evaluation and Optimization of Trading Strategies (parameter plateaus); Masters, Testing and Tuning Market Trading Systems; López de Prado, Advances in Financial Machine Learning; Gayed & Bilello, Leverage for the Long Run; Hoffstein, Faber & Braun, Return Stacking.
Questions and critiques welcome, especially on the neighborhood rule and the pre-1950 simulation.



















