Skip to content

View original

AltPerpCrossSectionalFundingCarryCrowdingLS

Hypotheses

Cross-Sectional Funding-Carry + Crowding Premium Across 12 Never-Traded Binance USD-M Alt Perps — Dollar-Neutral Long the Lowest-Funding / Short the Highest-Funding Names, Inverse-Vol Weights, Volatility-Targeted Gross, Weekly Rebalance on DAILY Bars (3 parameters)

Hypotheses

A DOLLAR-NEUTRAL, LONG-SHORT, CROSS-SECTIONAL CARRY strategy over a fixed universe of 12 liquid but never-traded Binance USD-M alt perpetuals (TRX, VET, THETA, ALGO, EOS, NEO, IOTA, QTUM, CHZ, ENJ, SAND, CRV). The traded quantity is NOT price trend — it is the perpetual FUNDING RATE cross-section, a mechanically-paid cash flow plus the price-reversal premium that accompanies crowded perp positioning. Every 7 daily bars the strategy ranks the 12 names by their trailing mean funding rate (point-in-time, via supp_as_of/supp_window), goes LONG the n_per_side names with the LOWEST (most negative) funding — perps whose shorts are paying longs, i.e. crowded-short — and SHORT the n_per_side names with the HIGHEST funding — crowded-long perps whose longs are paying shorts. Within each side names are inverse-30d-realized-vol weighted; the two sides are sized to equal dollar notional so market beta is ~0; total gross exposure is then scaled so the book's estimated annualized vol equals vol_target_annual (capped at 2.0x equity). This is NOT a momentum strategy, NOT a beta-neutralized reformulation of one (L95), NOT a cointegration/ratio pair (L96), NOT an options structure (L102), NOT a COIN-M clone (L100), NOT an ETF regime rotation (L99), NOT a calendar/event overlay (L104) and NOT on an unvalidated venue (L103 — Binance USD-M daily bars and fundingRate parquet exist for all 12 names back to 2020-09). It deliberately fills three of the factory's most under-represented buckets at once: long_short (14.9% vs 55% cap on long_only), multi-instrument cross-section (19.3%), and 12 instruments with ZERO prior experiments. I pre-validated the mechanism offline on the actual catalog+supplementary data before writing this: 319 weekly rebalances 2020-06 to 2026-08, forming the book on the PRIOR week's funding and measuring the NEXT week's realized carry + price PnL, inverse-vol weighted, 20% vol target, minus a conservative 0.05%-of-gross weekly fee charge, gives net 0.36%/week, annualized Sharpe 1.16, max drawdown 19.8%, and POSITIVE in all 7 calendar years (2020 +18.8, 2021 +13.7, 2022 +10.6, 2023 +18.4, 2024 +23.1, 2025 +13.5, 2026 +17.2). The two PnL sources decompose cleanly: realized carry alone is +0.186%/week of gross with 95.7% of weeks positive (a near-deterministic cash flow), and the price leg adds +0.54%/week — the crowding-reversal component. Week-to-week funding rank autocorrelation is 0.54, so the signal is persistent enough that turnover stays near 50% of legs per rebalance.

Hypotheses

Iteration 4 fixes exactly the semantic-auditor finding (universe mismatch) and changes nothing else: the signal, sizing, risk and attribution code that passed Layers 1-3 is untouched. (1) UNIVERSE RESTORED TO THE PRE-REGISTERED TWELVE. EOSUSDT.BINANCE is back in extra_instruments/extra_bar_types, so the traded cross-section is the one the hypothesis's 319-rebalance statistics were computed on. (2) THE DATA FACT IS HANDLED AS DATA, NOT BY AMPUTATING THE UNIVERSE. Verified this iteration: the catalog dir EOSUSDT.BINANCE-1-DAY-LAST-EXTERNAL ends 2025-05-22, /fapi/v1/klines?symbol=EOSUSDT ends 2025-05-21 and /fapi/v1/ticker/24hr returns {} — the contract stopped trading (rename). Its funding feed, however, still publishes a pinned +0.0001 against a frozen 0.7799 mark, which would manufacture a phantom leg if the ranking trusted funding alone. So a new '_partial_history_legs' mechanism (a) exempts that leg from the base template's cross-leg alignment barrier — without the exemption the first missing EOS bar would freeze the ENTIRE book for the remaining ~15 months and produce a stranded, untradeable run — while (b) enforcing the identical timestamp match for the leg inside _record_prices, so a stale price can never enter the cross-section; the leg is excluded, its buffers cleared and its position flattened once at the last observed price. Availability is decided by the PRICE bar, never by the funding stamp. This is point-in-time clean: EOS is in the universe every bar it trades and out of it the moment it does not — no look-ahead, no survivorship pre-selection, and the same thing a live implementation would have experienced on 2025-05-22. (3) NO SUBSTITUTE ADDED. EOS's successor ticker AUSDT.BINANCE is listed (daily bars from 2025-05-29) and would fill the twelfth slot for the tail of the sample, but it is not one of the twelve pre-registered names, so it is deliberately NOT substituted in — adding it would create a fresh universe deviation. One honest caveat for the Research Lead: the hypothesis's claim that daily bars exist for all twelve names through 2026-08 is factually wrong at the end of the EOS series, so the pre-registered numbers cannot be reproduced bar-for-bar for the last ~15 months no matter how the code is written; the implementation above is the closest faithful reading. Leverage 2.0 is consumed: _gross_notional caps the vol-target gross multiplier at min(target/vol, _max_gross=2.0, leverage), and the book routinely runs above 1x equity notional.

