Failed

Dual Momentum Backtest: Does the Absolute-Momentum Gate Reduce Drawdown?

If we keep the same relative-momentum rotation rule, what changes when we add an absolute-momentum gate? Does drawdown improve, and what does the protection cost?

Over 2011–2026, adding a “positive 12-month momentum” absolute gate to a monthly top-1 relative-momentum rotation (SPY / IWM / EFA) did not reduce drawdown: the maximum drawdown got slightly worse (−33.4% → −35.7%) while compound growth nearly halved (9.0% → 4.6% a year). The gate spent about 12% of the window in cash, dodged part of 2022, but systematically exited after declines and re-entered after recoveries — missing the 2019, 2020 and 2023 rebounds. As implemented, this gate fails.

Strategy family
Momentum rotation + absolute gate / cash
Universe
SPY, IWM, EFA
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)
Last reviewed
2026-08-10

Short answer

Adding an absolute-momentum gate — hold the relative-momentum winner only while its own 12-month return is positive, otherwise cash — to a monthly top-1 rotation over SPY/IWM/EFA did NOT reduce drawdown over the 2011–2026 evaluation window. The maximum drawdown went from −33.4% to −35.7%, while compound growth fell from 9.0% to 4.6% a year and a $100,000 stake ended at $374,833 vs $199,889. The gate spent about 12% of the window in cash and clearly helped only in 2022 (−13.3% vs −15.7%). Everywhere else the protection cost more than it saved: the 12-month lookback exits late and re-enters late, so the rotation systematically missed the 2019, 2020 and 2023 recoveries.

Controlled comparison, not a strategy recommendationThis study isolates one changed variable — the absolute-momentum gate — on one evaluation window with one set of execution assumptions. It does not prove that all momentum gates fail, and it is not investment advice.

Why this question matters

“Dual momentum” is one of the most searched strategy families on the web. The pitch is intuitive: momentum rotation picks the strongest asset, and an absolute-momentum gate (only hold it if it is also rising) is supposed to protect against bear markets. Before trusting that intuition it should be tested as a controlled experiment: same universe, same lookback, same rebalance, same costs, one changed variable — with the failure periods, cash exposure and missed recoveries shown, not just the CAGR.

This is deliberately a “Dual Momentum-style controlled implementation”, not an exact reproduction of Gary Antonacci’s published strategy. The live Strategy DSL supports top-N 12-month relative momentum with a positive-momentum eligibility gate and a cash fallback, which is the closest faithful setup. The difference matters: the published results describe exactly this implementation, on exactly this window.

Hypothesis

An absolute-momentum gate should cut the worst drawdowns of a momentum rotation by moving to cash when the selected asset’s own 12-month momentum turns negative. The open question is the price: how much return, time-in-cash and missed-recovery cost the protection carries, and whether the gate exits and re-enters at systematically bad times.

Baseline and changed variable

Controlled comparison — one variable changed (frozen before any run)
BaselineAbsolute-gate variant
UniverseSPY · IWM · EFASPY · IWM · EFA
Momentum lookback252 sessions (12 months)252 sessions (12 months)
SelectionTop-1 relative-momentum winnerTop-1 relative-momentum winner
RebalanceMonthly (first trading session)Monthly (first trading session)
Changed variableGate: winner must have momentum > 0, else cash
Fallback— (never triggers)Cash (empty selection ⇒ all-zero weights)
Costs$0 commission$0 commission
Warm-up window2010-01-04 → 2010-12-312010-01-04 → 2010-12-31
Evaluation window2011-01-03 → 2026-05-012011-01-03 → 2026-05-01
Data cutoff2026-05-012026-05-01

Both sides are the same canonical Strategy DSL graph — indicators, cadence, ranking, TopN(n=1), equal-weight target vector, RebalancingCapitalStrategy with 100% gross exposure — except for one node: the eligibility series that filters symbols before ranking. The baseline uses an always-true condition (close price > 0); the variant uses the winner’s 12-month momentum > 0. When the gate fails, no symbol is eligible, TopN selects nothing and the equal-weight vector is all zeros, so the portfolio holds cash until the next monthly decision.

Warm-up is explicit: a 252-session momentum lookback needs ~1 year of data, and the shared price source serves US daily data from 2010-01-01. Both runs were all-cash through 2010 (momentum not yet computable). Every reported metric, table and chart covers only the evaluation window starting 2011-01-03, with NAV normalized to 1 at that point.

