Skip to content

View original

BtcEthBetaHedgedSpreadReversionPair

Hypotheses

BTC–ETH Beta-Hedged Spread Mean-Reversion — Market-Neutral Intraday Stat-Arb: When the Rolling Beta-Adjusted BTC/ETH Spread Deviates ≥ 2σ, LONG the Laggard / SHORT the Leader and Hold for Convergence Back to the Mean (BTCUSDT + ETHUSDT.BINANCE USD-M, 1H Bars, Market-Neutral, 3-Parameter)

Hypotheses

A MARKET-NEUTRAL, two-instrument STATISTICAL-ARBITRAGE spread reversion on the two most tightly co-integrated crypto majors — BTC and ETH perps — traded at the 1-HOUR horizon where their beta-adjusted price spread MEAN-REVERTS (idiosyncratic order-flow shocks in one leg temporarily decouple the pair before cross-market arbitrageurs realign it). Construct the spread = log(ETH) − β·log(BTC), with β from a rolling regression over the trailing window; z-score the spread against its rolling mean/std. When |z| ≥ entry_z, take a DELTA-BALANCED, beta-neutral pair: if z is high (ETH rich vs BTC), SHORT ETH / LONG β-scaled BTC; if z is low, reverse. Close as the spread reverts toward the mean. This is deliberately a DIFFERENT family and OPPOSITE SIGN from the dead relative-strength / cross-sectional MOMENTUM basket (which TRENDS the alt/BTC ratio over 1D–weekly horizons and died repeatedly in the 0/84-survival beta-neutral-momentum class): momentum bets the spread PERSISTS over weeks; this bets the spread REVERTS over hours, exploiting the fact that at intraday horizons the BTC/ETH spread is dominated by mean-reversion, not drift. It is also unrelated to the funding-carry, OI-trend, and options families I have already covered. Both legs have multi-year 1H history on Binance, so walk-forward windows and the 15-day holdout populate. 3 parameters: rolling window length, entry z, exit z.

Hypotheses

ITERATION 3 fixes all three QA findings, and in doing so uncovered a signal defect that falsifies the hypothesis -- I am reporting that plainly rather than shipping a number I no longer believe. (1) HORIZON RESTORED TO INTRADAY: window 720->72 bars (3 days), max_hold 336h->36h; measured average hold is ~25h and trade count is 527 over 2020-2026 (~80/yr, 78 in the trailing 365d sandbox window), so the >=100-trade measurability bar, the 3 walk-forward windows and the holdout all populate. (2) NO SILENT SWALLOWING: the bare 'except Exception: pass' around _manage(bar) is now 'except Exception as exc: self.log.error(...)', and the exit-submission handler in _flatten logs too. (3) SIGNAL DEFECT FOUND AND FIXED: iterations 1-2 z-scored a stored spread series whose elements each carried a DIFFERENT historical beta (s_i = le_i - beta_i*lb_i). Since log(BTC) ~= 11, a 0.01 hedge-ratio wobble moves that series by ~0.11 -- far more than any real dislocation. Measured on the real 57,864-bar 1H series, that construction reports a 3-day spread sigma of 0.71 (71%) versus 0.0092 (0.9%) when the spread's mean/variance are computed with a single consistent beta (mu = mean(le) - b*mean(lb); var = var(le) - 2b*cov + b^2*var(lb) -- all O(1) from rolling sums, so the performance contract is unchanged). The z-score iterations 1-2 traded was a hedge-ratio-drift indicator, not the beta-adjusted spread. WHAT THE CORRECTED SIGNAL SHOWS (engine-free, real ETHUSDT/BTCUSDT 1H, 0.05% taker x 2 sides x both legs): the hours-horizon reversion the hypothesis asserts does not exist. Across 591 intraday cells (window 24-168, entry_z 2.0-3.5, exit_z 0-1, max_hold 12-48h, with and without a turn-confirmation entry) ZERO are net positive, and average GROSS capture before any fee is -0.18% to +0.03% -- i.e. after a >=2-sigma beta-hedged dislocation the spread continues, it does not revert. The shipped config measures n=527, gross -0.18%/trade, net -0.19% per position, t=-3.3, 1 of 7 years positive; the 365d sandbox is n=78, gross +0.02%, net -0.09% per position. For completeness I re-tested the longer horizons too: 6 of 216 long-horizon cells are positive and the best has t=0.03, so iteration 2's apparent +2.53%/trade was entirely the beta-drift artifact, not an edge. MY RECOMMENDATION: abandon this hypothesis. The code shipped here is the faithful, correct implementation the hypothesis specifies (intraday, 1H, beta-neutral, converge-to-exit, 3 parameters, >=100 trades) and it will backtest negative; no parameter inside the declared bounds changes that, because the gross capture is negative before fees. If the desk wants to pursue the residual signal that IS present in this pair, it has the opposite sign (continuation after a beta-hedged dislocation) and belongs to the Research Lead as a new hypothesis, not to this one.