Hypotheses

abandon_class=artifact. The headline risk metrics cannot be trusted and must not be handed to the optimizer. VERIFIED SYMPTOM (mechanism deliberately not asserted): the MTM daily series still prints cancelling ±2.5% pairs on the exact six December-2024 dates flagged in iterations 1-3, each netting ~0.1%, on a book advertised at 20% annualized vol, while one rebalance's commission+impact is ~0.05% — so these are not costs. Sharpe 0.318, vol 23.7% and DD 17.4% all come from that series, and the optimizer's objective IS that Sharpe. A second inconsistency points the same way: avg_trade_return_pct -0.084% is irreconcilable with the trade records (+0.256% mean, +$96/trade). The fork was pre-committed in iteration 2 and both branches end here: marking artifact ⇒ metrics unusable; genuine ±2.5% daily net delta ⇒ dollar-neutrality falsified. Independently, the premise does not hold on realized trades: carry is real and positive every year, but the crowding-reversal leg credited with +0.54%/week is residual alt-market beta whose sign flips yearly, and the result is five trades (top 5 = 88% of PnL; ex-top-5 the book earns +$7.5k over four years, less than funding alone). Delivered Sharpe 0.318 vs 1.16 pre-registered, 3 of 5 positive years vs 7 of 7 claimed, stressed tercile -7.15%. Recommend an engine-side review of multi-leg MTM marking and of avg_trade_return_pct on multi-instrument books — this symptom has appeared in three consecutive runs and is not fixable from strategy code.

Implementation

