Skip to content

View original

BinanceMajorsIntermediateCrossSectionalMomentumDollarNeutralLS

Hypotheses

Intermediate-Horizon Cross-Sectional Momentum, Dollar-Neutral Long-Short — LOW-TURNOVER Monthly Rotation across 10 BINANCE USD-M Perps (Rank by 60-Day Return Skipping the Last 3 Days to Avoid Short-Term Reversal Contamination, LONG Top-3 / SHORT Bottom-3, Volatility-Scaled Legs, Beta-Neutral, 3-Parameter)

Hypotheses

A DOLLAR-NEUTRAL, MULTI-INSTRUMENT cross-sectional MOMENTUM strategy on 10 liquid BINANCE USD-M perps (BTC, ETH, SOL, BNB, XRP, ADA, AVAX, LINK, DOGE, LTC — all SAME venue, OHLCV-only, so no supplementary-feed availability ceiling like the L/S-ratio feed that just killed the retail-crowd hypothesis, and no L44 cross-venue problem). It deliberately leans into the ONLY edge family this factory has ever gotten to survive — cross-sectional relative-strength momentum is the deployed Sharpe-2.6 strategy, and dual-timeframe momentum is the Sharpe-2 paper survivor — while being engineered specifically against the two failure modes that killed the recent momentum variants: (1) FEE DEATH: the weekly spot rotations died because BINANCE_SPOT's ~0.20% round-trip on weekly turnover ate the edge; this trades PERPS (~0.10% RT) and rebalances only MONTHLY (~21 days), cutting turnover ~4x so per-trade edge clears fees with room; (2) OVERFIT DEATH: the single-name and short-formation variants died as best-of-N noise on thin trade counts; this uses a 60-day INTERMEDIATE formation (the most robust momentum horizon, less regime-fragile than 30-day) across a 10-name cross-section, giving a broad, diversified signal rather than a thin single-name bet, and only 3 parameters. It SKIPS the most recent 3 days of the formation window to avoid contaminating momentum with the opposing short-term-reversal effect (classic 12-1 style construction). Running it DOLLAR-NEUTRAL strips the crypto beta that produced the 46-81% drawdowns and negative expectancy in the long-only equal-weight blowups, and fills the under-represented long-short bucket (13.4% vs the <=55% long-only target). It is distinct from my in-flight flow-confirmed cross-sectional momentum book (that overlays an OPEN-INTEREST confirmation on a shorter horizon; this is PURE price momentum at a 60-day intermediate horizon with monthly turnover and no supplementary overlay) and from the dead weekly SPOT rotations (wrong venue/fees, long-only) and the dead risk-parity/BAB variants (different ranking).

Hypotheses

QA's block was correct on all three counts and this iteration is a straight revert to the hypothesis rather than a redesign. First and most important, the regime switch is deleted. The previous file carried a trend-efficiency classifier that multiplied the ranking scores by a mode of +1 or -1, so in a ranging complex the book traded cross-sectional REVERSAL — long losers, short winners — which is the opposite book to the one the hypothesis describes, and by the developer's own diagnostics that branch was active in 19 of 27 rebalances, meaning the code traded reversal roughly 70% of the time. The classifier, the two knobs that drove it (regime_window, efficiency_threshold) and the sign multiplication are all gone; _rebalance now receives the raw scores and the book is unconditionally long winners and short losers. Second, the cadence is restored to monthly (rebalance_days 14 -> 21). That is substantive rather than cosmetic, because the hypothesis makes monthly turnover its explicit fee-death defense — the weekly SPOT rotations died on a ~0.20% round trip — and bi-weekly ran about 1.5x the intended turnover. Third, the tuned surface now matches the three parameters the hypothesis names: formation_days, top_n (N per side) and rebalance_days (cadence), with skip_days, the vol target and the sizing caps fixed by design. Everything the mismatch did not touch is preserved byte-for-byte: the synchronized single-panel alignment that keeps index -k on the same calendar day for every leg, the skip-adjusted scoring, inverse-vol leg weights with equal gross per side, the vol-targeted gross with leverage and per-leg caps, the calendar-anchored schedule, and the idempotent first-book path. Imports are unchanged and the helpers stay instance methods for Layer-2 proxy safety. I verified all ten legs have 1-DAY catalog data (44-55 files each), and I kept leverage at 2.0 because _rebalance genuinely consumes it as the gross ceiling rather than leaving it inert. I also added _param_bounds so the optimizer searches the intended ranges. On QA's advisory point: the weak sandbox numbers describe the regime-switched book that is now removed, so the pure-momentum construction needs to be measured fresh.

