Skip to content

View translation

BinanceMajorsRegimeSwitchedCrossSectionalDollarNeutralLS

Hypotheses

Regime-Switched Cross-Sectional Factor, Dollar-Neutral Long-Short (10 BINANCE USD-M Perps — Trade Cross-Sectional MOMENTUM When the Crypto Complex Is TRENDING but Flip to Cross-Sectional REVERSAL When It Is RANGING, Governed by an Aggregate-Index Trend-Efficiency Regime Classifier, Bi-Weekly Rebalance, Beta-Neutral, 3-Parameter)

Hypotheses

A DOLLAR-NEUTRAL, MULTI-INSTRUMENT cross-sectional strategy on 10 liquid BINANCE USD-M perps (BTC, ETH, SOL, BNB, XRP, ADA, AVAX, LINK, DOGE, LTC — SAME venue, OHLCV-only, so no supplementary-feed data ceiling like the L/S-ratio feed that just died STRUCTURALLY UNMEASURABLE, and no L44 cross-venue problem). It is genuinely STRUCTURALLY different from every prior submission and from my three in-flight books (pure cross-sectional momentum, flow-confirmed momentum, intermediate momentum — all of which ALWAYS long winners / short losers): this strategy ADAPTIVELY FLIPS the sign of the cross-sectional bet based on the market REGIME. The two proven-but-fragile facts this factory has established are (a) cross-sectional momentum works (deployed Sharpe 2.6) but suffers momentum CRASHES when leadership violently reverses, and (b) short-term cross-sectional reversal works in choppy tape but INVERTS in strong trends. The natural robust synthesis — never tried here — is to condition the sign on regime: when the aggregate crypto complex is clearly TRENDING, trade MOMENTUM (long the relative winners, short the relative losers); when it is RANGING/choppy, trade REVERSAL (long the relative losers, short the relative winners). A single, fixed-threshold trend-EFFICIENCY classifier on the equal-weight basket (net directional move / total path length over the regime window) decides which mode is active — this is the exact mechanism that directly ATTACKS the two failure modes (momentum crash, reversal inversion) instead of hoping a static sign survives both regimes. Beta-neutral construction strips the crypto beta that produced the 46-81% drawdowns in long-only variants, and fills the under-represented long-short bucket (13.4% vs the <=55% long-only target). Bi-weekly rebalance on perps keeps turnover and fees modest.

Hypotheses

Iteration 3 fixes exactly the two QA blockers and changes nothing else. (1) CORE EDGE NOW IMPLEMENTED: added _regime_mode(), a fixed-threshold trend-efficiency classifier on the EQUAL-WEIGHT basket (basket daily log return = cross-sectional mean of the ten legs; ER = |net move| / total path length over regime_window days), and wired the sign flip through the book: calculate_signal now passes scores * mode to _rebalance, so mode +1 ranks by momentum (long winners / short losers) and mode -1 inverts the ranking into the cross-sectional REVERSAL bet (long losers / short winners). The returned signal is likewise mode * dispersion, so it stays continuous and varies every bar while its SIGN now reports the active regime. I measured the classifier on the actual 10-name daily panel (2137 aligned days): at regime_window=20 / threshold=0.25 the complex is trending ~43% of days over the full history and ~30% over the last year, and at the 14-day rebalance grid inside the 365-day sandbox window 8 rebalances land in TRENDING and 19 in RANGING - so both branches genuinely fire in verification and this is not a static book wearing a regime label. (2) CADENCE: rebalance_days is now 14 (bi-weekly) in both the code default and the config, and the class name and docstring no longer say monthly/IntermediateMomentum - the class is renamed BinanceMajorsRegimeSwitchedCrossSectionalDollarNeutralLS. The three searched parameters are now formation_days, regime_window and efficiency_threshold (skip_days, target_vol, top_n and the cadence are fixed design constants), matching the hypothesis 3-parameter claim. Everything that already passed Layers 1-3 is untouched: same imports, same synchronized single-panel alignment, same _scores() formation/skip math, same inverse-vol dollar-neutral sizing with the vol target and the leverage/max_leg_frac caps (leverage 2.0 is still genuinely consumed by the gross formula), same calendar-anchored schedule derived from bar.ts_event, same idempotent hold-if-unchanged rotation, same inert should_enter/should_exit/position_size. Warmup rises only to max(formation+skip, regime_window)+3 = 66 bars, a small fraction of the 365-day sandbox window, so roughly 21 rebalances still occur there.

Hypotheses

Regime-switched dollar-neutral cross-sectional factor basket with no robust edge — not worth 2 hours of optimization. profit_factor is 1.025 (break-even), total_return 16.3% over 6.6 years (CAGR 2.35%), Sharpe 0.215 with bootstrap CI [-0.49, 0.94] straddling zero, PSR 0.70 — the L45 dollar-neutral major-perp basket family (0/84), and the momentum/reversal sign-flip did not create an edge. The entire +16% is one-year, outlier-driven: 2024 returned +70.8% carried by a single +78.2% day (2024-12-19) plus +38.9%/+35.7% days (return_kurtosis 21.2, gross exposure 600%), while 2020 (-2.9%), 2021 (-8.8%), 2023 (-17.9%) and 2026 (-12.8%) are all negative — strip 2024 and it is a clear loser. Risk is poor for a 'neutral' book: max_drawdown 39.4% (CI to 82.5%), and the regime classifier did not deliver cross-regime robustness (calm Sharpe 0.07, stressed -0.02). The 2026 window is negative, so the last-20% holdout would likely fail. The hypothesis leans on the promoted Sharpe-2.6 cross-sectional survivor, but that rotation is already captured and this adaptive-sign variant lands at Sharpe 0.21 with PF ~1.0, so it did not inherit the edge; the fitted regime threshold adds overfit risk rather than robustness. benchmark_meaningful is correctly false; on absolute risk-adjusted metrics the result is negligible. No tuning of formation_days/regime_window/efficiency_threshold flips it. Failure pattern: no_edge/overfit dollar-neutral multi-instrument cross-sectional factor (L45).