Dollar-neutral, long/short cross-sectional FUNDING-CARRY + crowding-reversal book over the twelve pre-registered Binance USD-M alt perpetuals (TRX, VET, THETA, ALGO, EOS, NEO, IOTA, QTUM, CHZ, ENJ, SAND, CRV) on 1-DAY bars. Every 7 calendar days (schedule anchored to the bar's own timestamp, not a bar counter) the names are ranked on their point-in-time trailing mean 8h funding rate: LONG the n_per_side lowest-funding (crowded-short) names, SHORT the n_per_side highest-funding (crowded-long) names, so both legs receive funding. Within a side weights are inverse-30d-realized-vol and capped at 40% of the side; the two sides carry equal dollar notional (net delta ~0); gross is scaled to a 20% annualized vol target with a selection haircut, capped at 2x equity, and cut intra-week when the book's own realized vol overshoots. Per-leg 25% loss trim; per-year/per-side funding-vs-price attribution emitted on stop. EOSUSDT is carried as a partial-history leg: it is in the cross-section for every bar its contract actually printed (2020-01..2025-05-22) and is excluded — with its position flattened — from the bar its contract stopped trading.

Verification Results

Either fold the haircut into the declared bound (search vol_target_annual over the effective range) or document that vol_target_annual is a nominal pre-haircut target, so the optimizer's chosen value is interpretable against the pre-registration.

Verification Results

_vol_haircut = 1.75 divides the pre-registered vol target: the effective target is 20%/1.75 = 11.4% annualized, not the 20% the hypothesis states. The rationale (names selected on funding extremes carry elevated forward vol) is defensible and the deviation is risk-CONSERVATIVE, and in the sandbox it is moot because the 2x gross cap binds instead — but the searchable knob vol_target_annual therefore does not mean what its name and the hypothesis say, and the optimizer will be searching an effective 0.057-0.20 band.

Verification Results

Log and assert that the EOS position count reaches zero on the bar after retirement (the BOOK log already prints npos per leg), and check in the full backtest report that no EOS position survives past 2025-05-22; if it does, realize the leg on its LAST printed bar instead (a one-bar-early exit is the honest delisting treatment).

Verification Results

_retire_leg flattens the EOS position on the FIRST bar EOS fails to print (2025-05-22 onward — verified in the catalog: EOSUSDT.BINANCE-1-DAY ends 2025-05-22 while all other 11 legs run to 2026-09). The exit is submitted as a market order on an instrument that has no further bar data, so the sim matching engine has only the stale last bar to fill against; if it does not fill, the leg is stranded until on_stop's close_all_positions and its terminal PnL is marked at a price ~15 months stale.

Verification Results

Move the _blocked.clear() to AFTER _trim_losing_legs' effect is consumed for that bar (or run the trim after the rebalance), so a leg stopped out today cannot be re-entered until the next rebalance.

Verification Results

_trim_losing_legs runs BEFORE the rebalance branch clears self._blocked, so a leg stopped out on a rebalance bar is unblocked in the same bar and can be re-entered immediately at the target weight — the 25% leg stop is a no-op on 1-in-7 bars. Cosmetic in expectation (the stop is not a hypothesis-stated exit), but it makes the realized stop behaviour date-dependent.

Verification Results

Sandbox is faithful but well below the pre-registered claim: Sharpe 0.444 (CI -0.44..1.30, PSR 0.81) and CAGR 17.0% at 24.1% realized vol over 1,823 daily bars, versus the hypothesis's offline 1.16 Sharpe / 19.8% DD / positive-every-year. Two things the analyst should check first on full history: (1) end_unrealized_pct = -26.05% — the headline +58.5% is carried alongside a large open MTM loss at run end, so realized-vs-unrealized decomposition (and the on_stop ATTRIBUTION log, which splits funding cash flow from price PnL per year per side) should be read before trusting the total; the hypothesis claims carry is +0.186%/wk near-deterministic and the price/crowding leg +0.54%/wk, so if the price leg is the whole (or negative) story the premise is not what was pre-registered. (2) The realized vol target does not bind: gross is set by min(target/vol_haircut/vol, _max_gross=2.0, leverage=2.0) and the 2x cap dominates — realized annualized vol landed at 24.1% against a nominal 20% target, so 'vol-targeted gross' is in practice '2x gross', and the vol_target_annual knob may be largely inert over much of its [0.10, 0.35] range (worth confirming in the sensitivity phase before treating it as a real parameter). Economics are not the concern: avg_trade_return_pct 0.446% vs a 0.10% USD-M round trip, commissions 1.53% of gross, impact 4.75% with capacity $44M, 622 closed trades — comfortably measurable.

Backtest Review

Funding carry is real and credited: +$28,106 of the $61,996 realized closed-trade PnL (45%), positive in EVERY year (2021 +2.4k, 2022 +8.7k, 2023 +10.7k, 2024 +6.2k) and on 406/645 trades — the one pre-registered claim that survived five iterations.

Backtest Review

Sample and mechanics match the hypothesis: 645 closed trades over 1,430 traded days, 12 declared legs, both sides used (288 long / 357 short), weekly cadence (345 trades at exactly 7d), dollar-neutral rotation. Not a disguised momentum clone.

Backtest Review

Iteration 5 did fix the semantic auditor's finding: all twelve pre-registered names are declared, with EOS handled as a partial-history leg that is excluded rather than stale-priced.

Backtest Review

BLOCKING, THIRD REQUEST UNANSWERED: cancelling daily MTM pairs unchanged on the exact dates named in iterations 1-3 — 12-10/11 (-2.42/+2.65), 13/14 (-2.87/+2.59), 17/18 (-2.50/+2.53), 21/22 (-2.31/+2.54), 24/25 (-2.28/+2.24), 28/29 (-2.66/+2.37), each netting ~0.1%. Symptom verified; mechanism NOT asserted.

Backtest Review

Reported avg_trade_return_pct -0.084% is irreconcilable with the detail file (mean pnl_pct +0.256%, avg_trade_pnl_usd +$96, which the win/loss averages reproduce) and has flipped sign across three runs (+0.565% → +0.189% → -0.084%).

Backtest Review

Crowding-reversal falsified: price PnL per year per side (2021 L +27.7k/S -17.8k, 2022 L -42.0k/S +37.1k, 2023 L +16.9k/S -15.0k, 2024 L +31.5k/S -2.5k) is residual alt-market beta, not a two-sided reversal premium.

Backtest Review

Five trades ARE the result: top 5 of 645 = 88% of PnL, top 20 = 225%; ex-top-5 the book earns +$7.5k over four years, less than funding alone, so the price leg is ~-$20.6k.

Backtest Review

Stressed vol tercile -7.15% (Sharpe -0.219) vs calm +32.2% — backwards for a crowding-washout harvest.

Backtest Review

Pre-registered Sharpe 1.16 / 7 positive years → delivered 0.318 (CI -0.54..1.20), PF 1.158, 3 of 5 years positive.

Backtest Review

Run window still ends 2025-01-11 and equal-beta sizing / n_per_side 4-5 were never implemented (asks #2 and #3 from iterations 2-3); end_unrealized_pct -27.1.

Analysis

Code↔hypothesis misalignment found by the semantic auditor — the code does NOT implement the hypothesis. Re-code the strategy to implement the hypothesis EXACTLY (instrument, timeframe, direction, the named edge/mechanic, sizing). Concrete issues: Universe mismatch vs. the pre-registered hypothesis: the hypothesis specifies a fixed 12-name universe (TRX, VET, THETA, ALGO, EOS, NEO, IOTA, QTUM, CHZ, ENJ, SAND, CRV) and asserts its pre-validated stats (319 weekly rebalances 2020-06 to 2026-08, Sharpe 1.16, 7 positive calendar years) were computed on that 12-name cross-section, but config.instrument_id + extra_instruments contain only 11 names — EOSUSDT.BINANCE is absent (verified: the catalog dir EOSUSDT.BINANCE-1-DAY-LAST-EXTERNAL holds a single parquet spanning 2020-01-09 to 2025-05-22, so the drop reason is factually correct, and the hypothesis's own claim that daily bars exist for all 12 names is wrong at the END of the series). The deviation is disclosed in the docstring/description and Layer 1.5 does not fail it (it only enforces the primary instrument), but the traded cross-section is not the one the pre-registered success numbers were computed on, so preregistered_prediction scoring in the analyst brief compares against a universe the code cannot reproduce.

Outcome Summary

AltPerpCrossSectionalFundingCarryCro-e55e82eb82

Outcome Summary

AltPerpCrossSectionalFundingCarryCrowdingLS was a weekly-rebalanced, dollar-neutral funding-carry book across twelve previously untraded Binance USD-M alt perpetuals, pre-registered on offline evidence of Sharpe 1.16 and seven positive calendar years. The delivered backtest fell well short: Sharpe 0.318, profit factor 1.158, 34.86% total return and 17.36% max drawdown over 645 trades, with the reviewer confirming funding carry was positive every year while the claimed crowding-reversal leg looked like residual alt-market beta, 88% of PnL sitting in five trades, and the stressed vol tercile losing 7.15%. After four iterations the run was abandoned at the backtest-review gate as an artifact: cancelling ±2.5% daily MTM pairs recurred on the exact dates flagged in three prior iterations, and the reported per-trade return contradicted the trade file, so the metrics the optimizer would have maximized were deemed unusable. The reviewer escalated the marking and avg_trade_return_pct behaviour on multi-instrument books for engine-side review rather than more strategy-code changes.

Outcome Summary

Pre-register a falsifiable decomposition and a metrics-integrity check first — here the carry leg was real but the crowding-reversal premium turned out to be residual alt-market beta concentrated in five trades, and unresolved multi-leg MTM/per-trade-return inconsistencies ended the run before any parameter work could matter.

Outcome Summary

The backtest-review gate returned abandon with abandon_class=artifact: the daily MTM series still printed cancelling ±2.5% pairs on the same December-2024 dates flagged in three earlier iterations, and the reported avg_trade_return_pct (-0.084%) could not be reconciled with the trade records (+0.256% mean, +$96/trade), so the headline Sharpe/vol/drawdown were judged untrustworthy to hand to the optimizer. Optimization, analyst review and risk review were never reached.

Outcome Summary

A dollar-neutral, cross-sectional carry book over 12 never-traded Binance USD-M alt perps that went long the lowest-funding (crowded-short) names and short the highest-funding (crowded-long) names each week, inverse-vol weighted and scaled to a 20% annualized vol target, to harvest funding cash flow plus a crowding-reversal price premium.

Outcome Summary

The single backtest over 1,823 daily bars (2020-01-16 to 2025-01-11) returned 34.86% total (CAGR 13.12%) with Sharpe 0.318 (CI -0.54 to 1.20), profit factor 1.158, max drawdown 17.36% and 645 closed trades at a reported avg_trade_return_pct of -0.084%, far below the pre-registered Sharpe 1.16 and 7-of-7 positive years. The reviewer found funding carry genuinely positive every year (+$28,106, 45% of realized PnL) but the top 5 trades accounted for 88% of PnL and the stressed vol tercile returned -7.15% (Sharpe -0.219).
Strategy report

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