Skip to content

View original

BinanceMajorsResidualMomentumBetaNeutralLSDaily

Hypotheses

Major-Perp Residual (Idiosyncratic) Momentum, Beta-Neutral Long-Short (Multi-Instrument BINANCE USD-M — Rank 6 Majors by BETA-STRIPPED Residual Return vs the Crypto Index, LONG High-Residual-Momentum / SHORT Low, Net Beta ≈ 0, Weekly Rebalance, 3-Parameter)

Hypotheses

A MARKET-NEUTRAL, MULTI-INSTRUMENT strategy across 6 liquid BINANCE USD-M major perps (BTC, ETH, SOL, BNB, XRP, ADA) that trades RESIDUAL (idiosyncratic) momentum — a distinct, academically more-robust construction than the total-return cross-sectional momentum in my pending set. For each name it regresses its returns on an equal-weight crypto index to get its BETA and RESIDUAL (the part of its return NOT explained by the market), then ranks names by their trailing residual (idiosyncratic) return: LONG the top-2 residual-momentum names, SHORT the bottom-2, sized so net BETA ≈ 0. The key difference from total-return momentum: total-return momentum loads heavily on market beta (in a crypto bull the long leg is just high-beta names, which crashes when beta reverses — the exact outlier/regime-fragility that killed the index-momentum and equal-weight rotation variants); stripping the market factor isolates the persistent NAME-SPECIFIC momentum (a strong project keeps outperforming its peers for idiosyncratic reasons), which academic evidence shows is steadier and far less crash-prone than raw momentum. This is genuinely distinct from my pending dollar-neutral total-return momentum (different signal: residual vs total return) and from BAB (ranks by beta LEVEL, not residual return). It is verification-safe (single venue, pure OHLCV, incremental rolling regressions — no options catalog, no cross-venue, no supplementary feed that can go missing or produce no-trades), fills the under-represented long_short (13.6%), multi (18.5%), and market-neutral buckets, is beta-neutral so it cannot blow up on market direction, and is low-turnover (weekly) so the 0.10% perp cost is immaterial. 3 parameters (residual lookback, beta lookback, N per side fixed at 2).

Hypotheses

Implements the hypothesis exactly: (1) RESIDUAL, not total-return, momentum - the market factor is stripped by an explicit rolling beta regression against an equal-weight index of the same 6 majors, so the rank reflects name-specific outperformance rather than beta loading (which is what makes raw cross-sectional momentum crash when beta reverses); (2) LONG top-2 / SHORT bottom-2 residual momentum; (3) net beta ~ 0 by construction via the L*bL = S*bS leg solve rather than naive dollar-neutrality (dollar-neutral is only beta-neutral if the two legs happen to have equal beta, which residual ranking does not guarantee); (4) weekly, calendar-anchored rebalance; (5) exactly 3 intended tunables (residual_lookback, beta_lookback, rebalance_days) with N fixed at 2. Verification-safety choices: single venue, pure OHLCV (no supplementary feed, no options chain, no cross-venue leg that can go missing), all 6 members currently-listed liquid majors, 47-bar warmup against a 365-bar sandbox window leaving ~45 weekly rebalances so trades are guaranteed, and a timestamp-intersection aligned return matrix (never independently trimmed per-leg arrays) so no index-based regression can mix mismatched timestamps. Sizing is standardised: residual momentum is divided by the name's own floored residual vol, so thresholds are scale-invariant across symbols and regimes. Venue is futures BINANCE because the strategy shorts. leverage stays 1.0 (gross = 1x equity, ~0.5 long / ~0.5 short beta-weighted) and is still read in position sizing so raising it later scales notional correctly. One honest note: residual momentum's academic edge is documented on equities over monthly horizons; at a 15-day crypto horizon the residual is noisier, so the beta_lookback/residual_lookback plateau is the thing to inspect for robustness - but that is the hypothesis as specified and it is implemented as asked.

Hypotheses

Thin, regime-fragile cross-sectional momentum edge that will not clear post-optimization robustness gates: Sharpe 0.388 with 95% CI [-0.213, 0.973] straddling zero, profit_factor 1.09 (below the 1.2 meaningful line), information_ratio -0.54, and return_kurtosis 8.7 (outlier-concentrated). The residual/beta-neutral construction did NOT deliver the promised steadiness — max_drawdown is 47.7% (CI high 83.7%) and the strategy loses -9.2% (2022) and -29.4% (2023), falsifying the hypothesis's core 'cannot blow up on market direction' claim. This is the dollar/beta-neutral cross-sectional momentum family (L9), every sibling of which has been abandoned; the direct sibling MajorsCrossSectionalMomentumDollarNeutralLS was authorized to optimize and then died overfit in ANALYZING (DSR 0.49, PBO 0.67, holdout FAILED). This candidate enters weaker (Sharpe 0.39/PF 1.09), so best-of-225 selection would inflate it on noise and near-certainly fail deflated-Sharpe/holdout. avg_trade_return_pct 0.63% clears the fee floor, so this is a risk-adjusted/overfit failure, not fee-fragility — and there is no robust parameter region to tune toward. Abandon at BACKTEST_REVIEW rather than spend 2 hours reaching a near-certain overfit-abandon.

