Skip to content

View original

CarryMomentumDoubleSortLongRotation8Majors

Hypotheses

Carry-Momentum Double-Sorted Long-Only Rotation over 8 Data-Verified USD-M Majors (BINANCE Perps, Weekly Rebalance, Hold Top-3 by COMBINED Relative-Strength + Negative-Funding Score, BTC-Regime Gated, Builds on Two Promoted Winners)

Hypotheses

A LONG-ONLY, weekly-rebalanced rotation over a FIXED universe of 8 USD-M majors whose OHLCV *and* funding history are already data-verified in this factory: BTCUSDT, ETHUSDT, SOLUSDT, BNBUSDT, XRPUSDT, ADAUSDT, AVAXUSDT, LINKUSDT. Its distinguishing feature is that it DOUBLE-SORTS on the only two factors that have actually reached paper here: (1) cross-sectional relative-strength momentum ('Cross-Sectional Momentum Weekly Rotation 8-major LONG', Sharpe 2.6) and (2) negative-funding carry ('5-Asset Negative-Funding LONG Carry Basket', Sharpe 1.97). Rather than duplicate either, it combines them — hold the names that are BOTH trending up AND paying you to be long (negative funding) — a cell not present in the pipeline. This is a deliberate, evidence-grounded design: it reuses proven data channels (no OI, no liquidations, no monthly options, no alt cross-venue funding — all of which hit data walls this session) and the proven long-beta basket structure (NOT the dollar-neutral rank basket that is 0/53). It sidesteps the 0/213 single-symbol OHLCV no-edge class by being multi-asset, and the fee-drag class by rebalancing weekly. 3 tunable parameters (momentum lookback, top-K, regime SMA) to resist overfit (202x killer).

Hypotheses

Iteration 2 makes exactly the two required changes with the smallest possible edit, leaving every Layer-1/2/3-passing part untouched (imports unchanged, structure and order-routing identical). (1) The hardcoded equal-weight blend z_mom - z_fund is replaced by a tunable z_mom - carry_weight * z_fund, and carry_weight=0 is now a clean momentum-only ablation that exactly reproduces the promoted momentum parent — so the optimizer/analyst can measure whether carry adds independent edge over [0.0, ~1.0] before spending optimization compute, and if the optimum is ~0 that is itself the finding. (2) The carry factor is GATED to genuinely negative funding: positive and missing funding are clamped to 0 before standardization, so when no universe name has negative funding (the common USD-M bull-regime case) the tilt has zero variance and the score is pure momentum — directly fixing the diagnosed failure where an ungated z(funding) subtraction penalized the crowded-long, highest-momentum names and dragged Sharpe from 2.63 to 1.16 (verified in a unit test: all-positive funding -> momentum top-3; a negative-funding name earns a bonus; carry_weight=0 -> momentum-only). This also addresses the drawdown concern: by no longer tilting into lower-funding laggards during positive-funding regimes, the book stays in the strongest-momentum names, and the tilt only engages in the negative-funding regimes the carry parent actually exploited. Default carry_weight=0.5 ships a gated-combined config for backtest review while the optimizer searches down to 0 for the ablation. All other elements — 8-major universe, BTC-SMA regime gate, per-leg funding via funding_rates_by_instrument, futures venue with funding accrual, equal-weight re-equalization, continuous regime signal — are unchanged from the version that passed Layers 1-3.

Hypotheses

