SMA-200 Trend Timing
Status: Adopt candidate (paper‑trade first) · Library entry #3 · Found 2026‑08‑06 Instruments: SPY, QQQ (primary) · US index majors only — EFA fails Market/timeframe: stocks, 1d · Direction: long only · Frequency: ~3 trades/yr, ~2‑month avg holds, ~80% time in market
The edge
Own the index while it trends, stand aside while it doesn't. Enter when the daily close crosses above the 200‑day SMA, exit when it crosses back below. That's the whole system — Faber's published (2007) timing model with the 10‑month SMA expressed as its daily twin, taken as-is. It is the complement to the RSI(2) dip‑buy: mean reversion earns in chop and pays in trends; trend timing earns in trends and pays in chop.
What it buys you is not more return than holding — it's the trend's return without the crashes: the system was out of the market for most of 2008, the 2020 collapse, and the 2022 bear. The honest cost: whipsaw losses every time the index saws across its 200‑day line.
- The parameters are not ours. One line, published 2007, frozen since — both validation windows below are genuinely out‑of‑sample.
- Execution‑robust. Unlike the dip‑buy (which needs fills near the close), this system is indifferent-to-slightly-better at next‑morning fills — see the fills table.
The setup (compilable spec)
Market: stocks, symbol SPY (or QQQ), trading timeframe 1d. Longs only. Entry (daily close):
close crosses_above SMA(200). Exit (daily close):close crosses_below SMA(200)(condition exit — no stop, no target). Fees: 0.03%/side (liquid‑ETF spread+slippage; robust at 0.1%/side).
Compiled shape: entryConditions = close crosses_above sma(200);
exitConditions = close crosses_below sma(200); exitStrategy = fixed with both levels 0.
Validation evidence
Run on the same engine the app uses, warm‑up run‑in included, 0.03%/side. Returns are summed per‑trade percentages (not compounded), dividends excluded. Max DD is sum‑points; DD‑from‑peak (account basis, fixed notional) in parentheses. MC p95 = 95th‑percentile max drawdown across 1,000 order‑shuffles of the same trades.
| Test (window) | Trades | Profit factor | Return | Max DD (peak) | MC p95 | Strip‑best? |
|---|---|---|---|---|---|---|
| SPY 2010–2018 | 21 | 3.32 | +64.4% | 10.7% (9.9%) | 20.4 | ✅ (+27.5%) |
| SPY 2018–2026 | 29 | 2.99 | +76.5% | 15.1% (11.6%) | 23.9 | ✅ (+32.7%) |
| QQQ 2010–2018 | 30 | 3.25 | +84.6% | 10.8% (9.9%) | 25.9 | ✅ (+40.8%) |
| QQQ 2018–2026 | 17 | 6.98 | +160.0% | 13.1% (9.2%) | 20.7 | ✅ (+79.7%) |
| Stress: SPY 2000–2010 | 44 | 1.42 | +20.0% | 21.9% | 33.6 | ❌ (−3.6%) |
| Stress: QQQ 2000–2010 | 39 | 1.32 | +22.9% | 46.8% | 53.3 | ❌ (−10.7%) |
- Two windows: ✅ both independent 8‑year windows, both instruments, decisively positive.
- Strip‑best‑trade: ✅ in all four main cells — no single trade carries it.
- Cross‑asset: ✅ SPY + QQQ. EFA fails (−4.3% in W1) — international trend timing did not work; this ships US‑majors‑only.
- Cost stress (0.1%/side): ✅ barely dented (PF 2.8–6.5) — ~3 trades/yr can't be fee‑killed.
- Fills: ✅ next‑morning‑open fills are equal or better (SPY W2: PF 2.99 → 3.42; QQQ W2: 6.98 → 9.88) — no close‑fill flattery in these numbers.
The honest weakness: whipsaw decades
The 2000–2010 stress rows are the system's true face in a sideways decade: still net positive, but failing strip‑best (remove the one great crash‑avoidance trade and the decade goes slightly negative) with deep sum‑point drawdowns from stacked whipsaws (QQQ: 46.8). That is the known, literature‑documented cost of trend following — many small losses buying every false cross, repaid by rare large saves. If the next decade is a 2000s‑style chop, expect to grind sideways-to-down and to hate this system. The two modern windows passing cleanly is the evidence; the stress decade is the disclosure.
vs. just holding
Same windows, same engine benchmark: SPY 2018–2026 buy‑and‑hold made +178% with a −34% drawdown, 100% invested; this system made +76.5% with a −11.6% peak drawdown, ~77% invested. Holding wins raw return in a great bull decade — the pitch here is the drawdown column (a third of holding's) and the crash years spent in cash. It stacks naturally with the dip‑buy (entry #2): different regimes pay them.
Guardrails (read before trading)
- US index majors only. EFA failed; nothing else was tested. Untested ≠ works.
- ~3 signals a year. This is a patience instrument, not an activity feed. Do not "improve" it with extra filters mid‑drawdown — the whipsaw losses ARE the strategy working as designed.
- Whipsaw clusters are certain. 3–5 consecutive small losses around a flat 200‑day line are normal (2000s: 44 trades, most of them losers). Size so a 20‑sum‑point stretch is boring.
- Low sample per window (17–30 trades). Two windows × two instruments × a 19‑year-old frozen parameter is the case; treat singles-window readings as noise.
- Set
signalMode: "early"in the app so the before‑close alert lets you act near the close the backtest assumes — though the fills table shows next‑open entry is fine too.
How it was found
Pre‑registered in sweep #3 (research log) as a literature transplant with frozen parameters — tested against the hypothesis alongside a crypto trend‑pullback (killed: window‑unstable) and the RSI(2) sector extension (passed; see entry #2's extension section). Nothing was tuned; EFA's failure and the 2000s strip‑best failure are reported, not hidden.