Hypotheses

Dollar-neutral cross-sectional-momentum major-perp basket — the L45 family (0/84 survivors) — that also trips L19 and L36, not worth 2 hours of optimization. max_drawdown is 54.8% (CI to 77%) on a supposedly market-neutral book (L19 hard abandon), and avg_trade_return_pct is 15.6% with return_kurtosis 27.9 — the L36 leverage/compounding signature: the record is carried by a handful of leveraged bull-year monster days (2021-04-15 +104.7%, 2024-02-29 +91.4%, 2021-11-11 +72.8%, 2025-01-30 +54.4%) with 2021 alone +203%, offset by -48.9% and -18.1% days, not by cross-sectional dispersion. It is not significant: Sharpe 0.517 with bootstrap CI [-0.285, 1.246] straddling zero, PSR 0.898, profit_factor 1.089 (fee-fragile band), and it loses in several years (2022 -19%, 2024 -30%). The base Sharpe is the ceiling the ~225-trial deflation only lowers, so it will fail the deflated-Sharpe/PBO and drawdown gates; the dollar-neutral construction did not strip the tail risk it promised. Failure pattern: no_edge/risk_reject dollar-neutral cross-sectional momentum basket, leverage-carried, >50% DD (L45/L19/L36).

Implementation

Dollar-neutral cross-sectional momentum across 10 liquid Binance USD-M perps (BTC, ETH, SOL, BNB, XRP, ADA, AVAX, LINK, DOGE, LTC) on daily bars, rotated monthly. Each name is ranked by its total return over a 60-day formation window that ENDS 3 days ago, so the recent short-term-reversal zone never contaminates the momentum measurement (classic 12-1 construction translated to days). The book is always long the top 3 scores and short the bottom 3, with the middle names flat — pure price momentum, no regime overlay and no sign flip. Legs are inverse-volatility weighted within each side and both sides carry identical gross notional, making the book exactly dollar-neutral and approximately beta-neutral, so the return comes from cross-sectional dispersion rather than crypto beta. Book size is vol-targeted (gross = target_vol / (avg annualised leg vol x neutral_vol_factor)) and capped by config leverage and a per-leg cap. Rotation is anchored to calendar days-since-epoch rather than a bar counter, and legs whose desired side is unchanged are left untouched so a monthly hold pays no unnecessary fees against the ~0.10% perp round trip.

Verification Results

Verification failed (Layer 4 — QA review) [class=hypothesis_mismatch]: - [edge_concern] Even setting fidelity aside the sandbox is weak: Sharpe 0.22 (CI [-0.57, 0.96] straddles zero), PF 1.03, max_drawdown 39.4% (CI to 82.5%) on a nominally dollar-neutral book, negative in both calm and stressed vol terciles (all return from the 'normal' tercile). So the regime-switched variant the code actually implements is itself marginal — but the block is fidelity, not performance. - The code does not implement the hypothesis. The hypothesis is PURE intermediate cross-sectional MOMENTUM (always LONG winners / SHORT losers, 'PURE price momentum ... no supplementary overlay'). The code implements a REGIME-SWITCHED momentum/reversal book (class renamed ...RegimeSwitched...): a trend-efficiency-ratio classifier flips the sign so the book trades cross-sectional REVERSAL (long losers / short winners) whenever the complex is RANGING — the OPPOSITE book. By the developer's own measurement, 19 of 27 sandbox rebalances (70%) are the RANGING/reversal branch, so the code trades reversal most of the time. The regime-switch overlay is entirely absent from the hypothesis. Either revert to pure momentum, or register the regime-switched design as a new Research-Lead hypothesis. - Compounding fidelity breaks: (1) CADENCE — hypothesis specifies MONTHLY and makes it a core fee-death defense ('MONTHLY (~21 days), cutting turnover ~4x'); the code rebalances BI-WEEKLY (14d), ~1.5x the intended turnover. (2) PARAMETERS — hypothesis's 3 params are formation / N-per-side / cadence; the code's are formation_days / regime_window / efficiency_threshold, two of which are the un-hypothesized regime-switch knobs (N-per-side and cadence frozen). Different tuned surface than described. Restore monthly cadence and the stated 3-param surface if reverting to pure momentum.

