CrossSectionalMomentumMajorsLongShortBasket
Hypotheses
Cross-Sectional Momentum Long/Short Across Liquid Majors (BINANCE USD-M, Weekly Rebalance, Dollar-Neutral Basket)
Hypotheses
A DOLLAR-NEUTRAL, MULTI-INSTRUMENT cross-sectional momentum strategy on a fixed basket of ~10 liquid BINANCE USD-M perpetuals (BTC, ETH, SOL, BNB, XRP, ADA, DOGE, AVAX, LINK, LTC). Each rebalance, rank every symbol by its trailing N-day return, go LONG the top-K performers and SHORT the bottom-K performers with equal dollar weight per leg so the book is beta-neutral. The edge is the well-documented cross-sectional momentum / dispersion premium in crypto: relative winners keep outperforming relative losers over multi-day horizons. CRITICAL DESIGN NOTES distinguishing this from the closed families: (1) this is NOT a same-asset basis or funding-carry trade — each leg is a different asset with genuine directional price PnL the engine credits, so PnL does not cancel to zero; (2) it does NOT depend on funding being credited as a cash flow; (3) it is bar-driven (daily OHLCV), not tick-driven; (4) entries fire on EVERY rebalance for the full basket, so walk-forward OOS windows are densely populated — the opposite of the event-sparse drawdown-accumulation failures. Kept intentionally simple: 3 tunables (lookback N, basket fraction K, rebalance period) to resist overfitting.
Hypotheses
Iteration 2 fixes ONLY the gross-exposure control, per feedback, and leaves the validated signal (lookback_days=30, top_k=3, rebalance_days=7) untouched. Investigation of the engine shows the reported exposure_pct=602% is NOT notional leverage: metrics.py computes exposure_pct as time-in-market = sum(duration_ns across ALL positions)/span, so a 6-leg always-invested book reads ~6x=~600% by construction. Meanwhile runner.py adds no extra venue when all legs share .BINANCE (single 100k account, total_starting_capital stays 100k) and venue_configs sets OmsType.NETTING, so positions_open()[0] is the true net position and the single-delta rebalance already nets to absolute targets each period without accumulating gross. The realized gross notional was therefore already ~90% of equity. To satisfy the feedback's concrete request and make the <=90% gross guarantee provable/auditable, _rebalance now (1) builds absolute per-leg desired notionals, (2) applies a hard cap: if Sum|notional| > gross_target*equity it scales every target down so summed gross == the cap (robust to any future param combo), and (3) logs realized target gross%/net every rebalance for verification (expected ~90% eq, net ~0). No signal params, imports, or hooks changed, so earlier passing layers are preserved; the change is confined to sizing/accounting exactly as instructed.
Hypotheses
Failed deflated Sharpe and a NEGATIVE forward holdout on attempt 1. DSR=0.1655 (vs 0.95 bar) with the optimized Sharpe 0.555 BELOW the 225-trial expected-max luck bar of 0.860 (is_significant=false, sharpe_ci_low -0.0716 straddling 0, PBO 0.7143 >0.5) — after multiple-testing correction the selected config is statistically indistinguishable from best-of-N noise. The high probabilistic_sharpe (0.9614) is the classic PSR-vs-DSR trap: PSR ignores the 225-trial count that DSR corrects for. Two independent forward gates concur and are decisive: the time-ordered HOLDOUT FAILED and is NEGATIVE (holdout_sharpe -0.527, ratio -1.701 — the untouched recent window loses money) and the walk-forward is is_overfitted=TRUE (avg IS 0.894 -> avg OOS 0.310, OOS windows [-0.858, 1.227, 0.560], one negative and the average carried by a single window). This reflects genuine recent decay: optimized annual returns fall to 2025 +0.04% and 2026 -7.95% with rolling Sharpe running to ~-5 through mid-2026. The edge is outlier-carried (return_kurtosis 67-99, skew 5.4-6.2, tail_ratio 0.47), concentrated in a few months (2021-02 +39%, 2024-12 +45%), with a thin profit factor (1.14-1.16). The clean sensitivity grid (1 cliff) measures consistency, not significance, and cannot override a negative holdout + DSR 0.17 + is_overfitted + CI through 0. Not iterate (attempt 1 of 2): the sensitivity surface is a flat plateau sitting UNIFORMLY at ~0.3-0.57 Sharpe — the entire parameter space is below the 0.86 luck bar — and the binding failure is a negative forward holdout driven by 2025-2026 regime decay, not an under-explored region; a second best-of-225 sweep re-selects another sub-significant, decaying config. Not revise_hypothesis: the net-directional momentum-basket mechanism is already validated on promoted siblings (Absolute Momentum ~1.36, Dual Momentum ~1.61), and this dollar-neutral cross-sectional L/S variant deliberately strips out the directional Sharpe that made those siblings significant — the same failure signature as the abandoned BinanceAbsoluteTimeSeriesMomentumLSBasketDaily. This is variant-selectivity failing deflation on a fine universe, not a proven mechanism stranded on a dead target. FAILURE PATTERN: recasting the validated net-directional major-basket momentum as a dollar-neutral cross-sectional L/S trade removes the directional exposure that carried the promoted siblings, leaving a market-neutral edge too modest to clear best-of-225 deflation (Sharpe 0.55 below the 0.86 luck bar, DSR 0.17, PBO 0.71) whose forward holdout is NEGATIVE (-0.527) as it decays through 2025-2026. A clean sensitivity grid, low fees, and PSR 0.96 do not rescue a construction that fails deflated Sharpe with a losing untouched holdout; the promoted directional Absolute/Dual momentum baskets remain the configurations where this class clears the bar.
Implementation
Dollar-neutral cross-sectional momentum long/short over 10 liquid Binance USD-M majors (BTC primary + ETH, SOL, BNB, XRP, ADA, DOGE, AVAX, LINK, LTC), daily bars, rebalanced every rebalance_days. Ranks the basket by trailing lookback_days return, goes long the top_k and short the bottom_k with equal dollar weight per leg (beta-neutral). Each leg is moved to an ABSOLUTE signed-notional target with a single delta order under NETTING, and an explicit gross clamp scales all targets so summed |notional| <= gross_target * equity (provably <=90% gross, net ~0). Signal (lookback_days/top_k/rebalance_days) unchanged from the promising iteration-1 result.
Backtest Review
Functioning and matches hypothesis: 284 long / 288 short, genuinely dollar-neutral (beta 0.02, correlation 0.07), dense weekly rebalance (572 trades over 5+ years)
Backtest Review
Real positive edge: Sharpe 0.528, Sortino 0.734, profit_factor 1.16, positive expectancy (+404.9/trade), alpha 0.152, total_return +277% (CAGR 23.6%), PSR 0.951
Backtest Review
Contained risk unlike the abandoned basket siblings: max_drawdown 24.3%, Calmar/recovery 11.6, positive in 6 of 7 years — clean 1x gross-capped sizing (avg_position_pct 18.7%/name, capacity $103M)
Backtest Review
Costs do NOT dominate: commission 1.39% of gross, impact 3.1% — the edge survives fees
Backtest Review
Modest Sharpe (0.528) with sharpe_ci_low -0.15 grazing zero — deflation risk under the 225-trial best-of-N luck bar; sibling dollar-neutral L/S baskets have failed DSR before
Backtest Review
Some return concentration (kurtosis 67, skew 5.4; 2024-12 +45%, 2021-02 +39%, 2025-02 +33%) and one negative year (2022 -8.8%)
Backtest Review
exposure_pct reads 602% (time-in-market artifact) — cosmetic but should be confirmed as ~90% notional gross in optimization logs
Analysis
Genuinely differentiated construction: dollar-neutral (beta 0.02-0.03), multi-instrument, benchmark_correlation ~0.07 — real market-neutral diversification value if it had an edge
Analysis
Densely-populated walk-forward (888 trades optimized), low fee drag (commission_pct_of_gross 1.39-1.67%), clean sensitivity grid (only 1 cliff), and no obvious harness artifact — the mechanism is real, just not statistically significant
Analysis
Optimization did reduce max_drawdown (24.3% -> 12.7%) and raised Sortino modestly
Analysis
Fails deflated Sharpe: DSR 0.1655 vs 0.95 bar; optimized Sharpe 0.555 BELOW the 225-trial expected-max luck bar of 0.860 (is_significant=false, sharpe_ci_low -0.0716 through 0, PBO 0.7143)
Analysis
Holdout FAILED and is NEGATIVE (holdout_sharpe -0.527, ratio -1.701) — the untouched recent window loses money
Analysis
Walk-forward is_overfitted=true: avg IS 0.894 -> avg OOS 0.310 with one negative OOS window (-0.858)
Analysis
Clear recent-regime decay: optimized annual returns 2025 +0.04%, 2026 -7.95%; rolling Sharpe deeply negative through 2026
Analysis
Outlier-carried edge (return_kurtosis 67-99, skew 5.4-6.2, tail_ratio 0.47), concentrated in a handful of months; PSR 0.96 vs DSR 0.17 is the diagnostic tell of best-of-N inflation
Analysis
Thin profit factor (1.16 base / 1.14 optimized) — modest edge even before deflation
Analysis
The underlying cross-sectional momentum signal is genuinely promising (PF 1.16, positive 6 of 7 years, alpha +0.15) — keep the logic. The blocking issue is sizing: the book is designed to be dollar-neutral at ~90% gross (gross_target 0.90, per_leg_pct = 0.9/(2*top_k) = 15%, 6 legs => 90% gross), but the backtest reports exposure_pct 602% — roughly 6.7x the intended leverage. This is the SAME over-exposure that drove the reversal-sibling basket to a -100% liquidation, so it is a real risk-of-ruin defect, not cosmetic. Action: instrument and verify the realized gross. After each _rebalance, sum abs(signed_qty * price) across all 10 legs and confirm it equals ~0.90 * equity (and net ~0). Investigate why it does not: candidates to check — (a) is get_account_equity() returning total notional or margin rather than cash equity, inflating per_leg? (b) are positions from prior rebalances NOT being fully netted to target (so gross accumulates across rebalances)? (c) is the single-delta order being applied per-timeframe/per-bar more than once? Add an explicit post-rebalance gross check that flattens/scales to the 90% cap. Do NOT change the signal (lookback_days/top_k/rebalance_days) — only fix the gross-exposure control. Re-run; the report should show exposure_pct ~90 and a correspondingly smaller (but same-Sharpe) return/drawdown. Once gross is actually ~90%, this is a strong optimization candidate.
Outcome Summary
This dollar-neutral cross-sectional momentum basket was the strongest of the batch: it cleared the backtest-review gate with a genuine, fee-surviving edge (Sharpe 0.528, +277% total return, 24.3% max drawdown) and was the only one to enter the 3-phase optimizer. There the story turned — the optimized Sharpe of 0.555 sat below the 225-trial luck bar of 0.860, its deflated Sharpe collapsed to 0.17 against a 0.95 threshold, walk-forward flagged overfit, and the time-ordered holdout went outright negative (-0.527) as 2025-2026 returns decayed. The analyst abandoned it after 2 iterations, diagnosing the classic PSR-vs-DSR best-of-N trap and the same variant-selectivity failure that had sunk the sibling dollar-neutral basket. The lesson stands that the promoted directional Absolute/Dual momentum baskets, not this market-neutral recast, remain where this class clears the bar.
Outcome Summary
Recasting a validated net-directional major-basket momentum edge as a dollar-neutral cross-sectional long/short strips out the directional exposure that carried the promoted Absolute/Dual momentum siblings, leaving a market-neutral edge too modest to survive best-of-N deflation — and a high probabilistic Sharpe (0.96) is not a substitute for the deflated Sharpe (0.17) that corrects for trial count.
Outcome Summary
The analyst issued an 'abandon' verdict at the post-optimization ANALYZING stage: the edge was statistically indistinguishable from best-of-225 noise (failing DSR, PBO, and the luck bar) and, decisively, its untouched recent holdout lost money as the strategy decayed through 2025-2026. This was the first strategy in this set to reach optimization; risk review and later stages were not reached.
Outcome Summary
A dollar-neutral cross-sectional momentum long/short basket over ~10 liquid Binance USD-M majors that ranks each name by trailing return every weekly rebalance and goes long the top-K, short the bottom-K with equal dollar weight, harvesting the crypto dispersion premium with just three tunables.
Outcome Summary
The initial backtest showed a real, contained edge — 572 trades (284 long / 288 short), genuinely dollar-neutral (beta 0.02), Sharpe 0.528, total return +277% (CAGR 23.6%), profit factor 1.16, max drawdown 24.3%, with costs not dominating (commission 1.39% of gross). It passed the backtest-review gate to 'optimize,' but the optimized config (Sharpe 0.555) failed deflated Sharpe (DSR 0.1655 vs 0.95 bar, below the 0.860 luck bar) and posted a negative forward holdout (holdout Sharpe -0.527, ratio -1.701) with walk-forward overfit (avg IS 0.894 → avg OOS 0.310, PBO 0.714).
Backtest and paper results are hypothetical. Trading involves risk of loss.