Exact rules

  • Universe: SPY (SPDR S&P 500), IWM (iShares Russell 2000), EFA (iShares MSCI EAFE), daily adjusted closes.
  • Momentum: RateOfChange over 252 trading sessions on the close (12-month percentage change), evaluated per symbol.
  • Baseline: rank the three assets by 12-month momentum (descending); hold the top-1 winner; rebalance on the first trading session of each calendar month.
  • Variant: identical, plus an eligibility gate — a symbol is eligible only while its own 12-month momentum is strictly above 0. If the winner fails the gate, no symbol is eligible and the portfolio moves to cash at the next monthly decision; it re-enters only when some asset’s momentum turns positive.
  • Trades execute at the next session after the monthly decision (documented engine behavior — decisions use the prior session’s close).
  • Long-only, unlevered. Cash earns 0% in the engine. No leverage, no derivatives, no shorting.
  • No slippage or commissions in the engine 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). Annual returns show the pattern: the gate’s impact is concentrated in 2011 (−24.4% vs −12.7%), 2012 (+7.8% vs +15.1%), 2019 (+10.9% vs +25.7%), 2020 (−5.2% vs +18.2%), 2022 (−13.3% vs −15.7%) and 2023 (+8.8% vs +19.0%). In 2013, 2014, 2017, 2018, 2021 and 2024–2026 the winner’s momentum never turned negative, so the gate never triggered and the two portfolios are nearly identical.

CAGR
+9.0%+4.6%
Max drawdown
-33.4%-35.7%
Volatility
+18.6%+17.2%
Sharpe
0.460.26
Calmar
0.270.13
Avg cash
+1.1%+11.7%
Full metric comparison, evaluation window 2011-01-032026-05-01
MetricRelative momentum onlyMomentum + absolute gate
CAGR+9.0%+4.6%
Maximum drawdown-33.4%-35.7%
Annualized volatility+18.6%+17.2%
Sharpe ratio0.460.26
Calmar0.270.13
Final value of $100,000$374,833$199,889
Total trades8583
Trades per year5.65.4
Dollar turnover (% of avg. AUM / yr)+264.9%+261.8%
Average cash (% of portfolio)+1.1%+11.7%
Annual returns (%) — Relative momentum only vs Momentum + absolute gate
YearRelative momentum onlyMomentum + absolute gateDifference
2011-12.7%-24.4%-11.6
2012+15.1%+7.8%-7.3
2013+23.3%+23.3%-0.0
2014+5.2%+5.2%+0.0
2015-3.4%-1.6%+1.8
2016+8.3%+5.0%-3.3
2017+12.5%+12.5%+0.0
2018-8.2%-8.3%-0.0
2019+25.7%+10.9%-14.7
2020+18.2%-5.2%-23.4
2021+16.1%+16.1%-0.0
2022-15.7%-13.3%+2.3
2023+19.0%+8.8%-10.2
2024+17.5%+17.5%+0.0
2025+14.4%+14.4%-0.0
2026 (YTD)+14.5%+14.5%-0.0
02.552011-01-032026-05-01Relative momentum onlyMomentum + absolute gate
Equity curve — net value, start = 1
-40%-35%-30%-25%-20%-15%-10%-5%0%2011-01-032026-05-01Relative momentum onlyMomentum + absolute gate
Drawdown path (%)
-30%-15%0%15%30%11121314151617181920212223242526Relative momentum onlyMomentum + absolute gate
Annual returns (%)
0%25%50%75%100%11121314151617181920212223242526
Average cash exposure by year (%) — Momentum + absolute gate (daily sampled)

Where the strategy failed

The gate exits late and re-enters lateA 12-month momentum lookback turns negative months after a peak and turns positive months after a bottom. The variant sold SPY on 2022-06-02 at $386.53 (momentum −1.3% at the June decision), sat in cash for 209 sessions, then re-entered EFA on 2023-04-04 at $64.41 — after SPY had already recovered from its October 2022 low. The same pattern hurt in 2019–2020: sold SPY 2020-04-02 at $224.73 near the COVID bottom and re-bought at $280.98 on 2020-06-02, missing the entire V-shaped recovery (−5.2% vs +18.2% in 2020).
  • 2011: the gate delayed the SPY re-entry to 2011-11-03, a month after the October 4 market low; 2011 ended −24.4% vs baseline −12.7%.
  • 2012: a June 2012 cash month plus the 2011 damage produced +7.8% vs +15.1%; the variant’s deepest drawdown episode (2011-05-02 → 2015-02-12, −35.7%) lasted nearly four years.
  • 2019: exited SPY 2019-01-03 at $221.93 (momentum −7.4%), whipped back in via IWM then SPY by April, and missed the January–April recovery: +10.9% vs +25.7%.
  • 2023: after re-entering in April, relative-momentum ranking flip-flopped between EFA and SPY four times (Apr→Jul→Aug→Dec), each round-trip adding friction: +8.8% vs +19.0%.
  • Cash drag: the gate held the portfolio in cash ~12% of the window on average — 59% in 2022, 26% in 2023, 25% in 2016, ~17% in 2019 and 2020. Cash earns 0% in this engine.
  • The gate never reduced the maximum drawdown: both variants’ worst episode is deeper than the baseline’s worst (COVID, −33.4%, recovered by August 2020).
Largest drawdown episodes (depth) — evaluation window
VariantStartTroughEndDepth
Relative momentum only2020-02-212020-03-232020-08-05−33.4%
Relative momentum only2011-05-022011-10-042013-04-09−30.0%
Momentum + absolute gate2011-05-022011-10-042015-02-12−35.7%
Momentum + absolute gate2018-09-052020-03-232021-02-05−35.4%