Backtest Review

Momentum is the factory's survivor factor; clean same-venue OHLCV construction, monthly cadence keeps fee drag low (commission 0.73% of gross)

Backtest Review

Adequate trade count (256) and both legs traded

Backtest Review

L45 dollar-neutral cross-sectional-momentum major-perp basket — the 0/84-survivor family

Backtest Review

L19 hard-abandon drawdown: max_drawdown 54.8% (CI to 77%) on a 'market-neutral' book

Backtest Review

L36 leverage/compounding artifact: avg_trade_return_pct 15.6%, return_kurtosis 27.9, record carried by a few monster days (+104.7%, +91.4%, +72.8%) and 2021 alone +203%

Backtest Review

Not significant: Sharpe 0.517 with CI [-0.285, 1.246] straddling zero, PSR 0.898, PF 1.089 (fee-fragile band)

Backtest Review

Multiple deeply negative years (2022 -19%, 2024 -30%); dollar-neutrality failed to strip tail risk

Iteration History

BinanceMajorsIntermediateMomentumMonthlyDollarNeutralLS

Iteration History

Verification failed (Layer 2 — synthetic scenarios): Parameters used: ['top_n', 'min_gross', 'skip_days', 'target_vol', 'max_leg_frac', 'min_notional', 'formation_days', 'rebalance_days', 'rebalance_anchor', 'neutral_vol_factor'] Check that __init__ sets all attributes from self.parameters.get(). - steady_uptrend: TypeError: BinanceMajorsIntermediateMomentumMonthlyDollarNeutralLS._ts_of() takes 1 positional argument but 2 were given (bar timestamp: 1735693500000) - steady_downtrend: TypeError: BinanceMajorsIntermediateMomentumMonthlyDollarNeutralLS._ts_of() takes 1 positional argument but 2 were given (bar timestamp: 1735693500000) - flat_ranging: TypeError: BinanceMajorsIntermediateMomentumMonthlyDollarNeutralLS._ts_of() takes 1 positional argument but 2 were given (bar timestamp: 1735693500000) - volatility_spike: TypeError: BinanceMajorsIntermediateMomentumMonthlyDollarNeutralLS._ts_of() takes 1 positional argument but 2 were given (bar timestamp: 1735693500000) - zero_volume: TypeError: BinanceMajorsIntermediateMomentumMonthlyDollarNeutralLS._ts_of() takes 1 positional argument but 2 were given (bar timestamp: 1735693500000) - price_gap: TypeError: BinanceMajorsIntermediateMomentumMonthlyDollarNeutralLS._ts_of() takes 1 positional argument but 2 were given (bar timestamp: 1735693500000)

Iteration History

MidCapResidualMomentumDollarNeutralLS

Iteration History

Verification failed (Layer 3 — sandbox backtest): tuple index out of range Bar type used: LINKUSDT.BINANCE-1-DAY-LAST-EXTERNAL, Bars processed: 0 Ensure your strategy produces trades with the given data and parameters.

Iteration History

BinanceMajorsRegimeSwitchedCrossSectionalDollarNeutralLS
Strategy report

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