Skip to content

View original

CrossAssetDualMomentumRotationUseq

Hypotheses

Cross-Asset Dual-Momentum Rotation (SPY/QQQ/GLD risk sleeve, TLT defensive) on USEQ Daily Bars — Monthly Rebalance, Absolute + Relative Momentum, 12-1 Lookback, Commission-Free, Decades of OOS History

Hypotheses

A long-only, multi-instrument, monthly-rebalanced cross-asset ROTATION strategy on liquid USEQ ETFs, using DAILY bars (decades of split-adjusted history). Deliberate pivot away from the dead crypto momentum-confluence family (two XRP variants + LTC/DOT/BNB/SOL/LINK clones all died overfit, L91): the fix is a mechanism whose OUT-OF-SAMPLE history is deep enough to defeat overfitting. Cross-asset dual momentum is a low-parameter allocation rule with 25+ years of clean daily USEQ history, near-zero turnover, and commission-free execution. Distinct from the SPY/TLT binary hysteresis run in flight (that is a two-state single-pair switch; this ranks a 3-asset risk sleeve and gates with absolute momentum) and from the dead L74 intra-equity anomalies (all single-beta bets).

Hypotheses

Implements the hypothesis exactly: a 3-asset risk sleeve (SPY/QQQ/GLD) ranked by relative momentum, gated by absolute momentum, with TLT as the defensive leg, monthly-rebalanced on USEQ daily bars. Only three free parameters (lookback_days, skip_days, abs_threshold) are searched against ~20 years of common split-adjusted daily history (GLD lists 2004-11, so common history runs from ~2005-11 after the 13-month warm-up) — that OOS depth is the whole point of the pivot away from the short-history crypto momentum-confluence family. calculate_signal returns the leading risk asset's raw 12-1 momentum every session (a continuous, daily-varying decision variable), while the rotation decision is applied on the calendar rebalance grid. All four legs are managed manually via _submit_entry_instrument / _submit_exit_position (the base class only auto-manages the primary instrument), so should_enter returns None and should_exit False to avoid a competing SPY order; every order action is gated on no leg having a working or in-flight order, and a new entry is deferred to a later bar than the exit that frees the capital, so the book is never in two legs at once. Venue is USEQ (the only venue listing these ETFs) with leverage=1.0, which the code does not reference in sizing — consistent with the long-only, unlevered design. Distinct from the SPY/TLT hysteresis run in flight: that is a two-state single-pair SMA switch; this ranks three risk assets on 12-1 momentum and gates with an absolute-momentum hurdle.

Hypotheses

Hard PBO gate failure (0.5516 > 0.5) makes promotion impossible and cannot be waived; it is corroborated by a decisive robustness collapse: deflated_sharpe=0.0, is_significant=false, and the candidate does not survive programme-level FDR (4 of 276) — the selected Sharpe is a best-of-N artifact over 225 trials, not a validated edge. There is no robust region to iterate toward: lookback_days is a cliff parameter and abs_threshold never binds. The strategy is structurally un-validatable by backtest (provenance flags the OOS vault as UNDERPOWERED, ~15 expected trades vs 100 needed for inference), so no parameter change can lift it over the significance gates. This is the recurring cross-asset dual-momentum ETF rotation family (SPY/QQQ/GLD/TLT), which has already been abandoned at least three times as overfit/risk_reject on near-identical mechanics (similarity 0.74-0.82). Per the overfit->abandon rule, re-tuning the same mechanism re-overfits rather than revealing a real edge; not revise_hypothesis because the mechanism itself — not a specific dead target — is what fails.

Implementation

