Skip to content

View translation

CrossSectionalFundingCarryDollarNeutralLS

Hypotheses

Cross-Sectional Funding-Rate Carry, Dollar-Neutral Long-Short Basket (Multi-Instrument BINANCE USD-M — Rank ~8 Liquid Perps by 8h Funding, LONG the 2 Paying You Most to Be Long (Most-Negative Funding) / SHORT the 2 Paying You Most to Be Short (Most-Positive Funding), Collect the Funding Dispersion, Dispersion-Gated, 3-Parameter)

Hypotheses

A MARKET-NEUTRAL, MULTI-INSTRUMENT CARRY strategy that harvests the large, persistent DISPERSION in perpetual funding rates across a basket of ~8 liquid BINANCE USD-M perps (BTC, ETH, SOL, BNB, XRP, DOGE, AVAX, LINK). It is a fundamentally different FAMILY from everything in my pending set (all momentum/trend/reversal price-prediction) and from the dying single-name directional graveyard: the edge is a mechanically-PAID cash flow (funding), not a price forecast. Each funding cycle it ranks the universe by 8h funding and goes LONG the 2 perps with the MOST-NEGATIVE funding (shorts are paying longs — you get paid to hold long) and SHORT the 2 with the MOST-POSITIVE funding (longs are paying shorts — you get paid to hold short), at EQUAL notional (dollar-neutral). It then simply COLLECTS the funding on both legs each 8h. This is decisively distinct from the failed single-instrument BTC spot-perp funding carry (which netted a trivial 0.006% because BTC funding is tiny and it fought a 0.30% cross-venue round trip): here we deliberately select the TAILS of the funding distribution, where the combined differential is routinely 0.1-0.4% PER 8h (≈0.3-1.2%/day) — one to two orders of magnitude larger — against a single ~0.10% same-venue perp round trip held for days. It is also NOT the CM-vs-USDM 2-leg spread that died in verification (that carried inverse-contract math and a huge parameter list); this is a simple same-venue linear-perp rank-and-hold with a tiny parameter set. Real crypto funds run exactly this 'funding arbitrage' profitably. Delta risk is bounded by equal-notional dollar-neutrality and a wide per-leg stop, and drawdown is diversified across 4 legs (no single-name blow-up). Fills under-represented buckets: market-neutral, multi-instrument (18.3%), long_short (13.5%), and uses funding data (an edge source, not price). 3 parameters (funding smoothing, N per side fixed at 2, minimum-dispersion entry gate).

Hypotheses

I traced the zero-trade failure in the pipeline source instead of loosening thresholds, and the feedback's suggested remedy cannot apply here: the ranking never had a cross-section to rank. funding_rates_by_instrument, the per-leg map this strategy ranks on, is not in PipelineProcessor.SUPP_KEYS (verified by importing it: the tuple is funding_rates, liquidations, open_interest, top_account_ratio, top_position_ratio, global_account_ratio, taker_ratio, metrics, hl_funding_rates, deribit_dvol, deribit_funding) and generate_synthetic_supplementary contains zero references to it, so Layer 3 cannot deliver it by any path. Layer 3 also passes supp inline and never sends a supp_spec, so subprocess_entry._resolve_supp returns the inline dict plus per-leg OPEN INTEREST only. The flat funding_rates fallback covers the primary symbol alone, leaving exactly one funded leg, and n_side = min(2, 1//2) = 0 returns 0.0 on every bar — which is precisely the reported 0 sides over 6,306 evaluated bars. The data is not the issue: every universe member has deep funding history in PostgreSQL (BTC 85,697 rows, BNB 82,178, XRP 82,997, SOL 80,027, ETH 77,462, LINK 76,753, DOGE 73,312, AVAX 71,774), and the full backtest path does build the per-leg map because backtest_agent passes supp_spec, so load_for_subprocess calls _load_supp_with_per_leg_funding and all eight legs arrive funded. I deliberately did not work around this: open_interest_by_instrument IS available per-leg in Layer 3, but ranking on open interest would silently substitute a different edge for the funding carry under test, and trading the single funded leg directionally is the single-name funding bet the hypothesis explicitly excludes. The code change is therefore the honest one — the funded/unfunded split is now logged once by name, with an explicit warning when fewer than two legs carry funding, so a cross-sectional book that cannot see its cross-section says so in its own log rather than surfacing as an unexplained no-trades verdict two layers later. I also added _param_bounds mirroring the clamps.

