CrossSectionalFundingSkewCarryDollarNeutralAltPerps4H
Hypotheses
Cross-Sectional Funding-Skew Carry: Long Most-Negative / Short Most-Positive USD-M Alt Perps (Market-Neutral, 4H Rebalance)
Hypotheses
Reframe of a BTC-only negative-funding-squeeze carry whose MECHANISM was sound (in-sample DSR 0.79, Sharpe above the luck bar, clean 2020-2022 P&L) but whose TARGET decayed: BTC stopped printing deeply-negative funding after 2022, so the single-instrument entry fired zero times out-of-sample and the holdout was -6.05. Rather than wait for a regime that no longer occurs on BTC, this version harvests the SAME funding/squeeze edge CROSS-SECTIONALLY across a universe of ~12 liquid Binance USD-M altcoin perps, where deep funding skew still appears regularly during crowding episodes. Each rebalance the strategy ranks the universe by current funding rate and builds a DOLLAR-NEUTRAL book: LONG the bottom-decile (most-negative funding = crowded shorts paying longs, with short-squeeze convexity) and SHORT the top-decile (most-positive funding = crowded longs paying shorts). Both legs EARN funding by construction, and the market-neutral structure strips out crypto beta, directly addressing the directional blow-up (holdout -6.05) that killed the BTC long-only version. Funding is the primary cash flow; the squeeze on the long leg is upside convexity, not the thesis. 4H bars for timing; funding-rate stream for the ranking signal. Distinct from existing pairs/ratio trades: this is a cross-sectional funding FACTOR, not a two-name spread.
Hypotheses
Iteration 5 fix: Layer 2 (synthetic scenarios) failed with `_bar_ts() takes 1 positional argument but 2 were given` because `_bar_ts` was a `@staticmethod`. The Layer-2 _StrategyProxy rebinds strategy methods without preserving the staticmethod descriptor, so `self._bar_ts(bar)` passed both `self` and `bar` into a one-parameter function. The minimal, non-regressing fix converts `_bar_ts` to a normal instance method (`def _bar_ts(self, bar)`), which is proxy-safe and identical in behavior for the real engine. No imports, signal logic, rebalance/netting code, or config were changed — Layer 1 remains green and the dollar-neutral cross-sectional funding mechanism is untouched.
Hypotheses
Overfit + no-edge failure on final optimization attempt 2 of 2. Walk-forward is_overfitted=TRUE: avg IS Sharpe 3.59 collapses to avg OOS 0.317 with OOS windows [0.95, 0.0, 0.0] — two of three OOS folds empty. Multiple-testing gate fails decisively: deflated_sharpe=0.0 (vs 0.95), is_significant=false, PBO=0.6812 (>0.5), sharpe_ci_low=-1.424 straddles 0, and the optimized Sharpe 0.665 sits far below the 225-trial expected-max luck bar of 5.409 — probabilistic_sharpe 0.7605 vs DSR 0.0 is the textbook PSR-vs-DSR selection-inflation trap. Sensitivity FAILED with 4 cliff parameters (leg_size, funding_prints, gross_exposure, min_funding_spread) — leg_size=2 and funding_prints=2 flip Sharpe negative on one step. The base backtest LOSES money (total_return -14.34%, Sharpe 0.31); the optimized +5.69% is a best-of-225 mirage produced by thinning the book (leg_size 3->1, gross_exposure 1.0->0.60). The holdout 'pass' (ratio 2.578) is spurious — inflated only because its WF-OOS baseline (0.317) is degenerate, carried by one non-empty window while the other two are zero. Even setting robustness aside, the strategy is not tradeable: impact_cost_pct is 45.2% (base) / 31.4% (optimized) of gross PnL from heavy multi-name churn (turnover 582-1131), with a negative information_ratio (-0.36 / -0.31). Not iterate: final attempt, and the binding failures are structural (empty OOS windows, 4-cliff surface, PBO 0.68, impact-swamped edge) with no robust parameter region for a further best-of-225 sweep to find. Not revise_hypothesis: per the overfit->abandon rule this is high-IS/empty-OOS overfitting, and the cross-sectional funding factor is ITSELF the reframe of the failed BTC funding-squeeze ancestor (holdout -6.05, never promoted) — the mechanism has now failed in both single-name and 12-name cross-sectional expressions, has no promoted sibling to strand, and there is no untried target to reframe toward. FAILURE PATTERN: reframing a decayed single-asset BTC negative-funding-squeeze carry into a dollar-neutral cross-sectional funding factor across a 12-name USD-M alt universe does NOT manufacture a promotable edge — it overfits (IS 3.59 -> two empty OOS windows, DSR 0.0, PBO 0.68, 4 sensitivity cliffs, negative base return), and the multi-name churn makes impact cost (31-45% of gross) swamp whatever thin carry exists. Correct beta-neutralization (beta ~0.03) fixes the directional blow-up but does not create statistical significance or forward-generalization, and a holdout 'ratio' inflated by a degenerate WF-OOS baseline is not a real pass.
Implementation
Dollar-neutral cross-sectional funding factor across ~12 liquid Binance USD-M alt perps on 4H bars. Each rebalance (8h, funding-aligned) ranks the universe by trailing funding and goes LONG the most-negative-funding slice / SHORT the most-positive-funding slice, netting delta orders per leg so held names avoid churn. Per-leg funding read from supplementary_data['funding_rates_by_instrument']; funding-spread and sign gates ensure harvested carry clears fees; per-name ATR stops cap blow-ups.
Verification Results
Verification failed (Layer 2 — synthetic scenarios):
Parameters used: ['leg_size', 'atr_period', 'min_notional', 'atr_stop_mult', 'funding_prints', 'gross_exposure', 'funding_sign_eps', 'min_funding_spread', 'rebalance_band_frac', 'rebalance_every_bars']
Check that __init__ sets all attributes from self.parameters.get().
- steady_uptrend: TypeError: CrossSectionalFundingSkewCarryDollarNeutralAltPerps4H._bar_ts() takes 1 positional argument but 2 were given (bar timestamp: 1735690740000)
- steady_downtrend: TypeError: CrossSectionalFundingSkewCarryDollarNeutralAltPerps4H._bar_ts() takes 1 positional argument but 2 were given (bar timestamp: 1735690740000)
- flat_ranging: TypeError: CrossSectionalFundingSkewCarryDollarNeutralAltPerps4H._bar_ts() takes 1 positional argument but 2 were given (bar timestamp: 1735690740000)
- volatility_spike: TypeError: CrossSectionalFundingSkewCarryDollarNeutralAltPerps4H._bar_ts() takes 1 positional argument but 2 were given (bar timestamp: 1735690740000)
- zero_volume: TypeError: CrossSectionalFundingSkewCarryDollarNeutralAltPerps4H._bar_ts() takes 1 positional argument but 2 were given (bar timestamp: 1735690740000)
- price_gap: TypeError: CrossSectionalFundingSkewCarryDollarNeutralAltPerps4H._bar_ts() takes 1 positional argument but 2 were given (bar timestamp: 1735690740000)
Backtest Review
Funding carry is real and correctly credited: sum(funding)=+$74,911 across 1025 trades, with per-trade funding folded into pnl (verified in detail file)
Backtest Review
Genuine cross-sectional book — all 12 alts rotate across long/short by funding rank (62-97 trades each), not a degenerate shared-series fallback
Backtest Review
Reframe successfully fixes the ancestor's decay: the alt universe fires funding-carry trades regularly (2022-2026) where BTC-only fired zero OOS
Backtest Review
Truly market-neutral: beta 0.04, benchmark_correlation 0.12, benchmark_meaningful=false — directional blow-up of the ancestor is gone
Backtest Review
Clear, articulable optimization path aimed at the actual failure (costs), with the key knobs (min_funding_spread, rebalance_every_bars, band, leg_size) unexplored
Backtest Review
Net full-sample return -14.34%: gross carry (+$60,570 pnl) is entirely consumed by commission $49,403 + market impact $50,001
Backtest Review
impact_cost_pct 45.2% of gross and capacity_usd only ~$489K — severe liquidity/impact drag; edge may exist only at toy scale
Backtest Review
Turnover 1131% (8h rebalance) is the proximate cause of the cost bleed
Backtest Review
Carry is asymmetric — long legs earned $69.8K funding vs short legs $5.1K; the short leg mostly adds cost/noise as a beta hedge
Backtest Review
Performance is episodic (strong 2023-04 and 2026-03, near-flat/dead in 2024, bleeding 2025); Sharpe 0.31 with CI straddling 0 (-2.19 to 2.34), return_kurtosis 25
Analysis
Market-neutral construction did strip crypto beta (beta 0.02-0.04, benchmark_correlation 0.06-0.12), correctly addressing the directional blow-up that killed the BTC long-only ancestor (holdout -6.05).
Analysis
Centralized netting order management kept churn from being even worse and the basket did form (1025 base / 367 optimized trades) — the code implements the stated cross-sectional funding-factor mechanism.
Analysis
Fails deflated Sharpe decisively: DSR=0.0 with optimized Sharpe 0.665 FAR below the 225-trial expected-max luck bar of 5.409; is_significant=false, sharpe_ci_low=-1.424 straddles 0, PBO=0.6812.
Analysis
Walk-forward is_overfitted=TRUE: avg IS 3.59 -> avg OOS 0.317 with OOS windows [0.95, 0.0, 0.0] — two of three OOS folds are empty.
Analysis
Sensitivity FAILED with 4 cliff parameters (leg_size, funding_prints, gross_exposure, min_funding_spread); leg_size and funding_prints flip Sharpe negative on a single step.
Analysis
Base backtest loses money (total_return -14.34%, Sharpe 0.31); optimized only +5.69% is a best-of-225 artifact.
Analysis
Impact costs dominate: impact_cost_pct 45.2% base / 31.4% optimized of gross PnL, with negative information_ratio (-0.36 / -0.31) — the multi-name churn is not fee/impact-viable.
Analysis
Holdout 'pass' (ratio 2.578) is spurious — inflated by a degenerate ~0.317 WF-OOS baseline carried by a single non-empty window.
Analysis
The Research Lead REVISED this hypothesis because the previous premise did not work. Implement the REVISED hypothesis (see the hypothesis description) from scratch — do not reuse the prior strategy.
Revision rationale: WHAT I CHANGED vs the failed BTC hypothesis and WHY. The analyst was explicit that this is NOT a noise-fit and NOT a tuning problem (DSR 0.79, far above the abandoned trend/breakout siblings) — it is TARGET DECAY: BTC's deeply-negative funding regime structurally disappeared after 2022, so the entry fired ZERO times in all three OOS windows. Therefore I kept the mechanism and re-pointed it at a live regime. (1) INSTRUMENT: BTC-only -> a 12-name cross-sectional universe of liquid USD-M alt perps, exactly the analyst's reframe (a) 'go long the perp(s) with the most-negative funding' and (b) 'a cross-sectional basket across all perps.' A rank-based selector never goes dark the way a single-instrument threshold did. (2) MECHANISM/DIRECTION: I upgraded the pure-long squeeze bet into a DOLLAR-NEUTRAL long-most-negative / short-most-positive funding factor. This earns funding on both legs and removes crypto beta — directly fixing the directional blow-up the holdout -6.05 exposed, where the long-only version got crushed when the squeeze didn't materialize. (3) GUARD: I baked in the analyst's CRITICAL guard as a min funding-spread gate (so carry clears fees) and as an explicit Analyst instruction — require the recent OOS window to BOTH fire and be profitable before trusting it; do not assume transfer. (4) KEPT: funding credited by the engine, 4H timing, ATR stop, and funding-normalization exits, as instructed. I did NOT re-propose BTC-only negative-funding entries — BTC merely sits in the universe and correctly almost never qualifies for the long leg now. Trade-offs acknowledged: this adds to the BINANCE venue (already near its <=40% cap), justified because cross-sectional USD-M funding scanning structurally needs that venue, and it advances the under-represented market-neutral direction quota. Priority high (2) because funding edges are under-explored in the portfolio and this fills market-neutral + cross-sectional buckets.
Outcome Summary
This strategy took a sound-but-decayed BTC funding-squeeze carry and reframed it as a dollar-neutral cross-sectional funding factor across a dozen alt perps, aiming to earn the funding spread while stripping out crypto beta. It succeeded at the neutrality goal — beta ~0.04, the ancestor's directional blow-up gone, and $74,911 of real funding collected — earning an 'optimize' verdict despite a -14.34% base return, because commissions and 45% impact drag ate the entire carry. Optimization couldn't rescue it: the walk-forward was overfit (in-sample Sharpe 3.59 → out-of-sample 0.317 with two empty windows), deflated Sharpe hit 0.0 far below the 5.4 luck bar, the sensitivity surface showed four cliffs, and impact still consumed a third of gross PnL. On the second and final optimization attempt the analyst abandoned it, noting the funding mechanism had now failed in both single-name and 12-name expressions with no promoted sibling and no untried target to reframe toward.
Outcome Summary
Correctly stripping crypto beta fixes a directional blow-up but does not by itself create a statistically significant or fee-viable edge — multi-name cross-sectional churn can let impact and commissions swamp a real but thin funding carry, and reframing a decayed single-asset mechanism across a wider universe does not manufacture forward-generalization.
Outcome Summary
The analyst abandoned it at the post-optimization ANALYZING stage as a decisive overfit/no-edge failure: walk-forward was overfitted (in-sample Sharpe 3.59 collapsing to 0.317 out-of-sample with two of three OOS windows empty), deflated Sharpe was 0.0 against a 225-trial luck bar of 5.409, PBO 0.68 and sharpe_ci_low -1.42, sensitivity failed with 4 cliff parameters, and the impact costs (31–45% of gross) made it untradeable regardless.
Outcome Summary
A dollar-neutral cross-sectional funding-skew carry across ~12 liquid Binance USD-M alt perps — long the most-negative-funding names and short the most-positive on a 4H rebalance — reframing a decayed BTC-only negative-funding-squeeze carry to harvest the same funding edge where deep skew still appears.
Outcome Summary
The construction was genuinely market-neutral (beta ~0.04) and the funding carry was real (+$74,911 collected), but the base backtest still lost money (total return -14.34%, Sharpe 0.31, profit factor 1.086, max drawdown 40%) because commissions ($49.4k) and market impact ($50.0k, 45.2% of gross) consumed the carry; optimization only lifted it to +5.69% and Sharpe 0.665 by thinning the book.
Iteration History
BtcNegativeFundingCarrySqueezeCaptureLong
Iteration History
Verification failed (Layer 1 — static analysis):
- No class extending FactoryStrategy found (line None)
- Required method not implemented: should_exit (line None)
- Required method not implemented: should_enter (line None)
- Required method not implemented: position_size (line None)
- Required method not implemented: calculate_signal (line None)
Backtest and paper results are hypothetical. Trading involves risk of loss.