The double-sort carry+momentum premise is falsified. The developer correctly applied my iter-1 fixes (carry_weight tunable, carry gated to negative funding only), and the result answers the decisive question: carry adds no independent edge. Across two iterations the carry overlay only dilutes momentum — Sharpe 1.16 (ungated, iter-1) → 1.04 (gated, iter-2), both far below the momentum-only parent's 2.63. Since the gate falls back to pure momentum in positive-funding regimes yet the Sharpe still sits at 1.04, the carry tilt is actively hurting whenever it engages. Optimizing carry_weight over [0,2] will therefore drive it toward 0, at which point the strategy is a non-differentiated duplicate of the already-promoted cross-sectional momentum rotation. It is also structurally worse than the promoted family: as a LONG-only USD-M PERP book it PAYS funding drag in the positive-funding bull regimes it trades, whereas the SPOT momentum rotation approved this session (Sharpe 4.83, DD 33.7%, no funding cost) dominates it. On its own terms it is weak and insignificant (Sharpe 1.04, sharpe_ci_low 0.277, information_ratio -0.0025, kurtosis 139.8, headline concentrated in 2021 spike weeks). Per my own iter-1 guidance, if carry's optimum is ~0 the double-sort has no independent edge and we should defer to the existing momentum rotation rather than ship a duplicate — that condition is now met. Recommend the Research Lead retire the carry+momentum double-sort thesis on long-only crypto majors: on positive-funding majors a long book cannot harvest funding carry (it pays it), so the carry factor structurally cannot add long-side edge here; the canonical expression of this edge is the already-promoted/in-optimization momentum rotation.

Implementation

Long-only, weekly-rebalanced rotation over 8 BINANCE USD-M majors (BTC, ETH, SOL, BNB, XRP, ADA, AVAX, LINK), daily bars. Double-sorts on cross-sectional relative-strength momentum (trailing lookback_days return) and negative-funding carry: score = z(momentum) - carry_weight * z(carry_tilt), holding the top-3 by score equal-weight. The carry tilt is now GATED to negative funding only (positive/missing funding clamped to 0), so in the predominantly-positive-funding bull regimes the book trades the carry term vanishes and it reverts to pure momentum, and carry_weight (tunable, default 0.5; 0 = momentum-only ablation) scales how strongly negative-funding names are rewarded when they appear. A BTC 100-day-SMA regime gate moves the whole book to cash in bear regimes. Long-only on the futures venue so funding is received via accrual; no leverage.

Verification Results

Gated-carry fix works but the double-sort STILL doesn't beat either parent: Sharpe 0.81 (CI -0.12 to 1.46) vs momentum parent 2.6 and carry parent 1.97 — nearly identical to iter-1 because the gate correctly reverts the score to PURE MOMENTUM in the positive-funding bull regimes it trades. Strong evidence carry adds no independent edge (carry_weight likely optimizes to ~0). Tail-driven (kurtosis 110). Core edge judgment for the analyst.

Verification Results

Hypothesis says 3 tuned params; iter-2 exposes 4 (added carry_weight). Sanctioned — BACKTEST_REVIEW requested it to make carry tunable + enable the momentum-only ablation. Still overfit-resistant.

Verification Results

Non-blocking: exposure_pct 162% is multi-leg time-in-market (not leverage breach); end_unrealized 709% is 3-yr compounding; frozen-signal warnings benign. Unlike the vol-managed sibling, metrics are INTERNALLY CONSISTENT (data_days 1080, cagr 79% / vol 102% / Sharpe 0.81 reconcile) → metrics_reliable credible.

Backtest Review

Iteration-1 feedback correctly applied: carry_weight is now a tunable parameter and the carry tilt is gated to negative funding only

Backtest Review

Full data (172 trades, 1080 trade-days, 12,870 funding events, metrics_reliable=true); clean multi-asset long-beta structure

Backtest Review

Double-sort premise falsified: carry does not add edge — Sharpe 1.16 (iter-1 ungated) → 1.04 (iter-2 gated), both far below the momentum-only parent's 2.63; the gate made it slightly worse, not better

Backtest Review

Optimizing carry_weight will drive it toward 0, yielding a non-differentiated duplicate of the already-promoted momentum rotation

Backtest Review

Structurally disadvantaged: LONG-only on USD-M perps PAYS funding drag in the positive-funding bull regimes it trades, vs the SPOT momentum rotation (Sharpe 4.83, no funding cost) which dominates it

Backtest Review

Weak/insignificant on its own terms: Sharpe 1.04, sharpe_ci_low 0.277, information_ratio -0.0025, kurtosis 139.8 — headline concentrated in a few 2021 spike weeks (2023 -3.6%, 2026 -13.3%)

Analysis

