Strategy: ma_crossover_5_20
1 variant(s) documented · earliest 2026-09-12 · latest 2026-09-12.
| Variant | Generated | Registered | Verdict |
|---|---|---|---|
fast=5, slow=20 |
2026-09-12T12:43:28+00:00 | — | FAIL |
Variant 1
Generated: 2026-09-12T12:43:28+00:00
Source report: 20260912_124328_ma_crossover_5_20.md
Registered: —
FAIL
Experiment
- Period: 2020-01-01 to 2022-11-23 (756 sessions)
- Execution rule: close-derived weights are applied one session later
- Transaction costs: 5.00 bps per unit of turnover
- Cash return: 0%; taxes, slippage and market impact: not modeled
- Parameters: fast=5, slow=20
Data provenance
- Source:
synthetic-explicit-test-only(generated; live rows included:False) - Requested symbols: A, B, C
- Validated common panel: 2020-01-01 to 2022-11-23; 756 rows
- Database:
market-data-hub configured default
Research rationale
A slow trend filter may reduce severe drawdowns, but after costs it need not beat passive exposure.
For each ETF, hold it when its 50-day moving average is above its 200-day average; equal-weight active ETFs; otherwise cash.
Sources:
- A Quantitative Approach to Tactical Asset Allocation — Motivates a simple trend-following tactical allocation rule across asset classes.
- A Quantitative Approach to Faber's Tactical Asset Allocation — Warns that attractive rule-based results require statistical caution and bootstrap-style robustness tests.
- Momentum Trading, Return Chasing, and Predictable Crashes — Documents high historical momentum returns alongside material and sometimes predictable crash risk.
Known risks:
- whipsaw and repeated transaction costs in sideways markets
- parameter/data-mining sensitivity
- cash return is modeled as zero in the MVP
- one historical sample is not evidence of future profitability
Net backtest metrics
| Metric | Strategy | Benchmark |
|---|---|---|
| Gross cumulative return | -10.03% | -4.97% |
| Cumulative return | -15.65% | -5.02% |
| CAGR | -5.51% | -1.70% |
| Annualized volatility | 12.06% | 9.22% |
| Annualized Sharpe (rf=0) | -0.41 | -0.14 |
| Maximum drawdown | -24.34% | -14.56% |
| Annualized turnover | 4300.00% | 33.33% |
| Transaction-cost drag (sum of daily rates) | 6.45% | 0.05% |
Walk-forward / out-of-sample validation
Parameters were frozen before the chronological split. Each window is non-overlapping and backtested independently.
| Window | Role | Period | Sessions | Return | CAGR | Volatility | Sharpe | Max drawdown | Benchmark return | Benchmark Sharpe | Return delta | Sharpe delta |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| development | development | 2020-01-01 to 2021-09-24 | 453 | -12.65% | -7.25% | 11.98% | -0.57 | -19.66% | -9.38% | -0.55 | -3.28% | -0.02 |
| oos_1 | out_of_sample | 2021-09-27 to 2022-11-23 | 303 | -1.89% | -1.58% | 11.49% | -0.08 | -15.01% | 3.72% | 0.38 | -5.61% | -0.46 |
Pass criterion: in every OOS window, strategy cumulative return and annualized Sharpe must each be at least the corresponding benchmark value.
Walk-forward verdict: FAIL: degrades out of sample; the frozen strategy trails the benchmark on return or Sharpe in at least one OOS window.
Giudizio / conclusion
Full-sample comparison: FAIL on this sample: lower net return and Sharpe than the benchmark.
Final validation judgment: FAIL: degrades out of sample; the frozen strategy trails the benchmark on return or Sharpe in at least one OOS window.
This remains historical research, not evidence of tradability or a recommendation. Promotion still requires parameter-robustness and multiple-testing checks plus a live paper period.
Ecosystem review
- LazyFin: Do not recreate hierarchical portfolio optimization in LazyAlpha; the line was moved/retired from LazyFin and belongs to LazyPortfolio. (
C:\Users\Administrator\Documents\GitHub\LazyFin\docs\status.md) - investmentcommittee: Keep B0/P0/Sa/PH/PF as methodological reference: same data, folds, costs and rebalance rules for honest comparisons; do not clone it 1:1. (
C:\Users\Administrator\Documents\GitHub\investment-process-top-down-etf.md)