Hypotheses

L45 multi-instrument cross-sectional basket (0/84 survivors) whose result is a single-regime-2021 artifact — not worth 2 hours of optimization. Funding is now delivered and credited (21,058 events), so this is a genuine economic result, and it still fails: the +135% total return is dominated by 2021 (+246.8% annual, Feb-2021 alone +120%), and every subsequent year decays to negative (2022 +12.5% → 2025 +1.6% → 2026 -5.1%). It is not significant (Sharpe 0.767 with bootstrap CI [0.026, 1.49] straddling zero, PF 1.09), so it will fail the deflated-Sharpe gate. Crucially it is not the clean dollar-neutral carry it claims: annualized_volatility is 171%, downside_deviation 157, exposure 239%, max_drawdown 36% (CI to 99.5%), with +55%/+39% single days — the equal-notional legs do not cancel beta, so the 'carry' is swamped by directional/leverage risk (selecting the most-negative-funding names goes long the names being dumped). It is also capacity-dead (impact 19.1% of gross, capacity ~$2.75M). Optimization cannot fix an edge that lives only in 2021 and a book that isn't actually market-neutral. Failure pattern: no_edge/risk_reject cross-sectional funding-carry basket, 2021-carried artifact, uncancelled beta (L45).

Implementation

Market-neutral cross-sectional funding carry across 8 liquid Binance USD-M perps (BTC, ETH, SOL, BNB, XRP, DOGE, AVAX, LINK) on 8-hour bars aligned to the funding cycle. Each cycle the universe is ranked by funding smoothed over funding_smooth prints; the book goes LONG the 2 perps with the most-negative smoothed funding (shorts pay longs) and SHORT the 2 with the most-positive (longs pay shorts), at equal notional so it is dollar-neutral, then simply collects funding on both legs. Smoothing is essential rather than cosmetic: raw funding ranks reshuffle roughly two thirds of cycles, and chasing them churns the whole book for more fees than the dispersion pays. A dispersion gate holds the book entirely flat when the tail spread is too tight to cover entry cost, legs whose desired side is unchanged are never re-traded, and a wide per-leg stop bounds single-name gap risk. Ranking runs only over legs that have both a real funding series and a contemporaneous price, with n_side adapting down to that funded subset; legs without funding are excluded rather than proxied from price, and a single funded leg is never traded directionally.

Verification Results

Verification failed (Layer 3 — sandbox backtest): No trades produced Bar type used: BTCUSDT.BINANCE-8-HOUR-LAST-EXTERNAL, Bars processed: 7050 Diagnostics: should_enter() returned a side 0 times over 6306 evaluated bars -> your ENTRY CONDITION never triggered. Loosen the entry logic / thresholds. Ensure your strategy produces trades with the given data and parameters.

Backtest Review

Genuinely differentiated funding-carry family; per-leg funding now delivered and credited (21,058 funding events); adequate trade count (2,279)

Backtest Review

avg_trade_return_pct 0.409% nominally clears the fee floor

Backtest Review

Edge concentrated in 2021 (annual +246.8%, Feb-2021 alone +120%); every subsequent year decays — 2022 +12.5%, 2023 +10.7%, 2024 +9.0%, 2025 +1.6%, 2026 -5.1% — the classic single-regime-2021 artifact

Backtest Review

Not statistically significant: Sharpe 0.767 with bootstrap CI [0.026, 1.49] essentially straddling zero; profit_factor only 1.09

Backtest Review

Not the clean market-neutral book it claims: annualized_volatility 171%, downside_deviation 157, exposure_pct 239%, end_unrealized_pct -223%, max_drawdown 36% (CI to 99.5%) — the equal-notional legs do not neutralize beta, so it carries large directional/leverage swings (e.g. +55% and +39% single days)

Backtest Review

Capacity-dead: impact_cost_pct 19.1% of gross, capacity_usd only ~$2.75M; total commission $173k

Backtest Review

L45 multi-instrument cross-sectional basket family (0/84 survivors)

Iteration History

Verification failed (Layer 3 — sandbox backtest): No trades produced Bar type used: BTCUSDT.BINANCE-8-HOUR-LAST-EXTERNAL, Bars processed: 1051 Diagnostics: should_enter() returned a side 0 times over 978 evaluated bars -> your ENTRY CONDITION never triggered. Loosen the entry logic / thresholds. Ensure your strategy produces trades with the given data and parameters.
Strategy report

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