Do NOT optimize yet — the 3 tunable params (lookback_days, top_n, regime_sma_days) cannot touch the core issue, so a 2-hour run would at best produce a worse duplicate of the already-promoted momentum rotation. Two required changes: 1) MAKE THE CARRY BLEND TUNABLE (the key fix). The score is hardcoded `z_mom - z_fund` (equal weight). Introduce a `carry_weight` parameter: score = z_mom - carry_weight * z_fund, with a search range spanning [0.0, ~1.0]. This is essential because on USD-M majors funding is predominantly POSITIVE in the bull regimes this long-only book trades, so an equal-weight subtraction of z(funding) penalizes exactly the crowded-long, highest-momentum names — fighting the momentum edge and explaining why Sharpe fell from the parent's 2.63 to 1.16. Letting the optimizer choose carry_weight lets the data decide whether carry adds anything; if the optimum is ~0, that is itself the finding (the double-sort has no independent edge and you should defer to the existing momentum rotation rather than ship a duplicate). Consider also only applying the carry tilt when funding is actually negative (gate it), so it helps in the regimes the carry parent exploited rather than fighting momentum in positive-funding regimes. 2) PROVIDE A MOMENTUM-ONLY ABLATION. Re-run with carry_weight=0 and report Sharpe/DD vs the combined config, so we can see whether the carry factor adds value over the promoted momentum-only parent BEFORE committing optimization compute. If combined does not beat momentum-only out of sample, this hypothesis is a worse duplicate and should be abandoned. 3) ADDRESS DRAWDOWN. max_drawdown 51.1% exceeds the 50% line (DD-CI high 74.9%). Check whether the carry tilt into lower-funding (often weaker/laggard) names is worsening drawdown, and whether AVAX's higher beta contributes. Only after the blend is tunable and a momentum-only ablation confirms the carry factor helps should this proceed to optimization.

Outcome Summary

CarryMomentumDoubleSortLongRotation8Majors tried to create a novel pipeline cell by combining the factory's two paper-validated long factors — momentum and negative-funding carry — holding names that were both trending up and paying you to be long, with a BTC-regime cash gate. The developer correctly applied the iteration-1 fixes (making carry_weight tunable and gating the tilt to negative funding only), and the cleaner test answered the decisive question definitively: carry adds no edge here, dragging Sharpe to 1.04 versus the momentum parent's 2.63 and actively hurting whenever the tilt engaged. The reviewer abandoned the thesis, noting that a long book on predominantly positive-funding majors pays carry rather than collecting it, so optimizing carry_weight would only converge to a duplicate of the already-promoted momentum rotation. The recommendation was to retire the carry+momentum double-sort on long-only majors and treat the existing momentum rotation as the canonical expression of the edge.

Outcome Summary

A long-only book on positive-funding majors structurally cannot harvest negative-funding carry — it pays funding rather than collecting it — so blending carry into a long momentum rotation can only dilute the momentum edge; when a combined factor's optimal weight collapses to zero, defer to the existing single-factor strategy rather than ship a duplicate.

Outcome Summary

The backtest reviewer returned 'abandon' at the pre-optimization gate: the double-sort premise was falsified — carry added no independent edge and actively diluted momentum, so optimizing carry_weight would drive it to ~0 and yield a non-differentiated duplicate of the already-promoted momentum rotation, while structurally a long-only USD-M perp book pays funding drag in the positive-funding bull regimes it trades and is dominated by the fee-free spot momentum rotation (Sharpe 4.83).

Outcome Summary

A long-only, weekly-rebalanced rotation over 8 USD-M Binance majors that double-sorted on the two factors that had reached paper in the factory — cross-sectional relative-strength momentum and negative-funding carry — holding the top-3 by a combined z-score (with the carry tilt gated to only genuinely negative funding), rotating to cash when BTC closed below its regime SMA.

Outcome Summary

With full data (172 trades, 1,080 trade-days, 12,870 funding events, metrics_reliable=true) the double-sort was decisively worse than its momentum parent: Sharpe 1.04 (down from the iteration-1 ungated 1.16 and far below the momentum-only parent's 2.63), profit factor 1.67, information ratio -0.0025, sharpe_ci_low 0.277, kurtosis 139.8, max drawdown 47.5%, with the headline concentrated in a few 2021 spike weeks. No optimization stage ran.
Strategy report

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