Strategies
Persistent Funding-Carry Valuation Tilt, Single-Venue Long-Short (Single-Instrument BTCUSDT.BINANCE USD-M — Use the MULTI-WEEK AVERAGE Funding Rate as an Expensiveness/Carry Signal: Tilt SHORT When Longs Have Been PERSISTENTLY Paying Rich Funding (Crowded, Negative Carry, Historically Precedes Mean-Reverting Underperformance) and LONG When Shorts Have Been Persistently Paying; Weeks-Long Holds, Low-Turnover, 3-Parameter)
Outcome: Abandoned
BtcPersistentFundingCarryValuationTiltLS
Backtest gate: - metrics unreliable: 4 trades / 500 data days is too little evidence (need >=5 trades over >=10 days) — increase signal frequency or widen the window
Hypothesis
Implementation
Long/short BTCUSDT.BINANCE USD-M perpetual on a slow funding-carry valuation tilt. The signal is the trailing 14-day (multi-week) average funding rate, z-scored against its own trailing 120-day distribution and negated: persistently rich funding (longs paying heavy carry, perp expensive/crowded long) tilts SHORT, persistently negative funding (shorts paying, perp cheap) tilts LONG. Daily bars, entry at |tilt| > 0.4 sigma, exit when the carry gap halves (|tilt| < 0.2) or inverts past the opposite threshold; mean hold 24-42 days. Volatility-targeted sizing (30% annualised target, capped at 1x equity notional), no leverage. Stays completely flat if the funding feed is missing -- no price-only fallback.
Verification Results
Confirm FactoryStrategy honors the min_bars_required override for warmup gating; if not, entries are still internally gated on funding-z availability so behavior is unchanged.
min_bars_required(self) overrides a framework method (static-analysis base_shadow warning). The override only gates price-vol warmup (vol_days+2); the carry z-baseline warms up independently on the funding grid via min_z_days seeding, and the signal path guards defensively (returns flat when z is None). Low risk even if the base ignores the override.
Sandbox smoke test is decisively negative (total_return -71.5%, Sharpe -0.37 CI [-1.11, 0.32], profit_factor 0.74, avg_trade_return_pct -2.59%, negative expectancy) over a near-full 2399-day / 55-trade sample, and short_win_rate 0.43 vs long_win_rate 0.59 hints the carry->reversion polarity may be weak or inverted. More tellingly, the developer's OWN exploratory event study (disclosed honestly in the code) found no reliable relationship between trailing carry-z and forward returns (|t| <= 0.78 across 12 window/horizon cells) and the top carry quintile — the state the code SHORTS — showed POSITIVE forward returns, i.e. exploratory evidence against the premise. The mechanism is orthogonal and correctly implemented, and the smoke test is unoptimized, so this does not block; but the analyst should treat the premise as at-risk of falsification on full history and check per-regime/per-direction attribution before spending optimization budget. Trade count (~55 over 6.5y) is a real but modest sample by design (weeks-long carry), so edge/noise separation will be limited.
Backtest Review
- Sharpe
- -0.22
- Total return
- -65.90%
- Max drawdown
- 76.05%
- Trades
- 51
- Win rate
- 52.9%
- Profit factor
- 0.75
Mechanism is orthogonal to trend, correctly implemented (point-in-time funding lookup, negation sign is coherent), single-instrument/single-venue, low turnover so fees are immaterial (commission only 1.63% of gross)
Decisive sample: 51 trades over 6.5 years (25 long / 26 short), metrics_reliable=true
Negative expectancy on a reliable sample: avg_trade_return_pct -2.34% (BELOW ZERO), profit_factor 0.746, total_return -65.9%, Sharpe -0.224 (CI [-1.02, 0.57]), expectancy -$704/trade, avg_loss $5895 >> avg_win $3910
Premise measurably absent, not mis-tuned: loses in EVERY regime (calm -10.6%, normal -36.1%, stressed -41.0%) and in most years (2021 -26.8%, 2022 -14.2%, 2024 -29.3%)
Developer's own honest event study found no carry->reversion relationship (|t|<=0.78 across 12 cells) and the top carry quintile — the state the code SHORTS — had POSITIVE forward returns, i.e. exploratory evidence against the premise. QA's edge concern is borne out on full history
max_drawdown 76%, recovery_factor -0.75; this is iteration 5 of the same mechanism
Analysis
Backtest gate: - metrics unreliable: 4 trades / 500 data days is too little evidence (need >=5 trades over >=10 days) — increase signal frequency or widen the window
Iteration History
Backtest and paper results are hypothetical. Trading involves risk of loss.