MacroThreeAssetMomentumRotationCashEscape
Hypotheses
Macro 3-Asset Momentum Rotation: Hold the Strongest Trending Macro Sleeve of {US Equity, Long Treasuries, Gold} with an Absolute-Momentum Cash Escape (SPY/TLT/GLD.USEQ, Daily Bars, Monthly Rebalance, 3-Parameter)
Hypotheses
A LONG-ONLY, SINGLE-SLEEVE-AT-A-TIME macro REGIME ROTATION on three highly liquid, structurally uncorrelated US ETFs: SPY (US equity beta), TLT (long-duration Treasuries), GLD (gold). Each month the strategy ranks the three by trailing total-return momentum and holds 100% of the strongest sleeve, with an ABSOLUTE-momentum filter that rotates to cash (short T-bill proxy / flat) when even the leader's trailing return is negative. This is a deliberate DEPARTURE from the collided idea family: it is NOT a crypto ratio pair, NOT dollar-neutral, NOT SOL/ETH, NOT a trend/reversion mechanism on a single perp, NOT funding/OI/premium/liquidation/trade-tick, NOT options, NOT a sub-hourly churner, and NOT a cross-sectional dispersion-gated sector basket (the class that just died on 27yr USEQ history — that mechanism ranks MANY correlated names inside one asset class and nets to noise; this ranks THREE deeply uncorrelated macro sleeves whose regimes rotate on multi-quarter horizons). The edge is the well-documented macro momentum + defensive-escape structure (Antonacci-style dual momentum): capital persistently rotates between the risk-on equity regime, the flight-to-duration regime, and the inflation/real-asset regime, and holding whichever sleeve is currently trending — with a hard exit to cash when nothing is trending up — has historically raised risk-adjusted return and roughly halved drawdown versus buy-and-hold equity. It fills the badly under-represented EQUITY venue (non-crypto, non-BTC — the corpus is 62% BTC) with a low-frequency, low-parameter mechanism that has DECADES of clean daily split-adjusted history (GLD since 2004 → ~21yr) for a genuinely powered walk-forward, and it is uncorrelated with the factory's long-biased crypto momentum survivors.
Hypotheses
Implements the hypothesis literally: three uncorrelated macro sleeves (SPY/TLT/GLD.USEQ), daily bars, monthly calendar-anchored rebalance, relative momentum to pick the sleeve plus Antonacci-style absolute momentum for the cash escape, and exactly three free model parameters (lookback_days, skip_days, abs_threshold) plus a sizing fraction. Venue is USEQ as declared -- long-only, leverage 1.0, whole-share sizing (USEQ size precision 0), so no margin is requested and none is consumed. Turnover is a handful of switches a year against ~0.02-0.05% round-trip USEQ costs and multi-month holding periods, so per-trade edge is orders of magnitude above the fee floor. Warm-up is 128 sessions with the default lookback -- a small fraction of both the 500-bar synthetic scenarios and the ~1650-session daily sandbox window -- so the monthly grid fires dozens of times inside verification. Multi-leg execution uses the base template's _submit_entry_instrument/_submit_exit_position with a global pending-order gate because separate instruments do not net. One caveat, stated as required and implemented as asked anyway: 'rotate to cash' is modelled as flat (zero return on cash) rather than a short T-bill proxy, so the backtest slightly understates the defensive state's return versus a real BIL/SHY sleeve.
Hypotheses
Overfit with negative out-of-sample generalization. Walk-forward IS 0.91 -> OOS -0.604 with is_overfitted=true and NEGATIVE OOS Sharpe in all three windows (-1.44/-0.29/-0.07) — the macro-rotation edge reverses on unseen data, it does not merely degrade. Confirmed quantitatively by failed deflated Sharpe: DSR=0.0, expected-max=1.43 over 225 trials (38 effective), PBO=0.66>0.5, is_significant=false, and it does not survive programme-level FDR (4 of 274 kept). Three HARD validity gates fail (OOS<=0, is_overfitted, PBO>0.5), so promotion is impossible and cannot be waived. Sensitivity shows lookback_days is a cliff (0.79->0.21 across +-20%), so there is no robust parameter region to iterate toward — the result is fit to noise, not present in parameter space. Not a fee problem (per-trade 2.05% is healthy) and not a fixable-code problem. This is the recurring SPY/TLT/GLD dual-momentum rotation family that already died twice in the corpus (relative-momentum SPY/TLT/GLD abandoned overfit sim 0.84; QQQ/GLD/TLT dual-momentum cash-escape abandoned risk_reject sim 0.78); the mechanism is sound in the literature but repeatedly re-overfits the same three-sleeve macro history on this venue, so reframing onto another instrument set would just overfit again rather than fix a premise flaw. Overfit -> abandon.
Implementation
Long-only, single-sleeve macro regime rotation on USEQ daily bars across SPY (US equity), TLT (long Treasuries) and GLD (gold). On the first session of each calendar month the three sleeves are ranked by trailing total return over lookback_days sessions (ending skip_days sessions ago) and 95% of equity is put into the leader in whole shares. An absolute-momentum filter overrides the ranking: if even the leader's trailing return does not clear abs_threshold, the book rotates fully to CASH (flat) until the next monthly decision. Only one sleeve is ever held; the previous sleeve is flattened first and the new entry is deferred to a later bar so the sale settles into buying power. calculate_signal returns the leader's trailing momentum every bar (a continuous decision variable), the rebalance grid is keyed on the bar's own (year, month) so it is identical across restarts/backtests/paper, and no leverage or shorting is used.
Verification Results
Confirm the intended warmup gate; the redundant internal None-guards in _momentum mean any mismatch fails safe (no trade), so no fix strictly required.
Verification Results
min_bars_required() overrides the base framework method. The base uses it to gate the primary signal path (line 480: len(self._bars) < _need). The override returns lookback_days+skip_days+2, which is consistent with the internal _momentum guard (lookback+skip+1 per buffer), so no signal fires with insufficient history. Behavior is safe but the shadow is worth noting.
Verification Results
Optional: persist/derive the last-decided month deterministically (e.g. skip re-decision if current month == the month of the currently-held entry) so restart never triggers an off-grid rebalance.
Verification Results
On a process restart, _last_month_key resets to None (in-memory state), so the first primary bar after restart re-decides the target from current momentum rather than waiting for the calendar month boundary. Because the target is a deterministic function of momentum and execution only trades when held != target, a correctly-positioned book will not churn; a mid-month restart could rebalance slightly earlier than the pure monthly grid. This is benign vs. the check-20 anti-pattern (the schedule IS anchored to the bar timestamp, not a bar counter) but slightly weakens strict calendar parity.
Backtest Review
Legitimate, well-documented mechanism (Antonacci-style dual momentum / GEM), NOT a single-name momentum clone and NOT the dispersion-gated sector basket that just died — it rotates THREE structurally uncorrelated macro sleeves (SPY/TLT/GLD) with a cash escape.
Backtest Review
Economics clear the venue floor with wide margin: avg_trade_return_pct 1.765% (USEQ floor 0.05%, prefer >0.10%), profit_factor 1.80, positive expectancy, commissions 0% of gross — this is NOT a fee-edge case.
Backtest Review
Numerically viable sample: 77 rotations over ~21yr (GLD lists 2004), long-only as the hypothesis specifies (0 shorts), trades match the single-sleeve rotation mechanism. entry_diag shows 0 only because all legs are driven manually via _submit_entry_instrument (base-path counters don't track it); 77 trades + 175% return confirm it fired.
Backtest Review
Three clean, bounded parameters (lookback_days, skip_days, abs_threshold) against ~21yr of split-adjusted daily history — a genuinely powered walk-forward is possible, and fills the badly under-represented non-crypto EQUITY venue.
Backtest Review
Implausible-looking entries in the sparse daily_returns display (e.g. +49% Nov-2025) are sampled cumulative returns between trade dates, NOT single-day MTM jumps — reconciled by annualized_volatility 14.3% over 5217 daily obs; not an artifact.
Backtest Review
Base metrics are weak at default params: Sharpe 0.27 (CI [-0.05, 0.61] straddles ~0), max_drawdown 43% — which directly CONTRADICTS the hypothesis's central 'roughly halved drawdown' claim.
Backtest Review
Negative alpha (-0.0032) and information_ratio -0.24 vs the equal-weight 3-ETF basket (benchmark_meaningful=true): at defaults the rotation adds ~no value over just equal-weighting the three sleeves.
Backtest Review
abs_threshold defaults to 0.0, so the 'cash escape' almost never triggers — exposure_pct 95% — meaning the defensive structure the edge depends on is effectively untested until it's tuned.
Backtest Review
CAGR 4.76% is modest; regime attribution shows the edge concentrated in calm terciles and thin in stressed ones.
Analysis
Legitimate, well-documented mechanism (Antonacci dual momentum / GEM) on the under-represented equity venue; not a single-name clone.
Analysis
Per-trade economics clear the near-zero USEQ fee floor comfortably (avg_trade_return_pct 2.05%), so this is NOT a fee failure.
Analysis
Sensitivity is mostly flat except lookback; profit_factor 1.91 and win_rate 0.57 look reasonable in-sample.
Analysis
Decisively OVERFIT: walk-forward IS 0.91 -> OOS -0.604, negative in all three OOS windows (-1.44, -0.29, -0.07). The edge REVERSES out-of-sample, it does not merely decay.
Analysis
PBO 0.66 > 0.5 and DSR 0.0 / is_significant=false / fails programme FDR (keeps 4 of 274): the selected Sharpe is indistinguishable from best-of-N noise over 225 trials (expected-max 1.43 >> selected 0.32).
Analysis
lookback_days is a cliff parameter (Sharpe 0.79 -> 0.21 across the +-20% grid) so there is no robust region to tune toward.
Analysis
Max drawdown 34.3% breaches the hypothesis's own pre-registered 18% cap; the pre-registered min_oos_sharpe 0.8 was missed with -0.60.
Analysis
Near-identical siblings already died: SPY/TLT/GLD relative-momentum rotation (abandoned overfit, sim 0.84) and QQQ/GLD/TLT dual-momentum cash-escape (abandoned risk_reject, sim 0.78).
Analysis
Benjamini-Hochberg at q=0.10 over 274 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
MacroThreeAssetMomentumRotationCashE-8b92f0117a
Outcome Summary
The strategy proposed a classic dual-momentum macro rotation across SPY, TLT, and GLD with a cash escape, targeting the corpus's under-represented equity venue with ~21 years of clean daily history. Its initial backtest cleared the venue's economic floor comfortably (avg per-trade 1.77%, profit factor 1.80) and earned an 'optimize' verdict, but base metrics were weak (Sharpe 0.27, 43% drawdown) and contradicted the hypothesis's 'halved drawdown' claim. Optimization exposed the real problem: walk-forward in-sample Sharpe of 0.91 reversed to -0.60 out-of-sample across all three windows, with PBO 0.66, DSR 0.0, and failure of programme-level FDR. With multiple hard validity gates broken, a cliff-shaped lookback parameter, and two near-identical siblings already abandoned, the analyst concluded the edge was fit to noise and abandoned it after one iteration.
Outcome Summary
A mechanism that is sound in the literature can still re-overfit the same limited macro history repeatedly (this SPY/TLT/GLD family had already died twice), so on a slow, low-sample rotation the only real out-of-sample test is forward paper trading, not tuned backtest statistics.
Outcome Summary
The analyst abandoned it after optimization as decisively overfit: three hard validity gates failed (OOS Sharpe <= 0, is_overfitted=true, PBO 0.66 > 0.5), deflated Sharpe was 0.0 and not significant over 225 trials, it did not survive programme-level FDR, and lookback_days was a cliff parameter (0.79 -> 0.21), leaving no robust region to iterate toward.
Outcome Summary
A long-only, single-sleeve-at-a-time Antonacci-style dual-momentum rotation that each month holds the strongest-trending of SPY, TLT, or GLD (three structurally uncorrelated macro sleeves) and escapes to cash when even the leader isn't trending up, aiming to fill the under-represented non-crypto equity venue.
Outcome Summary
At default parameters the backtest returned 175.86% total (CAGR 4.76%) over ~21 years and 77 trades with profit factor 1.80 and avg per-trade return 1.77%, but Sharpe was only 0.27 (CI [-0.05, 0.61]) with a 43% max drawdown; after optimization it degraded further out-of-sample, with walk-forward in-sample Sharpe 0.91 reversing to OOS -0.60 (negative in all three windows: -1.44/-0.29/-0.07).
Backtest and paper results are hypothetical. Trading involves risk of loss.