Strategies
SOL–ETH Beta-Hedged Residual Mean-Reversion — Market-Neutral Statistical Pairs Spread on Two Liquid L1 Perps (Both BINANCE USD-M, Trade Only ≥2σ Residual Dislocations, 4H Bars, 3-Parameter)
Outcome: Abandoned
SolEthBetaHedgedResidualMeanReversionPair
Outcome Summary
SolEthBetaHedgedResidualMeanReversionPair abandoned the dead funding-carry family for a different mechanism — the beta-hedged residual spread between two correlated L1 perps, traded only on confirmed ≥2σ dislocations above an explicit fee-floor gate, beta-neutral by construction. The mechanism was implemented cleanly (realized beta 0.009, 262 gated ~3-day pair trades, no liquidation), so the verdict was genuine — and it was decisively negative: profit factor 0.79 (losing gross before fees), avg trade -0.827%, total return -50.97%, Sharpe -0.49, 53.4% drawdown, and losses in every one of six years. Worse, this was already a second attempt whose reversion-confirmation and fee-floor fixes had pushed the prior build's thin +0.084% capture negative rather than positive. The analyst abandoned it at backtest review as a no-edge (not decayed) losing pairs reversion that no further tuning could save; it never reached optimization, analysis, or risk review.
Hypothesis
Implementation
Market-neutral SOL/ETH statistical pair on BINANCE USD-M 4H bars. Every aligned bar it estimates the hedge ratio beta from a rolling regression of SOL log-returns on ETH log-returns, forms the residual log(SOL) - beta*log(ETH), and standardizes it to a z-score returned continuously as the signal. It shorts the rich leg / longs the cheap leg when the residual is stretched beyond entry_z AND has already started rolling back toward zero, sizing the two legs to equal-and-opposite beta-weighted USD notional (net delta ~0, gross pinned at equity*gross_exposure regardless of beta). Exits on full reversion (|z| <= exit_z), residual blow-out (|z| >= 4), residual sign flip, or a 20-bar (~3.3 day) hold cap. Both legs are always submitted and closed in the same event, with a per-bar reconciliation net that flattens orphan hedges and re-hedges a naked primary leg.
Verification Results
Verification failed (Layer 4 — QA review): - No-edge / fee-viability failure, already decisively established by the developer's own full-history test (checklist #7, L6/L7). Both iterations disclose that on the full SOL/ETH 4H history (2020-09 to 2026-08, 12,911 aligned bars) the beta-hedged residual does NOT revert at this horizon and EVERY configuration inside the declared bounds is negative PRE-fee — the developer explicitly frames the run as 'a clean falsification test of the hypothesis's mechanism rather than a tuning candidate.' The 362-day sandbox corroborates a dead signal: Sharpe -0.078 (sharpe_ci [-1.67, 1.57], straddling zero), total_return +0.195% (flat over a year), profit_factor 1.005, win_rate 0.456, and avg_trade_return_pct +0.084% — below the 0.15% viability floor and, on a 4-taker-fill (~0.20% round-trip) two-leg BINANCE USD-M pair, net expectancy indistinguishable from zero. Because the mechanism is negative pre-fee across the entire parameter box, there is no configuration for the optimizer to find.
At BACKTEST_REVIEW, evaluate on the FULL history before committing optimization budget, and check the pre-fee expectancy of the confirmation-filtered entries specifically.
Edge is marginal and not yet statistically distinguishable from zero — a BACKTEST_REVIEW / significance concern for the analyst, not a QA block. Sandbox Sharpe is only 0.136 with sharpe_ci [-1.60, 1.65] straddling zero, total_return +1.63% over 362 days, PF 1.06, on 44 trades. After the optimizer's best-of-N deflation this base is very unlikely to clear the DSR 0.95 gate; the analyst should treat it as a fragile candidate.
The analyst should explicitly reproduce the full-history pre-fee expectancy under the new confirmation+fee-gate logic. If it is not clearly positive pre-fee, abandon the family (do not iterate again); if it is, proceed to walk-forward where OOS/holdout/PBO test the overfitting directly.
Sandbox-window overfitting risk. This is the 3rd iteration of the same SOL/ETH mechanism, each evaluated against the same ~1-year sandbox. Iteration 2's own full-history dry run (2020-2026) was reported NEGATIVE pre-fee across the entire parameter box. The confirmation filter + exit_z=0.25 + fee-gate combination is the developer's 'load-bearing bet' and plausibly a genuinely different conditional sample — but a marginal +1.63% on the single window iterated against could also be curve-fit to that window.
Backtest Review
- Sharpe
- -0.49
- Total return
- -50.97%
- Max drawdown
- 53.37%
- Trades
- 262
- Win rate
- 47.3%
- Profit factor
- 0.79
Genuinely market-neutral by construction (realized beta 0.009), no liquidation, both legs on the same bar
Trades match the hypothesis: 262 dislocation-gated pair trades, ~3-day holds, clean beta-hedged sizing — this is a real mechanism verdict, not an implementation artifact
Negative in EVERY year of a 6-year sample (2021 -7.7%, 2022 -9.1%, 2023 -8.8%, 2024 -12.1%, 2025 -10.2%) — there was never an edge, not decay
profit_factor 0.79 (<1.0) means it loses GROSS, before fees; avg_trade_return_pct -0.827% is negative, the opposite of the >0.15% floor the iteration targeted
Sharpe -0.49 with CI [-1.16, 0.16], max_drawdown 53.4%, information_ratio -0.82, expectancy -$155/trade
This is already the second attempt: the reversion-confirmation, full-reversion-target and fee-floor-gate fixes designed to lift the prior +0.084% capture instead drove per-trade return negative — iteration has moved it the wrong way
Iteration History
Verification failed (Layer 2 — synthetic scenarios): Parameters used: ['exit_z', 'stop_z', 'entry_z', 'beta_max', 'beta_min', 'lookback', 'min_notional', '_param_bounds', 'max_hold_bars', 'gross_exposure', 'min_notional_hedge'] Check that __init__ sets all attributes from self.parameters.get(). - steady_uptrend: TypeError: FactoryStrategy._bar_ts() takes 1 positional argument but 2 were given (bar timestamp: 1735689600000) - steady_downtrend: TypeError: FactoryStrategy._bar_ts() takes 1 positional argument but 2 were given (bar timestamp: 1735689600000) - flat_ranging: TypeError: FactoryStrategy._bar_ts() takes 1 positional argument but 2 were given (bar timestamp: 1735689600000) - volatility_spike: TypeError: FactoryStrategy._bar_ts() takes 1 positional argument but 2 were given (bar timestamp: 1735689600000) - zero_volume: TypeError: FactoryStrategy._bar_ts() takes 1 positional argument but 2 were given (bar timestamp: 1735689600000) - price_gap: TypeError: FactoryStrategy._bar_ts() takes 1 positional argument but 2 were given (bar timestamp: 1735689600000)
Outcome Summary
Faithful market-neutral construction and disciplined dislocation/fee gating cannot manufacture an edge that isn't there — the SOL-ETH beta-hedged residual has no mean-reversion premium (loses gross every year for six years), and when targeted fixes aimed at a thin sub-floor capture instead flip per-trade expectancy negative, that is proof the mechanism is absent, not mistuned, and iteration should stop.
The analyst abandoned it at backtest review as a decisive no-edge (not decayed) losing pairs mean-reversion — negative every year with a profit factor below 1.0 meaning it loses gross before the round-trip fee — and critically it was already a second attempt: the reversion-confirmation, full-reversion-target, and explicit fee-floor-gate fixes designed to lift the prior build's sub-floor +0.084% capture instead drove per-trade expectancy negative, so iteration moved it the wrong way and no further tuning of 3 params could rescue a book that loses gross every year (L55, pairs_residual_reversion_no_edge, PF<1.15).
A market-neutral, long-short statistical-arbitrage pair on two structurally-linked large-cap L1 perps (SOLUSDT and ETHUSDT, both BINANCE USD-M, 4H bars) that traded the beta-hedged residual mean-reversion: each bar estimating the hedge ratio β from a rolling regression of SOL on ETH log-returns, forming the standardized residual spread, and — only on ≥2σ dislocations already turning back, above a 0.30%-of-gross fee-floor gate — shorting the rich leg and buying the cheap leg beta-neutral, exiting on full reversion, a stop, or a max hold, with 3 tunable parameters.
The backtest (12917 4H bars, 2020-2026) was decisively losing: total_return -50.97% over 262 trades, profit factor 0.79 (loses gross before fees), avg_trade_return_pct -0.827% (opposite sign to the 0.15% floor), Sharpe -0.49 (CI [-1.16, 0.16]), max drawdown 53.4%, information ratio -0.82, expectancy -$155/trade, and negative in every one of six years (2021 -7.7% through 2025 -10.2%). It was, however, genuinely market-neutral by construction (realized beta 0.009) with no liquidation and faithful, dislocation-gated ~3-day pair trades.
Backtest and paper results are hypothetical. Trading involves risk of loss.