SPY / QQQ / TLT / GLD Momentum Rotation: Does Top-1 Concentration Beat Top-2 Diversification?
If a monthly rotation holds only the single strongest momentum ETF instead of the two strongest equally weighted (rebalanced monthly), does the extra concentration earn enough extra return to justify the deeper drawdowns?
Over 2011–2026, holding only the top-ranked ETF (SPY/QQQ/TLT/GLD, 12-month momentum, monthly) earned a modest extra ~1.0pp a year (12.3% vs 11.3% CAGR; $593k vs $513k on $100k) — but paid for it with a maximum drawdown of −41.3% vs −25.8% and a five-and-a-half-year underwater period starting in February 2015. Risk-adjusted, the Top-2 portfolio was clearly better: Sharpe 0.75 vs 0.63, Calmar 0.44 vs 0.30. The single-position portfolio kept switching its entire holding between QQQ, TLT and GLD across 2015–16 and again in 2019, buying high and selling low. Top-1’s extra return came almost entirely from two all-in years (2020 full QQQ, 2025 full GLD). The verdict is mixed: concentration bought more upside, but the diversification Top-2 gave up was worth more than the ~1.0pp it cost.
- Strategy family
- Momentum rotation — selection breadth (Top 1 vs Top 2)
- Universe
- SPY, QQQ, TLT, GLD
- Data window
- 2011-01-03 → 2026-05-01 (evaluation window; 2010-01-04 → 2010-12-31 is the momentum warm-up)
- Data cutoff
- 2026-05-01
- Methodology
- c2i-research-1.2 (strategy engine: canonical Strategy DSL — CrossSectionalRank/TopN/EqualWeight, RateOfChange 252, monthly_first_session, scheduled rebalance)
- Last reviewed
- 2026-08-11
Short answer
Holding only the top-ranked ETF in a monthly SPY/QQQ/TLT/GLD momentum rotation earned a little more than holding the top two equally weighted and rebalanced monthly — 12.3% vs 11.3% a year over 2011–2026, $593,082 vs $513,439 on $100,000 — but the extra ~1.0pp of annual return came with a far worse ride: a maximum drawdown of −41.3% vs −25.8%, and a single-position portfolio that spent about five and a half years underwater starting in February 2015. On risk-adjusted measures the Top-2 portfolio was clearly better (Sharpe 0.75 vs 0.63; Calmar 0.44 vs 0.30). Top-1’s entire advantage came from two all-in years — full QQQ through the 2020 recovery (+47%) and full GLD through the 2025 gold rally (+62%).
Why this question matters
“How many positions should a momentum rotation hold?” is one of the first design decisions anyone building an ETF rotation faces. One position maximizes exposure to the strongest trend but bets everything on getting the ranking right; two positions dilute that bet but cut the damage when the top-ranked asset is a false signal. This is a selection-breadth question, tested as a controlled experiment: same universe, same lookback, same rebalance, one changed variable.
Hypothesis
Top-1 concentration may capture more of the strongest trend and therefore improve upside in persistent regimes, but it should also create greater concentration and path risk. Top-2 should diversify single-asset timing errors and may reduce drawdowns or failure severity, at the possible cost of diluted momentum exposure.
Baseline and changed variable
| Baseline | Variant | |
|---|---|---|
| Universe | SPY · QQQ · TLT · GLD | SPY · QQQ · TLT · GLD |
| Momentum lookback | 252 sessions (12 months) | 252 sessions (12 months) |
| Ranking | Descending by momentum | Descending by momentum |
| Selection breadth | Top 1 | Top 2 |
| Weighting | 100% to the winner | 50% / 50%, rebalanced monthly |
| Rebalance | Monthly (first trading session) | Monthly (first trading session) |
| Eligibility | Always in (no gate/filter) | Always in (no gate/filter) |
| Costs | $0 commission | $0 commission |
| Warm-up window | 2010-01-04 → 2010-12-31 | 2010-01-04 → 2010-12-31 |
| Evaluation window | 2011-01-03 → 2026-05-01 | 2011-01-03 → 2026-05-01 |
Both sides are the same rotation rule — 12-month momentum, ranked descending, monthly rebalance — differing only in how many winners are selected: one (100%) or two (50/50, rebalanced back to 50/50 at every monthly decision). There is no absolute-momentum gate, no moving-average filter, no volatility filter and no optimizer anywhere in the design. When the top-ranked asset changes, the Top-1 portfolio sells its entire position and buys the new winner; the Top-2 portfolio swaps only the half of the portfolio whose holding dropped out of the top two, and each month trims the better-performing holding back toward 50/50.
Exact rules
- Universe: SPY (S&P 500), QQQ (Nasdaq-100), TLT (20+ year US Treasuries), GLD (gold bullion), daily adjusted closes.
- Momentum: 12-month (252-session) price change on the close, computed per ETF.
- Baseline: hold the top-ranked ETF at 100%; rebalance on the first trading session of each month.
- Variant: hold the top two ETFs at 50% each; rebalance on the same schedule, restoring 50/50 weights each month.
- Decisions use the close of the day before the rebalance session; trades execute at the next session.
- Long-only, unlevered. In this test, cash earns 0%. No leverage, no derivatives, no shorting.
- No slippage or commissions in these runs; fee sensitivity is discussed in Limitations.
- Both runs start 2010-01-01 (warm-up). Metrics are reported for the evaluation window 2011-01-03 → 2026-05-01 only.
Results and evidence
The metric grid, comparison table, annual returns and charts below are rendered directly from the study’s evidence file (real Agent Lab runs, evaluation window only). The annual returns show where the two strategies diverge: Top 1 dominated in 2020 (+47.1% vs +23.9%) and 2025 (+62.2% vs +40.4%) by being fully in the year’s hottest asset (QQQ, then GLD); Top 2 dominated in 2015 (+0.2% vs −16.0%), 2016 (−16.9% vs −23.5%) and 2019 (+14.8% vs +3.3%) by holding a second, less whipsawed asset.
| Metric | Top 1 (single winner) | Top 2 (equal weight) |
|---|---|---|
| CAGR | +12.3% | +11.3% |
| Maximum drawdown | -41.4% | -25.8% |
| Annualized volatility | +18.5% | +14.3% |
| Sharpe ratio | 0.63 | 0.75 |
| Calmar | 0.30 | 0.44 |
| Final value of $100,000 | $593,082 | $513,439 |
| Total trades | 127 | 415 |
| Trades per year | 8.3 | 27.1 |
| Dollar turnover (% of avg. AUM / yr) | +247.0% | +174.2% |
| Average cash (% of portfolio) | +0.4% | +0.3% |
| Year | Top 1 (single winner) | Top 2 (equal weight) | Difference |
|---|---|---|---|
| 2011 | +8.7% | -9.2% | -17.9 |
| 2012 | +2.0% | +6.9% | +4.9 |
| 2013 | +30.8% | +28.3% | -2.5 |
| 2014 | +19.2% | +18.6% | -0.6 |
| 2015 | -16.0% | +0.2% | +16.2 |
| 2016 | -23.5% | -16.9% | +6.7 |
| 2017 | +28.2% | +27.3% | -0.9 |
| 2018 | -0.1% | -2.3% | -2.2 |
| 2019 | +3.3% | +14.8% | +11.5 |
| 2020 | +47.1% | +23.9% | -23.2 |
| 2021 | +28.0% | +24.8% | -3.2 |
| 2022 | -17.8% | -18.1% | -0.4 |
| 2023 | +25.9% | +21.9% | -3.9 |
| 2024 | +19.5% | +23.3% | +3.8 |
| 2025 | +62.2% | +40.4% | -21.8 |
| 2026 (YTD) | +6.8% | +9.3% | +2.5 |
Cash exposure stayed effectively near zero in this test — average 0.3%, highest year 1.0%.
Where each strategy failed — and where it helped
- 2019 whipsaw: the single position switched between QQQ, TLT, SPY and GLD seven times in one year (TLT → SPY → QQQ → TLT → QQQ → GLD → TLT), returning +3.3% while the two-position version made +14.8% — the #1 rank was unstable and every switch was a full 100% round trip.
- Turnover: the Top-1 portfolio turned over ~247% of assets per year (every switch is the whole portfolio) vs ~174% for Top-2. Top-2 actually trades more often (415 vs 127 executions — it rebalances monthly) but the trades are partial, so its dollar turnover is lower.
- 2022: both portfolios survived reasonably by rotating out of QQQ — Top 1 into GLD and SPY (−17.8%), Top 2 into SPY+GLD (−18.1%). Diversification bought little here because the whole equity/growth complex fell together.
- Where Top 1 clearly helped: full QQQ through the 2020 V-recovery (+47.1% vs +23.9%) and full GLD through the 2025 gold supercycle (+62.2% vs +40.4%) — the two years that generate most of its extra CAGR.
- Holding pattern: Top 1 was in a single ETF ~99% of the window (QQQ 49% of days, GLD 25%, TLT 14%, SPY 11%); Top 2 held QQQ on 77% of days, SPY 61%, GLD 39%, TLT 22% — much of its time in a two-position mix.
| Variant | Start | Trough | Recovery | Depth |
|---|---|---|---|---|
| Top 1 | 2015-02-03 | 2016-12-15 | 2020-07-31 | −41.3% |
| Top 1 | 2022-01-04 | 2022-09-26 | 2023-12-12 | −27.7% |
| Top 2 | 2022-01-04 | 2022-10-14 | 2023-12-26 | −25.8% |
| Top 2 | 2015-07-22 | 2016-12-15 | 2017-12-11 | −22.0% |
Limitations and counter-evidence
Counter-evidence — the concentration hypothesis has a real, measurable upside. Top-1’s extra return is not noise: it came from being 100% in the strongest asset during two powerful sustained regimes (2020 tech, 2025 gold), and over the full window it compounded to $80,000 more on $100,000. The question this study answers is whether that upside was fairly priced: at 15.5pp more maximum drawdown, worse Sharpe and Calmar, and a five-year underwater period, the risk-adjusted answer is no — but an investor who can tolerate and time the concentration risk would have been paid for it.
- Data constraint: the shared price source serves US daily data from 2010-01-01, so the 252-session momentum warm-up consumes 2010 and the evaluation window starts 2011-01-03. 2008-style collapses and pre-2010 bond/gold regimes are not observable here.
- Single evaluation window: 2011–2026 contains two sustained single-asset regimes (2020 tech, 2025 gold) that flatter concentration; a different window could change the ranking of the two portfolios.
- This tests one breadth change (1 vs 2) on one universe with one 12-month lookback. It is not a test of Top 3+, different lookbacks, weekly cadence, or momentum blends — all out of scope for this issue.
- Fees would widen the gap against Top 1, not close it: at 247%/yr turnover vs 174%, real commissions and spreads hit the concentrated version harder. Fee sensitivity is future research.
- Cash earns 0% in this test; both portfolios hold essentially no cash (≈0.5%), so there is no cash-drag distortion here.
- Dividends are reinvested (adjusted prices). All four ETFs predate the window (SPY 1993, QQQ 1999, TLT 2002, GLD 2004), so there is no inception bias.
- Backtest ≠ proof. Validation means executable, not trustworthy. Nothing here is investment advice.
Verdict
Reproducibility & assumptions
The rules, evidence and failure analysis above are the reader-facing research. This section preserves the audit trail needed to reproduce the experiment without making engine implementation details part of the main argument.
c2i-research-1.2
Adjusted daily OHLC via investOHLCProxy through MyInvestPilot Agent Lab (same canonical price path as the runs; US daily data served from 2010-01-01; data cutoff 2026-05-01).
- Warm-up: both runs start 2010-01-01; 2010-01-04 → 2010-12-31 is the 252-session momentum warm-up (both runs all-cash in 2010) and is excluded from all reported metrics.
- Evaluation window: 2011-01-03 to 2026-05-01 (3855 trading days), identical for both variants; NAV normalized to 1 at window start.
- Monthly rebalancing on the first trading session of each month; decisions use the prior session’s close; trades execute at the next session. EqualWeight.rebalance_policy = scheduled (weights restored to target at every monthly decision).
- The only changed variable is selection breadth: TopN = 1 (baseline, 100% to the winner) vs TopN = 2 (variant, 50/50 equal weight, rebalanced monthly). Eligibility is always true; no gate, filter or optimizer.
- Long-only, unlevered; cash earns 0%; $0 commission, no slippage in these runs.
- The exact run configs below are copied from the evidence file (_provenance.baseline_config / variant_config) — what was actually run.
Advanced: exact engine configurations
These JSON configs are preserved for auditability and Agent re-runs. Most readers do not need them to understand the study.
{
"name": "Study #3 baseline: SPY/QQQ/TLT/GLD momentum rotation Top 1 (scheduled)",
"description": "Chat2Invest Study #3 (#71) baseline: hold the single top momentum ETF (12-month), monthly rebalance to target weights. Warm-up 2010, evaluation from 2011-01-03.",
"symbols": [
{
"symbol": "SPY"
},
{
"symbol": "QQQ"
},
{
"symbol": "TLT"
},
{
"symbol": "GLD"
}
],
"start_date": "2010-01-01",
"end_date": "2026-05-01",
"currency": "USD",
"market": "US",
"commission": 0,
"strategy_definition": {
"trade_strategy": {
"indicators": [
{
"id": "momentum",
"type": "RateOfChange",
"params": {
"periods": 252,
"column": "Close"
}
},
{
"id": "zero",
"type": "Constant",
"params": {
"value": 0
}
}
],
"signals": [
{
"id": "always_eligible",
"type": "GreaterThan",
"inputs": [
{
"column": "Close"
},
{
"ref": "zero"
}
],
"params": {}
},
{
"id": "cadence",
"type": "RebalanceCadence",
"inputs": [],
"params": {
"frequency": "monthly_first_session",
"bootstrap_on_first_session": true
}
},
{
"id": "rank",
"type": "CrossSectionalRank",
"inputs": [
{
"ref": "momentum"
},
{
"ref": "always_eligible"
},
{
"ref": "cadence"
}
],
"params": {
"direction": "descending"
}
},
{
"id": "selected",
"type": "TopN",
"inputs": [
{
"ref": "rank"
},
{
"ref": "cadence"
}
],
"params": {
"n": 1
}
},
{
"id": "not_selected",
"type": "Not",
"inputs": [
{
"ref": "selected"
}
],
"params": {}
},
{
"id": "weight",
"type": "EqualWeight",
"inputs": [
{
"ref": "selected"
},
{
"ref": "cadence"
}
],
"params": {
"rebalance_policy": "scheduled"
}
}
],
"outputs": {
"buy_signal": "selected",
"sell_signal": "not_selected",
"target_weight": "weight",
"indicators": [
{
"id": "momentum",
"output_name": "cross_sectional_feature"
}
]
}
},
"capital_strategy": {
"name": "RebalancingCapitalStrategy",
"params": {
"initial_capital": 100000,
"gross_exposure": 1
}
}
}
}{
"name": "Study #3 variant: SPY/QQQ/TLT/GLD momentum rotation Top 2 equal-weight (scheduled)",
"description": "Chat2Invest Study #3 (#71) variant: hold the top two momentum ETFs equally weighted (12-month), monthly rebalance to 50/50. Warm-up 2010, evaluation from 2011-01-03.",
"symbols": [
{
"symbol": "SPY"
},
{
"symbol": "QQQ"
},
{
"symbol": "TLT"
},
{
"symbol": "GLD"
}
],
"start_date": "2010-01-01",
"end_date": "2026-05-01",
"currency": "USD",
"market": "US",
"commission": 0,
"strategy_definition": {
"trade_strategy": {
"indicators": [
{
"id": "momentum",
"type": "RateOfChange",
"params": {
"periods": 252,
"column": "Close"
}
},
{
"id": "zero",
"type": "Constant",
"params": {
"value": 0
}
}
],
"signals": [
{
"id": "always_eligible",
"type": "GreaterThan",
"inputs": [
{
"column": "Close"
},
{
"ref": "zero"
}
],
"params": {}
},
{
"id": "cadence",
"type": "RebalanceCadence",
"inputs": [],
"params": {
"frequency": "monthly_first_session",
"bootstrap_on_first_session": true
}
},
{
"id": "rank",
"type": "CrossSectionalRank",
"inputs": [
{
"ref": "momentum"
},
{
"ref": "always_eligible"
},
{
"ref": "cadence"
}
],
"params": {
"direction": "descending"
}
},
{
"id": "selected",
"type": "TopN",
"inputs": [
{
"ref": "rank"
},
{
"ref": "cadence"
}
],
"params": {
"n": 2
}
},
{
"id": "not_selected",
"type": "Not",
"inputs": [
{
"ref": "selected"
}
],
"params": {}
},
{
"id": "weight",
"type": "EqualWeight",
"inputs": [
{
"ref": "selected"
},
{
"ref": "cadence"
}
],
"params": {
"rebalance_policy": "scheduled"
}
}
],
"outputs": {
"buy_signal": "selected",
"sell_signal": "not_selected",
"target_weight": "weight",
"indicators": [
{
"id": "momentum",
"output_name": "cross_sectional_feature"
}
]
}
},
"capital_strategy": {
"name": "RebalancingCapitalStrategy",
"params": {
"initial_capital": 100000,
"gross_exposure": 1
}
}
}
}I want to test a variation
Custom experiments are not open yet. If you understand this study and want to change one thing, choosing below helps us decide what to build next.