Implementation

Regime-switched dollar-neutral cross-sectional book on 10 liquid Binance USD-M perps (BTC primary, plus ETH, SOL, BNB, XRP, ADA, AVAX, LINK, DOGE, LTC) on 1-DAY bars. A trend EFFICIENCY RATIO on the equal-weight basket over the last regime_window days (|sum of basket daily log returns| / sum of |basket daily log returns| = net directional move / total path length) classifies the complex: ER >= efficiency_threshold means TRENDING and the book trades cross-sectional MOMENTUM (long the relative winners, short the relative losers); ER below the threshold means RANGING and the book FLIPS to cross-sectional REVERSAL (long the relative losers, short the relative winners). Ranking is skip-adjusted intermediate momentum (60-day formation ending 3 days ago) multiplied by the regime mode, top/bottom 3 traded, inverse-vol weighted within each side with equal gross notional per side (dollar-neutral, approximately beta-neutral), vol-targeted gross capped by config leverage and a per-leg cap, rebalanced BI-WEEKLY on a calendar-anchored day-index grid.

Verification Results

CLEAN RESTART 2026-09-04 — this run's verdict history and learning records were removed and it was restarted from verification. Its previous abandonment came from the pipeline, not from the market: the Layer-2 harness mis-bound @staticmethod helpers (fixed), QA issued terminal performance verdicts on an unoptimized smoke test (removed — QA now judges correctness only), and sandbox timeouts came from backtest-slot starvation (fixed). The hypothesis and the strategy code are unchanged. Verify the code on its merits; performance is decided later by the full backtest and the optimizer.

Verification Results

Marginal edge with imperfect neutrality: Sharpe 0.22 (CI spans zero), PF 1.03, max_drawdown 39.4% (CI to 82.5%) on a dollar-neutral/only-approximately-beta-neutral book with two of three vol terciles negative. The regime conditioning may add nothing over a static book, and the inverse-vol (not measured-beta) neutrality lets factor drawdowns through. Performance/robustness finding, not a code fault. A/B vs static momentum; weight holdout drawdown/stressed regime heavily; consider measured-beta neutralization.

Backtest Review

Data/plumbing sound: 10 legs aligned, 584 trades, no liquidation; OHLCV-only so no feed ceiling; commission only 1.29% of gross

Backtest Review

Dollar-neutral construction contains single-name blowups; thoughtful regime-conditioning design

Backtest Review

profit_factor 1.025 (break-even), total_return 16.3% over 6.6 years (CAGR 2.35%), Sharpe 0.215 with CI [-0.49, 0.94] straddling zero — no edge (L45 0/84 family)

Backtest Review

Return entirely one-year/outlier-driven: 2024 +70.8% on a single +78.2% day; return_kurtosis 21.2, gross exposure 600%; 2020/2021/2023/2026 all negative

Backtest Review

max_drawdown 39.4% (CI to 82.5%); calm Sharpe 0.07, stressed -0.02 — regime classifier did not deliver cross-regime robustness

Backtest Review

2026 negative — last-20% holdout would likely fail; regime sign-flip adds a fitted parameter prone to overfit

Iteration History

RegimeSwitchedCrossSectionalFactorDollarNeutralLS

Iteration History

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

Iteration History

BinanceMajorsIntermediateMomentumMonthlyDollarNeutralLS

Iteration History

Verification failed (Layer 4 — QA review): - CORE EDGE ABSENT — the hypothesis is a REGIME-SWITCHED strategy that trades cross-sectional MOMENTUM when the aggregate crypto complex is TRENDING and FLIPS to cross-sectional REVERSAL when it is RANGING, with the sign governed by a fixed-threshold trend-EFFICIENCY classifier (net directional move / total path length) on the equal-weight basket. NONE of this is implemented. The code (calculate_signal -> _scores -> _rebalance) unconditionally goes LONG the top-N scores and SHORT the bottom-N scores every rebalance — a static, always-momentum book. There is no efficiency-ratio computation, no regime state, and no sign flip anywhere in the file. The hypothesis explicitly says this idea is 'genuinely STRUCTURALLY different from pure cross-sectional momentum' and that its whole point is to attack the momentum-crash and reversal-inversion failure modes via regime conditioning — yet the submitted code IS plain pure cross-sectional momentum (named ...IntermediateMomentum... with no regime term). The stated edge is not present; this is a different strategy than the hypothesis. - REBALANCE CADENCE MISMATCH — the hypothesis specifies a BI-WEEKLY rebalance, but rebalance_days is 21 (monthly) in both the code default and the config, and the docstring/name say 'monthly rotation'. Bi-weekly is ~14 days.
Strategy report

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