Long-only cross-asset dual-momentum rotation on USEQ daily bars. One 100%-notional sleeve is rotated monthly between a risk sleeve (SPY, QQQ, GLD) and a defensive leg (TLT). Each month, relative momentum ranks the three risk ETFs by their 12-1 total return (return over `lookback_days` = 252 sessions ending `skip_days` = 21 sessions ago, which drops the short-term reversal month) and picks the leader; absolute momentum then requires that leader's own 12-1 return to exceed `abs_threshold` (a cash hurdle, default 0). If it does, the sleeve holds the leader; if it does not, the sleeve holds TLT. The rebalance date is derived purely from the bar's own UTC (year, month) — the first session of each calendar month — so the schedule is identical across restarts, backtests and paper replay, never anchored to a process-relative bar counter. Sizing is whole shares of ~95% of equity, no leverage, no shorting. Turnover is a handful of switches per year, which matters because USEQ pays no commission but does pay the spread.

Verification Results

If the override is intentional (it is, given the variable lookback), leave as-is; the value is correct.

Verification Results

min_bars_required() overrides the base framework method (flagged by static analysis). This appears deliberate — it correctly scales the warm-up to lookback_days + skip_days + 2 so the momentum window is fully populated before the strategy decides. No functional problem observed, but confirm the base class honors the override for gating calculate_signal dispatch.

Verification Results

Sandbox is healthy (+72%, avg_trade_return_pct 4.34% far above the USEQ spread floor, PF 2.83), but headline Sharpe is modest (0.54, CI [-0.20, 1.30] straddling zero) with benchmark_correlation 0.45 to an equal-weight basket and information_ratio -0.13 vs that basket. Dual-momentum rotation is a low-turnover, well-trodden allocation rule; the analyst should confirm on full ~20yr history that the absolute-momentum TLT gate adds risk-off value beyond simply holding the basket, since the sandbox window (1650 days) does not include the 2004-2020 period where the crash-avoidance edge historically shows up.

Backtest Review

Per-trade edge far above the USEQ floor: avg_trade_return_pct 4.98% (floor ~0.05%), PF 3.43, win_rate 0.66, commission 0% and impact only 0.73% of gross — not fee-fragile.

Backtest Review

Trade cadence matches the hypothesis: 56 long-only trades (0 shorts) over ~21yr for a monthly rotation that mostly re-holds — the expected ~2.6 switches/yr, not over-trading or a frozen signal.

Backtest Review

Deep, clean OOS history (2005-2026 spanning multiple crash regimes) — the deliberate remedy to the dead single-name crypto-momentum overfitting family; sample is more than adequate for optimization.

Backtest Review

Viable risk-adjusted profile: Sharpe 0.487 with CI [0.136, 0.824] (positive, not straddling zero), PSR 0.988, CAGR 11.16%, max_drawdown 27.7%, positive alpha +1.88%/yr.

Backtest Review

Information ratio vs the equal-weight basket is ~0 (-0.009) and benchmark_correlation 0.55 — the absolute-momentum TLT gate may add little risk-adjusted value beyond simply holding the basket; must be confirmed on the full walk-forward.

Backtest Review

Headline Sharpe (0.49) is well below the promotion tier; the edge is real but modest and will be tested hard by deflation over ~225 trials on only 3 free parameters.

Backtest Review

Large accumulated per-period prints (e.g. 2026-06 +54%) are multi-month-hold accumulations sampled at trade-close, not real single-month moves — plausible but worth verifying the equity-curve shape during analysis.

Analysis

Per-trade edge far above the USEQ floor (avg_trade_return_pct 6.38%, PF 4.82, 0% commission, impact only 0.59% of gross) and trade cadence matches the monthly-rotation hypothesis (50 long-only trades, 0 shorts over ~21yr).

Analysis

Walk-forward is NOT overfit by the ratio test (is_overfitted=false, avg OOS Sharpe 0.672 > 0.5), holdout is nominally positive (Sharpe 0.826 on 11 trades, ratio 1.229, consistent_with_oos=true).

Analysis

Deep, clean split-adjusted history and a low-parameter allocation rule — the intended fix for the short-OOS crypto momentum family.

Analysis

HARD gate failure: PBO 0.5516 > 0.5 — the parameter selection is more likely than not overfitting. This can NEVER be waived, so promotion is impossible.

Analysis

