Strategies
USEQ Asset-Class Rotational Momentum: Hold Top-3 of 5 Asset-Class ETFs (SPY/EFA/EEM/IEF/GLD) by 12-Month Return, Equal-Weight, Monthly Rebalance, Daily Bars, Long-Only Unlevered
Outcome: Abandoned
UseqAssetClassTop3MomentumRotation
Outcome Summary
The hypothesis proposed a 20-year USEQ test of top-3-of-5 asset-class momentum rotation (SPY/EFA/EEM/IEF/GLD) with monthly rebalancing, to add a non-crypto mechanism to the research corpus. The developer produced a partial implementation with ranking, equal-weight slot sizing and an optional absolute-momentum SHY filter. The coding stage timed out three times, and the run was abandoned as 'coding_stuck_3_timeouts'. No backtest, optimization or analyst verdict was produced, so the idea itself remains untested.
Hypothesis
Iteration 2: the only change is to fix the Layer-2 crash. _pending() called self.cache.orders_inflight, which the synthetic mock cache does not provide. It now always uses orders_open and calls orders_inflight only when the cache has it (the real NautilusTrader cache does). Signal, rebalance, sizing and config are unchanged. Gross exposure is at most 0.97x equity: sells happen on one session and buys on a later session.
coding_stuck_3_timeouts
Implementation
Monthly (calendar-anchored) rotation into the top-3 of SPY/EFA/EEM/IEF/GLD by trailing 252-session return, equal-weight 1/3 each, whole shares, long-only, unlevered on USEQ daily bars. Pre-registered variant (use_abs_filter=True) moves negative-momentum slots to SHY.
Iteration History
Verification failed (Layer 2 — synthetic scenarios): Parameters used: ['top_n', 'cash_symbol', 'min_notional', 'notional_pct', '_param_bounds', 'abs_threshold', 'lookback_bars', 'use_abs_filter'] Check that __init__ sets all attributes from self.parameters.get(). - steady_uptrend: AttributeError: '_MockCache' object has no attribute 'orders_inflight' (bar timestamp: 1735704780000) - steady_downtrend: AttributeError: '_MockCache' object has no attribute 'orders_inflight' (bar timestamp: 1735704780000) - flat_ranging: AttributeError: '_MockCache' object has no attribute 'orders_inflight' (bar timestamp: 1735704780000) - volatility_spike: AttributeError: '_MockCache' object has no attribute 'orders_inflight' (bar timestamp: 1735704780000) - zero_volume: AttributeError: '_MockCache' object has no attribute 'orders_inflight' (bar timestamp: 1735704780000) - price_gap: AttributeError: '_MockCache' object has no attribute 'orders_inflight' (bar timestamp: 1735704780000)
sandbox_timeout: Verification failed (Layer 3 — sandbox backtest): smoke test exceeded the 300s wall-clock limit on a ~20000-bar window (2400 days of SPY.USEQ-1-DAY-LAST-EXTERNAL). This almost always means per-bar work that scales with history — e.g. rescanning the full funding/supplementary series, or rebuilding a list and calling min()/sorted() inside calculate_signal()/on_bar() on every bar. Precompute sorted timestamp arrays ONCE in __init__ and use bisect, or cache lookups keyed by timestamp, so per-bar cost is O(log n) not O(n).
Outcome Summary
Multi-leg daily rotation code with persisted slot state and staged exits and entries timed out three times in coding, so a future attempt should start with a simpler minimal implementation (for example, the primary variant only) that can finish within the coding time limit.
The run was abandoned in the coding stage with reason 'coding_stuck_3_timeouts' after 3 iterations. It never reached verification, backtest review, optimization, analyst review or risk review.
A long-only, unlevered monthly rotation on USEQ that ranks five asset-class ETFs (SPY, EFA, EEM, IEF, GLD) by 12-month return and holds the top 3 at equal weight, based on cross-asset time-series momentum (Asness-Moskowitz-Pedersen 2013); a pre-registered variant moves any top-3 name with a negative return into SHY.
No performance data exists: the backtest report is empty, no optimization ran, and there are no Sharpe, return or trade-count figures.
Analysis
Asset Class Momentum
Backtest and paper results are hypothetical. Trading involves risk of loss.