Skip to content

View translation

DeepNegativeFundingDipAccumulationBasket

Hypotheses

Deep-Negative-Perp-Funding Spot Dip Accumulation Basket, Long-Only (BINANCE_SPOT — 8 Liquid Alts, 4h Bars, Buy SPOT When the Matching USD-M Perp's 8h Funding Hits Its Own ≤5th-Percentile Short-Crowding Washout AND Price Stabilizes; Hold the Mean-Reversion Bounce, Per-Name Adaptive Threshold, 3-Parameter)

Hypotheses

A LONG-ONLY, spot-executed contrarian accumulation basket over 8 liquid alts on BINANCE_SPOT (DOGE, XRP, ADA, LINK, SOL, AVAX, LTC, DOT — USDT spot pairs). The traded instrument is SPOT (no funding drag, no leverage), but the ENTRY TRIGGER is a genuine non-price feed the spot book cannot see: the 8h funding rate of the matching USD-M PERP. Deeply negative perp funding means the perp crowd is short-heavy and PAYING to be short — a recognized short-crowding / capitulation condition that historically precedes a multi-day mean-reversion bounce (a short-squeeze into normalization). Rather than shorting the perp or fighting funding, we simply accumulate the underlying on spot and ride the bounce, then exit into funding normalization. This is deliberately NOT a funding-carry cashflow trade (those die fee_edge, L28/L1) — the edge is the PRICE bounce off a positioning extreme, captured on the cheaper-to-hold spot leg. Per-name ADAPTIVE percentile threshold (each name vs its own trailing 90-day funding distribution) fixes the fixed-threshold no_trades failure that killed the '8-ALT −0.05% deep-negative carry' sibling (that gate was far too tight for names whose funding rarely reaches −0.05%). Basket breadth (8 names × ~7 years × a ≤5th-percentile event rate) is what pushes the sample above the ~100-trade measurability floor despite each name firing rarely.

Hypotheses

Iteration-2 fix for the ONLY reported failure (Layer 2 synthetic scenarios): `_parse_funding` was a @staticmethod but is called as `self._parse_funding(series)`, and the Layer-2 _StrategyProxy re-binds every strategy method as a bound MethodType — which injects `self` as an extra positional arg into a staticmethod, raising `TypeError: takes 1 positional argument but 2 were given` on every scenario. The smallest possible fix is to make `_parse_funding` a normal instance method (`def _parse_funding(self, series)`); the single call site `self._parse_funding(series)` then binds correctly in BOTH the real engine and the proxy. I verified this explicitly by replaying the exact proxy rebinding (`types.MethodType(func, instance)` then calling with one arg) — it now succeeds where it previously raised. Nothing else changed: imports, class structure, all four abstract methods, the venue/basket design, and the entry/exit signal logic are byte-identical to the version that already passed Layer 1, so no earlier-layer regression. Confirmed via AST that no method carries a static/other decorator anymore (the remaining '@staticmethod' text is only inside the new explanatory docstring), and re-ran the entry regression (deep-negative funding + green bar → BUY, signal 16.13) to prove the passing logic is intact.

Hypotheses

Multiple hard-abandon gates trip at once: max_drawdown 61.2% (CI to 99%) exceeds the 50% floor; total_return -20.68% is negative with profit_factor 1.004 (dead-breakeven fee-edge signature); and impact_cost_pct 88.0% with capacity_usd only $129k means market impact consumes 88% of gross PnL and the edge exists only at toy scale. avg_trade_return_pct 0.165% is only marginally above the 0.15% floor and is swamped by that impact drag. Against its meaningful equal-weight-basket benchmark the strategy has information_ratio -0.68 — it adds negative active value, so simply equal-weight-holding the 8 names dominates it. The result is also single-regime: 2020 +28% (early bull) carries everything and it degrades to -16% (2024), -12% (2025) and negative 2022 — a long-only alt basket that gets run over in every bear. The adaptive percentile threshold did fix the sibling's no-trades problem (3,176 trades, no data wall), so this is a genuine strategy verdict, not a data artifact. Note the developer overrode the hypothesis's BINANCE_SPOT venue and traded the perps long-only, turning cheap spot accumulation into a leveraged-venue directional long-alt basket with exactly the bear exposure that killed it. Optimizing entry_pct/lookback_days/max_hold_days cannot flip PF 1.004 into a real edge, cannot cure the 88% impact drag or $129k capacity, and cannot clear the 50%-DD gate — it would only overfit the 2020 window. Fundamentally not viable; not worth 2 hours.

Implementation

Long-only contrarian accumulation basket over 8 liquid alt perps on BINANCE USD-M (DOGE primary + XRP, ADA, LINK, SOL, AVAX, LTC, DOT), 4h bars, leverage 1.0. Each name is traded independently: on each 4h bar it reads that name's own 8h perp funding series, computes the trailing lookback_days (90d) funding distribution, and when the current funding is at/below its own entry_pct (5th) percentile — a deeply-negative short-crowded positioning extreme — AND the current bar closes green (dip stabilized), it accumulates a long sized at 1/8 of equity. Exits into funding normalization (funding back to its trailing median), a max_hold_days (5d) time-box, or a 10% stop. Per-name funding resolved from funding_rates_by_instrument (real backtest, all 8 legs) with a fallback to flat funding_rates for the primary (Layer-3 sandbox / Layer-2 synthetic). Funding lookups use precomputed sorted arrays + bisect.

Verification Results

Verification failed (Layer 2 — synthetic scenarios): Parameters used: ['entry_pct', 'lookback_days', 'max_hold_days', 'per_name_frac', 'stop_loss_pct', 'min_funding_points', 'funding_max_lag_days'] Check that __init__ sets all attributes from self.parameters.get(). - steady_uptrend: TypeError: DeepNegativeFundingDipAccumulationBasket._parse_funding() takes 1 positional argument but 2 were given (bar timestamp: 1735689660000) - steady_downtrend: TypeError: DeepNegativeFundingDipAccumulationBasket._parse_funding() takes 1 positional argument but 2 were given (bar timestamp: 1735689660000) - flat_ranging: TypeError: DeepNegativeFundingDipAccumulationBasket._parse_funding() takes 1 positional argument but 2 were given (bar timestamp: 1735689660000) - volatility_spike: TypeError: DeepNegativeFundingDipAccumulationBasket._parse_funding() takes 1 positional argument but 2 were given (bar timestamp: 1735689660000) - zero_volume: TypeError: DeepNegativeFundingDipAccumulationBasket._parse_funding() takes 1 positional argument but 2 were given (bar timestamp: 1735689660000) - price_gap: TypeError: DeepNegativeFundingDipAccumulationBasket._parse_funding() takes 1 positional argument but 2 were given (bar timestamp: 1735689660000)

Verification Results

Acceptable given the funding-data constraint and 1x leverage. If strict spot execution is required, amend the hypothesis rather than the code.

Verification Results

Deliberate venue deviation: the hypothesis explicitly specifies BINANCE_SPOT execution ('The traded instrument is SPOT'), but the strategy trades the matching USD-M PERPs (DOGEUSDT.BINANCE etc.). This is NOT a whole-strategy swap — the 8 underlying assets, 4h timeframe, long-only direction, and core edge (fade a deeply-negative ≤5th-percentile funding short-crowding extreme, price-stabilization confirmed, capture the mean-reversion bounce, exit on funding normalization / time-box / stop) are all implemented faithfully. The developer's rationale is sound and grounded in a real constraint: per-name funding is only exposed via funding_rates_by_instrument for PERP legs, so a spot basket cannot see 8 perps' funding. Leverage is 1.0 (spot-like risk), a long perp at deeply-negative funding RECEIVES funding (tailwind), and taker fees are lower. CLAUDE.md permits futures when the edge is funding-based, which this is.

Verification Results

Confirm at BACKTEST_REVIEW that the full 8-leg run yields >~100 trades and preserves the positive per-trade edge.

Verification Results

Sandbox produced 39 trades (primary DOGE leg only — Layer-3 sandbox exposes flat funding_rates for the primary but not funding_rates_by_instrument for the 7 extra legs). Full-run measurability depends on all 8 legs trading; avg_trade_return_pct 0.67% clears the 0.15% futures floor comfortably.

Backtest Review

The per-name adaptive percentile threshold fixed the no-trades failure of the fixed-threshold sibling: 3,176 trades, well above the measurability floor, no data wall

Backtest Review

Genuine non-price funding trigger, correctly resolved per-leg via funding_rates_by_instrument

Backtest Review

max_drawdown 61.2% (CI to 99%) — above the 50% hard-abandon floor

Backtest Review

total_return -20.68% (negative) with profit_factor 1.004 — dead-breakeven fee-edge signature

Backtest Review

impact_cost_pct 88.0% and capacity_usd only $129k — market impact eats 88% of gross PnL; edge exists only at toy scale

Backtest Review

information_ratio -0.68 vs the meaningful equal-weight-basket benchmark — negative active value; a plain equal-weight hold dominates it

Backtest Review

Single-regime: 2020 +28% carries everything, degrades to -16% (2024), -12% (2025), negative 2022 — a long-only alt basket run over in every bear

Backtest Review

Developer overrode the hypothesis's BINANCE_SPOT venue and traded the perps long-only instead, converting cheap spot accumulation into a leveraged-venue directional long-alt basket

Outcome Summary

DeepNegativeFundingDipAccumulationBasket sought to accumulate 8 alts when their perp funding signaled a short-crowding capitulation extreme, betting on a mean-reversion bounce, with a per-name adaptive percentile threshold that successfully fixed the sibling strategy's no-trades failure and produced 3,176 well-sampled trades. But the clean run exposed no viable edge: profit factor 1.004, -20.68% total return, a 61.2% drawdown breaching the 50% hard floor, and 88% of gross PnL eaten by market impact at a mere ~$129k capacity. The returns were single-regime — 2020's +28% carried everything while it degraded to losses in 2022, 2024, and 2025 — and it underperformed a plain equal-weight hold (information ratio -0.68). The analyst abandoned it before optimization, noting the developer had also overridden the hypothesis's cheaper spot venue to trade perps long-only, and that tuning its three parameters could not cure the impact drag, capacity ceiling, or drawdown gate.

Outcome Summary

A signal whose per-trade return only marginally clears the fee floor is fatally exposed to market impact (88% of gross PnL) and tiny capacity, and a long-only alt basket that lives on a single early-bull regime adds negative active value versus simply equal-weight holding the names.

Outcome Summary

The analyst issued an 'abandon' verdict at the pre-optimization backtest-review gate as multiple hard gates tripped at once (max drawdown >50%, negative total return, PF near 1.0, impact cost >25%); it never reached optimization, risk review, or promotion.

Outcome Summary

A long-only contrarian accumulation basket over 8 liquid alts that entered when a name's matching USD-M perp funding hit its own trailing ≤5th-percentile short-crowding washout and price stabilized, aiming to ride the mean-reversion bounce into funding normalization (though the developer traded the perps long-only rather than the hypothesized BINANCE_SPOT legs).

Outcome Summary

Across 3,176 trades it was dead-breakeven-to-negative: profit factor 1.004, total return -20.68%, max drawdown 61.2% (CI to 99%), and avg_trade_return_pct 0.165% (barely above the 0.15% floor); impact_cost_pct was 88.0% with capacity only ~$129k, and information ratio -0.68 versus its equal-weight-basket benchmark.
Strategy report

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