Limitations and counter-evidence

Counter-evidence — the gate did provide some real protection. It cut the 2022 calendar-year loss from −15.7% to −13.3%, trimmed 2015 (−1.6% vs −3.4%), and lowered annualized volatility from 18.6% to 17.2%. The 2022 avoidance is genuine: the gate exited SPY in June 2022 and stayed out for most of the bear market. The problem is that over the full window the avoided losses are smaller than the missed recoveries: a 2.3pp worse maximum drawdown and a 4.4pp worse annual return.

  • 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. A longer history (including 2008) could change relative performance; this study cannot observe it.
  • Single evaluation window: 2011–2026 contains the 2020 COVID crash and the 2022 bear but no 2008-style collapse. Relative performance is window-dependent.
  • This tests one gate design: 12-month lookback, strict > 0 threshold, monthly execution, cash fallback. It is not a test of 6-month lookbacks, T-bill fallbacks, 1- and 3-month momentum blends, or daily execution — all of which are related research.
  • “Dual Momentum-style controlled implementation”: the DSL semantics (top-1 12-month relative momentum + positive-momentum gate → cash) are a faithful simplification, not an exact reproduction of the published strategy’s US-vs-EAFE selection and T-bill-relative absolute test.
  • Cash earns 0% in the engine. A T-bill fallback would add a small return and change the comparison modestly.
  • $0 commission assumption. Turnover is high on both sides (~265% of AUM per year) because the monthly rotation churns whenever ranking flips; real fees and spreads would hit both variants hard, roughly equally.
  • Dividends are reinvested in the backtest (adjusted prices). SPY (1993), IWM (2000) and EFA (2001) predate the window, so there is no ETF inception bias here.
  • Backtest ≠ proof. Validation means executable, not trustworthy. Nothing here is investment advice.

Verdict

Verdict: failed as implementedThe positive-momentum absolute gate on this 12-month top-1 rotation is not a free lunch: it made the maximum drawdown slightly worse (−33.4% → −35.7%) while cutting compound growth nearly in half (9.0% → 4.6%). The protection was real only in 2022 and 2015; the 12-month lookback’s late exits and late re-entries systematically missed the 2019, 2020 and 2023 recoveries. This does not condemn all absolute-momentum gates — it defines the baseline against which faster gates (6-month lookback), earning fallbacks (T-bills) and blended momentum (1- and 3-month) should be measured.

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.

Reproducibility record
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.
  • Baseline eligibility is always true (close > 0); the variant eligibility is 12-month momentum > 0 — the single changed variable.
  • Long-only, unlevered; cash earns 0%; $0 commission, no slippage in the engine 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.

Relative momentum only (Study #2 baseline: relative momentum rotation (SPY/IWM/EFA, 12M, monthly))
Exact baseline configuration recorded in study provenance.
{
  "name": "Study #2 baseline: relative momentum rotation (SPY/IWM/EFA, 12M, monthly)",
  "description": "Chat2Invest Study #2 (#68) baseline: hold the relative-momentum winner. Warm-up 2010 (252d momentum), evaluation from 2011-01-03.",
  "symbols": [
    {
      "symbol": "SPY"
    },
    {
      "symbol": "IWM"
    },
    {
      "symbol": "EFA"
    }
  ],
  "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": "membership_change"
          }
        }
      ],
      "outputs": {
        "buy_signal": "selected",
        "sell_signal": "not_selected",
        "target_weight": "weight",
        "indicators": [
          {
            "id": "momentum",
            "output_name": "cross_sectional_feature"
          },
          {
            "id": "always_eligible",
            "output_name": "cross_sectional_eligible"
          }
        ]
      }
    },
    "capital_strategy": {
      "name": "RebalancingCapitalStrategy",
      "params": {
        "initial_capital": 100000,
        "gross_exposure": 1
      }
    }
  }
}
Momentum + absolute gate (Study #2 variant: relative momentum + absolute momentum gate (cash fallback))
Exact variant configuration recorded in study provenance.
{
  "name": "Study #2 variant: relative momentum + absolute momentum gate (cash fallback)",
  "description": "Chat2Invest Study #2 (#68) variant: same rotation, but the top-1 risky asset must have positive 12-month momentum; otherwise hold cash.",
  "symbols": [
    {
      "symbol": "SPY"
    },
    {
      "symbol": "IWM"
    },
    {
      "symbol": "EFA"
    }
  ],
  "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": "eligible",
          "type": "GreaterThan",
          "inputs": [
            {
              "ref": "momentum"
            },
            {
              "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": "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": "membership_change"
          }
        }
      ],
      "outputs": {
        "buy_signal": "selected",
        "sell_signal": "not_selected",
        "target_weight": "weight",
        "indicators": [
          {
            "id": "momentum",
            "output_name": "cross_sectional_feature"
          },
          {
            "id": "eligible",
            "output_name": "cross_sectional_eligible"
          }
        ]
      }
    },
    "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.

© 2023–2026 Chat2Invest — evidence-first ETF strategy research.