Robustness collapses under multiple-testing correction: deflated_sharpe 0.0, is_significant=false, does not survive programme-level FDR (Benjamini-Hochberg keeps 4 of 276). The selected Sharpe is indistinguishable from best-of-N noise over 225 trials.

Analysis

lookback_days is a CLIFF parameter (Sharpe 1.22 at base but 0.28 at 328, 0.67 at 268) — no robust region to iterate toward. abs_threshold sits pinned at 0.0 across every variation (the absolute-momentum hurdle never binds).

Analysis

Structurally un-validatable: the provenance note flags the OOS vault as UNDERPOWERED (~15 expected trades vs 100 needed) — no history slice is both short enough to leave training data and long enough to validate a rule this slow.

Analysis

max_drawdown 30.3% doubles the 15% equities floor; worst stress window (rate_shock_2022) −30.4% return / −33% DD.

Analysis

Near-identical siblings have died at least three times: SPY/TLT/GLD relative-momentum (overfit), QQQ/GLD/TLT dual-momentum (risk_reject), SPY/TLT/GLD macro rotation (overfit). The cross-asset dual-momentum rotation mechanism does not survive this pipeline.

Analysis

Benjamini-Hochberg at q=0.10 over 276 programme candidates keeps 4. A candidate that does not survive here is not distinguishable from the programme's own noise, however good its individual statistics look.

Outcome Summary

CrossAssetDualMomentumRotationUseq-80a8b797f6

Outcome Summary

This strategy was a deliberate pivot away from the dead single-name crypto momentum family: a long-only cross-asset dual-momentum rotation across SPY/QQQ/GLD with a TLT defensive leg, chosen because its monthly, low-parameter allocation rule carries decades of clean USEQ history. The backtest review approved optimization on the strength of a per-trade edge far above the fee floor (avg_trade_return_pct ~5-6%, PF 3.4-4.8) and a deep multi-regime sample, and the optimized run returned 854.7% (CAGR 11.04%) at Sharpe 0.58. But the analyst abandoned it after optimization: PBO 0.5516 breached the unwaivable 0.5 hard gate, deflated Sharpe was 0.0 with the candidate failing programme-level FDR, lookback_days was a cliff parameter and abs_threshold never bound, and a 30.3% drawdown doubled the equities floor. With the OOS vault flagged underpowered and near-identical siblings already dead three times, the mechanism itself was judged un-validatable, ending the run at the ANALYZING stage.

Outcome Summary

A slow, low-turnover rule can be structurally un-validatable by backtest (the OOS vault was flagged UNDERPOWERED at ~15 expected trades vs ~100 needed), so re-tuning the same cross-asset rotation mechanism — which has now died 3+ times on near-identical mechanics — re-overfits rather than revealing a real edge.

Outcome Summary

The analyst abandoned it after optimization on a hard PBO gate failure (0.5516 > 0.5, unwaivable), corroborated by a robustness collapse: deflated_sharpe 0.0, not significant, and failure to survive programme-level FDR (4 of 276 kept) — the selected Sharpe was a best-of-N artifact over 225 trials.

Outcome Summary

A long-only, monthly-rebalanced cross-asset dual-momentum rotation on USEQ daily bars, ranking a SPY/QQQ/GLD risk sleeve by 12-1 momentum and gating with absolute momentum into a defensive TLT leg, deliberately pivoting to a low-parameter rule with decades of clean OOS history to escape the dead crypto-momentum family.

Outcome Summary

The optimized backtest over ~21 years returned 854.7% total (CAGR 11.04%) with Sharpe 0.58, profit factor 4.82, win rate 0.80, avg_trade_return_pct 6.38% and 50 long-only trades, but max drawdown was 30.3% and the deflated Sharpe was 0.0 with is_significant=false. The walk-forward was not flagged overfit (avg OOS Sharpe 0.672) and the holdout passed (Sharpe 0.826 on 11 trades), yet PBO came in at 0.5516.
Strategy report

Backtest and paper results are hypothetical. Trading involves risk of loss.