Implementation

Market-neutral cross-sectional RESIDUAL (idiosyncratic) momentum across 6 liquid Binance USD-M major perps (BTC, ETH, SOL, BNB, XRP, ADA) on daily bars. Each bar an equal-weight crypto index return series is built from the basket itself; each name's daily returns are regressed on it over beta_lookback days (OLS on a timestamp-INTERSECTION aligned return matrix) to get its beta, and the residual eps = r_i - beta_i * r_m is accumulated over residual_lookback days and standardised by the name's own residual volatility (scale-invariant rank, no absolute thresholds). The basket goes LONG the top-2 and SHORT the bottom-2 residual-momentum names. Leg notionals are solved for NET BETA ~ 0 (L*beta_long = S*beta_short, L+S = gross), not equal-dollar, with betas clamped to [0.2, 3.0] and the long fraction to [0.3, 0.7] so a degenerate beta estimate cannot skew the book. Gross notional is hard-capped at gross_target * equity (1.0x, leverage 1.0) with a per-asset cap, so exposure cannot compound into a blowup. Rebalance is CALENDAR-anchored (days-since-epoch // rebalance_days, offset so weekly periods break on Monday) and therefore a pure function of the bar timestamp - identical across restarts, backtests and paper replay. A 25% rebalance band suppresses churn when the same names stay selected, keeping turnover low so the ~0.10% round-trip perp cost is immaterial against multi-percent weekly residual moves.

Verification Results

Delete _maybe_process_primary (and any _process_primary/_last_processed_ts references) — the basket is managed entirely inside calculate_signal via _manage_basket, so this method is unreachable and only creates risk if someone wires it up.

Verification Results

Dead code that references UNDEFINED attributes — harmless now, latent landmine later. _maybe_process_primary() reads self._last_processed_ts (never initialized in __init__) and calls self._process_primary(bar) (not defined anywhere in the class). It is never invoked — the base template dispatches through calculate_signal(), which is confirmed by the sandbox running cleanly and producing 82 trades — so there is no runtime error today. But if a future edit (or a base-class change) ever calls _maybe_process_primary, it will raise AttributeError on _last_processed_ts before doing anything. This is leftover from a different processing pattern and should be removed.

Verification Results

Consider a leave-one-out index per name (mean of the other n-1 returns) for a cleaner residual; at 6 names the self-weight (1/6) is non-trivial. Not required for correctness, but it sharpens the very quantity the hypothesis trades.

Verification Results

The market index each name is regressed on INCLUDES that name (equal-weight mean over all keys, so the regressed name is ~1/6 of its own benchmark). This biases each beta slightly toward 1 and shrinks the measured residual by the name's own weight — a mild contamination of the 'idiosyncratic' component the hypothesis is built on. It is a common simplification and does not invalidate the construction (the sandbox is genuinely beta-neutral, beta 0.012), but a cleaner residual would regress each name on the LEAVE-ONE-OUT index (equal-weight of the OTHER five). Worth noting for the analyst since the whole premise is isolating the name-specific return.

Verification Results

At backtest_review, verify on the full multi-year window that the edge survives (Sharpe CI clearing zero, positive across regimes not one bull leg), and inspect the beta_lookback x residual_lookback plateau for a robust region rather than a spike — the 15-day crypto residual is the fragility point. Confirm realized net beta stays near zero across rebalances from the logs.

Verification Results

Robustness caveats for the analyst (the sandbox is a genuine winner but on one year). Sandbox metrics are good and honest — total_return +14.7%, Sharpe 0.75 (CI [-0.91, 2.24], probabilistic_sharpe 0.82), profit_factor 1.20, avg_trade_return_pct +0.72% (clears the fee floor with margin), max_drawdown 11.7%, and genuinely beta-neutral (beta 0.012, alpha 0.109) — but the Sharpe CI straddles zero on a single 365-day window, and the developer honestly flags that residual momentum's academic edge is documented on EQUITIES at MONTHLY horizons, whereas this runs 15-day residuals on 6 crypto names, where the residual is noisier. Two secondary points: (1) the beta-neutral solve can lose exact neutrality if the max_weight cap or the [0.3,0.7] long_frac clamp binds (it does not appear to here); (2) this shares its universe with the sibling total-return cross-sectional momentum, but the signal (residual vs total return) is genuinely distinct.

Backtest Review

Verification-safe construction: single venue, pure OHLCV, timestamp-intersection alignment, calendar-anchored rebalance

Backtest Review

avg_trade_return_pct 0.63% clears the fee floor, so failure is not fee-fragility

Backtest Review

Genuinely market-neutral by design (beta 0.037, benchmark_correlation 0.09) and fills under-represented buckets

Backtest Review

Reasonable trade count (577) — sample size is not the problem

Backtest Review

profit_factor 1.09 is below the 1.2 meaningful-edge line (L9 OHLCV-momentum class, zero survivors)

Backtest Review

Sharpe 0.388 with 95% CI [-0.213, 0.973] straddles zero — risk-adjusted edge indistinguishable from noise

Backtest Review

max_drawdown 47.7% (CI high 83.7%) directly falsifies the hypothesis's central 'beta-neutral so it cannot blow up' claim

Backtest Review

Severe regime inconsistency: +63%/+46% in 2020-21 then -9.2%/-29.4% in 2022-23; information_ratio -0.54

Backtest Review

return_kurtosis 8.7 — edge is concentrated in a few outlier weeks, the exact profile that fails deflated-Sharpe/PBO after best-of-225 selection

Backtest Review

Direct sibling MajorsCrossSectionalMomentumDollarNeutralLS was optimized then abandoned overfit (DSR 0.49, PBO 0.67, holdout failed); the whole dollar/beta-neutral cross-sectional momentum family has been abandoned. This candidate enters weaker.

Outcome Summary

This strategy tried to fix the known failure mode of cross-sectional momentum — its heavy market-beta loading that crashes when beta reverses — by trading residual, name-specific momentum: regressing out each major's beta to the crypto index and ranking on the idiosyncratic remainder, sized to zero net beta, on academically-motivated grounds that residual momentum is steadier. The construction was clean and genuinely market-neutral (beta 0.037), but the backtest falsified the core steadiness claim: a 47.7% drawdown, a Sharpe of 0.388 with a confidence interval straddling zero, profit factor 1.09, and returns that swung from strongly positive in 2020-21 to -29% in 2023, with the edge concentrated in a few outlier weeks. The analyst abandoned it at backtest review as a thin, regime-fragile member of the dollar/beta-neutral cross-sectional momentum family — every sibling already dead overfit, the direct sibling having failed the deflated-Sharpe/PBO/holdout gates — judging that this weaker candidate had no robust region to tune toward and would near-certainly overfit-abandon in optimization.

Outcome Summary

Beta-neutralizing a momentum signal does not guarantee the promised steadiness — this residual-momentum variant still drew down 47.7% and was regime-fragile and outlier-concentrated, so entering the robustness gauntlet with a Sharpe straddling zero and PF 1.09 in a zero-survivor family with no robust parameter region is not worth optimizing.

Outcome Summary

It was abandoned at the BACKTEST_REVIEW gate: a Sharpe straddling zero and profit factor below 1.2 mean no distinguishable risk-adjusted edge, and the 47.7% drawdown directly falsified the hypothesis's central 'beta-neutral so it cannot blow up' claim. As a member of the dollar/beta-neutral cross-sectional momentum family whose every sibling was abandoned overfit — the direct sibling died in ANALYZING with DSR 0.49, PBO 0.67, holdout failed — and entering weaker, optimization would only overfit noise, so it never reached optimization or analysis.

Outcome Summary

A market-neutral, multi-instrument long-short strategy across 6 liquid BINANCE USD-M majors (BTC, ETH, SOL, BNB, XRP, ADA) that trades residual (idiosyncratic) momentum: it regresses each name's returns on an equal-weight crypto index to strip out beta, ranks names by their trailing beta-stripped residual return, goes long the top-2 and short the bottom-2 sized to net beta ≈ 0, rebalancing weekly — betting that market-neutralized name-specific momentum is steadier and less crash-prone than total-return momentum.

Outcome Summary

The backtest was thin and regime-fragile: total return +137%, but Sharpe only 0.388 with CI [-0.213, 0.973] straddling zero, profit factor 1.09 (below the 1.2 line), information ratio -0.54, and return kurtosis 8.7 (outlier-concentrated). Crucially, the residual/beta-neutral construction did not deliver the promised steadiness — max drawdown was 47.7% (CI high 83.7%) with big swings from +63%/+46% in 2020-21 to -9.2%/-29.4% in 2022-23, despite a genuinely low beta of 0.037 and avg_trade_return_pct 0.63% above the fee floor.
Strategy report

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