Hypotheses

Negative-expectancy market-neutral pair reversion — not worth 2 hours of optimization. Over 1,064 trades the beta-hedged BTC/ETH intraday spread reversion has no edge net of costs: avg_trade_return_pct -0.080% (negative), profit_factor 0.85, expectancy -$49/trade, total_return -53.6% (CAGR -10.6%), losing in 2020 (-15%), 2021 (-16.6%), 2022 (-12.9%), 2023 (-6.8%) and 2025 (-19.5%) with only 2024 (+1.3%) and partial 2026 (+0.8%) barely positive. It is decisively insignificant (Sharpe -0.35, CI [-1.17, 0.35], PSR 0.274) with a 56% drawdown (CI to 86%) on a supposedly market-neutral book, and negative Sharpe in both the normal and stressed vol terciles; commission is 7.41% of gross. The book is cleanly built and genuinely beta-neutral (not a code defect), but the mechanism — intraday BTC/ETH spread mean-reversion — simply loses net of the two-leg round trip in every regime, so no tuning of window/entry_z/exit_z converts it to an edge. This is the L57/L44/L55 pair/spread reversion family; benchmark_meaningful is correctly false. Failure pattern: no_edge/fee_edge market-neutral pairs reversion, negative per-trade and negative every year.

Implementation

Market-neutral BTC/ETH intraday stat-arb on 1-HOUR Binance USD-M perps. A rolling returns-regression beta (clamped 0.5-1.5) over a 72-bar (3-day) window defines the spread log(ETH) - beta*log(BTC); the spread's mean and variance are computed with that SAME beta applied across the window, so z measures the price dislocation rather than hedge-ratio drift. |z| >= entry_z opens a beta-neutral pair (z high = ETH rich -> SHORT ETH / LONG beta-scaled BTC; z low = reverse); it closes on convergence (|z| <= exit_z), on divergence to 2x entry_z, or after 36 hours (realised average hold ~25h). Both legs come from one gross budget (eth_notional = equity*gross_frac/(1+beta), btc_notional = beta*eth_notional) so gross is invariant to beta and net delta is ~0; legs are co-entered/co-exited with an orphan-flatten guard, a 24h re-entry cooldown, and a cost hurdle that refuses entries whose expected convergence is below 3x the two-leg round trip. leverage 1.0, gross capped at 60% of equity. Three tunables: window, entry_z, exit_z.

Verification Results

CLEAN RESTART 2026-09-04 — this run's verdict history and learning records were removed and it was restarted from verification. Its previous abandonment came from the pipeline, not from the market: the Layer-2 harness mis-bound @staticmethod helpers (fixed), QA issued terminal performance verdicts on an unoptimized smoke test (removed — QA now judges correctness only), and sandbox timeouts came from backtest-slot starvation (fixed). The hypothesis and the strategy code are unchanged. Verify the code on its merits; performance is decided later by the full backtest and the optimizer.

Backtest Review

Cleanly built, genuinely delta/beta-neutral two-leg book with correct one-gross-budget sizing and orphan-leg guard; adequate sample (1,064 trades)

Backtest Review

The iteration-3 consistent-beta spread fix is real and the code is faithful to the hypothesis

Backtest Review

Negative expectancy: avg_trade_return_pct -0.080% (net negative), profit_factor 0.85, expectancy -$49/trade

Backtest Review

Loses in every regime and nearly every year: total_return -53.6%, CAGR -10.6%, annual returns negative 2020–2023 and 2025 (only 2024 +1.3% and 2026 +0.8% barely positive)

Backtest Review

Not significant / decisively bad: Sharpe -0.35 (CI [-1.17, 0.35]), PSR 0.274, max_drawdown 56% (CI to 86%), negative Sharpe in normal and stressed vol terciles

Backtest Review

Fee-fragile intraday churn: commission 7.41% of gross; the beta-hedged BTC/ETH spread reversion has no edge net of the two-leg round trip

Backtest Review

