Strategies
SOL/AVAX Cointegrated Pair Spread Mean-Reversion on Binance USD-M 4H (Market-Neutral Long-Short, Rolling Hedge Ratio)
Outcome: Abandoned
SolAvaxCointPairSpreadMR
Same-venue (Binance USD-M) pair on ~5y of clean 4H history — the prior cross-venue/short-history blockers are gone, so this is a fair test of the mechanism
Hypothesis
Negative expectancy on a reliable 1042-trade / 5.9-year sample: avg_trade_return_pct -0.366% (below zero), profit_factor 0.788, total_return -76.3%, CAGR -20.0%, Sharpe -0.008 with a CI [-0.87, 0.78] that straddles zero, and max_drawdown 77.6%. This is the analyst-sanctioned re-target of the SOL/AVAX pair onto its correct venue (same-venue Binance USD-M 4H, ~5y history, balanced 521/521 legs), so the mechanism got a fair test — and it is falsified: the strategy loses in every calendar year (2020-2026) and in every vol regime (stressed -62%). Commission is only 3.78% of gross, so this is NOT fee-fragility — the spread mean-reversion signal is gross-negative. Optimizing z_entry/z_exit/z_stop cannot invert a PF-0.788, below-zero-expectancy signal. The SOL/AVAX log-spread does not revert profitably on Binance 4H. abandon_class=negative_expectancy.
Implementation
Market-neutral mean reversion on the SOL/AVAX log-price spread, both legs on BINANCE USD-M perpetuals at 4-hour bars, OHLCV only. A rolling OLS of log(SOL) on log(AVAX) gives the hedge ratio beta and a residual spread; the residual's z-score over the same window is the decision variable. z at or above +2 means SOL is rich, so the book shorts SOL and buys AVAX; z at or below -2 means SOL is cheap, so it buys SOL and shorts AVAX. Exits are reversion inside +/-0.5, a 2.8-sigma relationship-break stop, or a 60-bar time stop. The AVAX leg carries beta times the SOL leg's dollar notional so the pair is return-neutral, and the BASE notional is bounded by an aggregate gross cap: base = min(25% of equity, 80% of equity / (1 + beta)), so the SUM of both legs never exceeds 0.8x equity for any hedge ratio. beta itself is clamped to [0.5, 2.0]. Leverage 1.0.
Verification Results
Optimizer should explore wider z_entry and/or a tighter z_exit-relative stop so captured reversion exceeds the four-fill round-trip cost; confirm positive expectancy over full history before promotion.
At the default parameter draw the strategy has a negative per-trade edge net of fees (avg_trade_return_pct -0.366% vs the ~0.20% round-trip cost of a two-legged pair). This is a viability/edge concern, not a code defect — it is left to the optimizer/analyst to resolve, not blocked here.
Backtest Review
- Sharpe
- -0.01
- Total return
- -76.32%
- Max drawdown
- 77.63%
- Trades
- 1042
- Win rate
- 47.3%
- Profit factor
- 0.79
Same-venue (Binance USD-M) pair on ~5y of clean 4H history — the prior cross-venue/short-history blockers are gone, so this is a fair test of the mechanism
Reliable 1042-trade sample with balanced long/short legs (521/521), matching the market-neutral hypothesis
Sizing/liquidation defect from the prior iteration is fixed (liquidated=false, gross cap enforced)
Negative expectancy on a decisive sample: avg_trade_return_pct -0.366% (below ZERO, not merely below the fee floor), profit_factor 0.788, total_return -76.3%, expectancy -$70/trade
Sharpe -0.008 / Sortino -0.007 with CI [-0.87, 0.78] straddling zero; loses in every calendar year 2020-2026 and in all three vol regimes (stressed regime -62%)
commission_pct_of_gross only 3.78% — the signal is gross-negative, not fee-killed; the SOL/AVAX spread does not revert profitably
max_drawdown 77.6% (recovery_factor -0.97, DD duration ~2037 days) — no capital-survivable edge
Iteration History
Verification failed (leverage_set_but_unused): config sets leverage=2.0 but the strategy never references leverage in sizing. Size positions on it — notional = equity * fraction * leverage / price (read self.config.leverage) — or set leverage=1.0. As written the leverage is inert and the backtest is identical to 1x.
Verification failed (Layer 1.5 — hypothesis/config consistency) [class=hypothesis_mismatch]: - config.instrument_id is SOLUSDT.BINANCE but the hypothesis declares AVAXUSDT.BINANCE — a different asset. Implement the hypothesis as written (or the Research Lead must revise it).
Backtest and paper results are hypothetical. Trading involves risk of loss.