L57/L44/L55 family: market-neutral pair/spread mean-reversion, negative net of costs

Iteration History

Verification failed (Layer 4 — QA review): - EDGE BELOW FEES / NET NEGATIVE PER TRADE (checklist #7). Sandbox avg_trade_return_pct = -0.0079% over 152 trades — negative and far below the 0.15% futures floor (total_return -6.93%, Sharpe -1.01, PF 0.85, win_rate 0.47). Corroborated by the developer's own study on 57,864 real 1H bars: the >=2σ trigger is net negative in all 18 configs because gross spread capture at |z|>=2 is only 0.01-0.13% while a two-leg round trip costs ~0.20% of ETH-leg notional. Only 6/64 cells clear costs at all. The gross capture does not exceed the round-trip cost. - REGIME-DECAYED EDGE — OOS/HOLDOUT EXPECTED TO FAIL. Even the best plateau (window 72, entry_z 3.0-3.5) is positive only in 2020-2022 (+0.995/+0.453/+0.752%/yr) then negative 2023-26 (-0.071/-0.363/+0.121/-0.482%), split-half +0.702% vs -0.210%. A full-history backtest will look acceptable while driven entirely by early years, and the 15-day holdout is the segment most likely negative. Advancing to the 3-phase optimizer burns walk-forward/holdout hours on an edge the developer's own data shows is arbitraged out (L6/L16). - CODE-vs-HYPOTHESIS ALIGNMENT IS CORRECT and not a reason for failure: ETH+BTC, 1-HOUR, market-neutral long-short, rolling beta-adjusted spread z-score, converge-to-exit. Sizing is genuinely beta-neutral and gross-invariant (checklist #1): eth_notional=equity*gross_frac*leverage/(1+beta), btc_notional=beta*eth_notional. Legs co-entered/co-exited with orphan-flatten guard, beta clamped [0.5,1.5], returns-regression beta is sound, exactly 3 tunables. entry_z default 3.0 vs hypothesis 2.0 is a within-bounds, cost-justified deviation, not a defect.

Iteration History

Verification failed (Layer 4 — QA review): - The hypothesis is explicitly INTRADAY, hours-horizon spread reversion: title 'Market-Neutral Intraday Stat-Arb', description says the spread 'MEAN-REVERTS over hours' and contrasts itself against a weeks-horizon momentum family ('momentum bets the spread PERSISTS over weeks; this bets the spread REVERTS over hours'). The shipped code trades a different horizon: window=720 bars (30 days), max_hold_hours=336 (14 days), sandbox avg hold 8d 5h. The developer concedes 'this is no longer intraday in holding period.' The specific core edge the hypothesis names (hours-horizon reversion) is not what is implemented — it now reverts over the multi-day/weekly horizon it claimed to be the OPPOSITE of. - Trade count below measurability floor. Sandbox: 12 trades / 362 days. Developer's own full-history count is 41 trades, t-stat 1.55 (insignificant), with 3 trades in 2021 averaging +13% carrying the result and 2025 negative. ~41 trades over 5.8yr is well under the ~100-trade bar to distinguish edge from noise (L16); at ~6 trades/yr the 3-window walk-forward and 15-day holdout cannot populate. Reject at Layer 4 rather than burning optimization iterations. - calculate_signal wraps the entire _manage(bar) book-management call in a bare 'except Exception: pass', silently swallowing any sizing/order/orphan-guard defect with no log.

Iteration History

Verification failed (Layer 4 — QA review): - NO FEE-CLEARING EDGE (checklist #7). The strategy's realized per-trade capture is negative BEFORE fees, so it cannot beat the ~0.10%/round-trip-per-leg cost under any parameter in the declared bounds. Two independent measurements agree: (a) the developer's own engine-free study over the real 57,864-bar 1H series finds ZERO net-positive cells across 591 intraday configurations, average GROSS capture -0.18% to +0.03%, shipped config gross -0.18%/trade, t=-3.3, 1 of 7 years positive; (b) the Layer-3 sandbox confirms it — total_return -5.43%, Sharpe -0.998, PF 0.89, avg_trade_return_pct -0.0065% (negative gross, far under the 0.15% floor) over 156 trades. The hypothesis's core claim — that the beta-hedged BTC/ETH spread MEAN-REVERTS at 1H — is falsified: after a ≥2σ dislocation the spread CONTINUES, it does not converge. The residual signal has the OPPOSITE sign (continuation), a different hypothesis.
Strategy report

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