Skip to content
All strategies

Strategies

Tadi et al. Dynamic Cointegration Basket Spread (arXiv 2109.10662), restated for Binance USD-M 4H: each of 8 alt perps vs a Engle-Granger basket of the other 7, OU-half-life-gated entry at |z|>2, exit at the mean or at 3x half-life (long-short, market-neutral). PRE-STUDY FAILED: shown for falsification only

Outcome: Abandoned

TadiCointegrationBasketSpread4H

Outcome Summary

The hypothesis restated a dynamic cointegration basket-spread paper for 8 Binance alt perps on 4H bars, and it came with a failed pre-study: measured gross capture was below trading costs in every framing tried. The Research Lead recorded it for falsification only and advised against a backtest. The strategy was coded anyway (TadiCointegrationBasketSpread4H) and went through 2 iterations, but the sandbox backtest failed three times because 1,752 SOLUSDT 4H bars were missing. It was abandoned for a data-layer reason, with no backtest, optimization or analyst verdict ever produced.

Hypothesis

Classification: (a). The abstract gives a concrete mechanism: a cointegration spread, OU mean-reversion speed, half-life-based selection and look-back, and a spread built from many coins. It does not give entry or exit thresholds, so the z-entry of 2.0, the mean-cross exit and the 3x half-life time stop are standard choices, not the paper's. The full paper would need to confirm its z thresholds, its formation and trading window lengths, which coin class it found best, and whether its edge survives taker fees. It……Show moreShow less

Classification: (a). The abstract gives a concrete mechanism: a cointegration spread, OU mean-reversion speed, half-life-based selection and look-back, and a spread built from many coins. It does not give entry or exit thresholds, so the z-entry of 2.0, the mean-cross exit and the 3x half-life time stop are standard choices, not the paper's. The full paper would need to confirm its z thresholds, its formation and trading window lengths, which coin class it found best, and whether its edge survives taker fees. It executed at quoted best bid/ask on BitMEX minute data, possibly as maker. Restated for our data: universe of 8 fixed Binance USD-M perps (ETH, SOL, ADA, DOT, LINK, AVAX, LTC, XRP), 4-HOUR bars from 2020-09. Every 6 bars, for each coin i, OLS of log(price_i) on a constant plus the log prices of the other 7 over a 180-bar (30-day) window. The residual must pass a Dickey-Fuller t < -3.9 (Engle-Granger, multi-regressor critical region), and the OU half-life must be 2-30 bars. The 7-coin basket is the paper's 'numerous coins' spread, capped at 8 names per lesson L173. PRE-STUDY (point-in-time, gross of fees, run 2026-10-01 on catalog bars): (1) basket variant, 4H, W=180, DF<-3.9: 3,244 trades, mean gross +0.014% per unit gross notional, win rate 50%; DF<-4.5: 2,121 trades, +0.025%; W=360: -0.101%. (2) The same basket on 1D bars, W=60/90/120: -0.045%, +0.008% and -0.208%. (3) Nine single pairs, 4H, with the same DF and half-life gate: pooled mean about -0.19% per trade. Only LINK/DOT was positive (+0.39% to +0.88%), which is selection out of 18 configurations and not a basis for a proposal. The round-trip cost on 2 to 8 legs is at least 0.10% of gross notional, so measured gross capture is below cost in every framing. RESEARCH LEAD RECOMMENDATION: do not spend a backtest slot on this. It is recorded so that the source idea has a documented falsification. The likely reason for the paper's reported profit is minute-level, quote-aware execution on BitMEX. That puts it in the sub-fee microstructure class this factory has already shown is dead (fee graveyard; lessons L113 and L111).

This answers a user-submitted paper abstract. The idea was classified as a concrete mechanism and tested point-in-time before proposing, as required by lessons L166 and L111. Every framing tried came out at or below zero gross: single pairs, the multi-coin basket the paper favours, 4H and 1D, with and without the DF/half-life gate. Under the self-check (edge must exceed 2x round-trip cost) the hypothesis should be rejected. It is emitted at priority 1, with success criteria the pre-study says it will miss, so the user sees an honest, recorded falsification rather than an inflated one. The basket is capped at 8 names (L173), and the venue is USD-M because the trade needs shorts. BINANCE is over quota, but the mechanism needs simultaneous multi-year liquid shorts on 8 alts, which only Binance USD-M has clean in the catalog. Recent OKX and BNB 1H runs died on data gaps.

verification_loop: sandbox_timeout: Verification failed (Layer 3 — sandbox backtest): smoke test exceeded the 300s wall-clock limit on a ~20000-bar window (2400 days of ETHUSDT.BINANCE-4-HOUR-LAST-EXTERNAL). This almost always means per-bar work that scales with history — e.g. rescanning the full funding/supplementary series, or rebuilding a list and calling min()/sorted() inside calculate_signal()/on_bar() on every bar. Precompute sorted timestamp arrays ONCE in __init__ and use bisect, or cache lookups keyed by timestamp, so per-bar cost is O(log n) not O(n).

Implementation

Tadi et al. dynamic cointegration basket spread on 8 Binance USD-M perps (4H). Every 6 bars (calendar grid), each coin is regressed on the other 7 over a 180-bar formation window (Engle-Granger). Spreads with DF t < df_crit and an OU half-life of 2-30 bars are eligible. Flat state enters the eligible spread with the largest |z| in [2.0, 3.5]: the coin plus 7 hedge legs, dollar-weighted by the frozen coefficients, at gross notional of equity*0.5. Exits at the mean cross, at |z| >= 4.5, or after 3x the half-life. One spread is held at a time.

Iteration 3 fixes the Layer-3 sandbox_timeout with a performance-only change (L155(c)); trading rules and parameters are unchanged. The 8 per-coin np.linalg.lstsq calls at each refit are replaced by one inverse of the 8x8 centred covariance of the formation window. Coin i's OLS slopes are -P[j,i]/P[i,i], its constant is coef.xbar, and its residual is Xc@P[:,i]/P[i,i]. This matches the old lstsq to 1e-14. DF t-stats and half-lives are vectorised across all 8 coins, and per-bar z-scores are a single mat-vec. The flat-state stray-leg sweep (8 positions_open calls) now runs only after an exit, not every bar. Standalone timing of the strategy math over 14.4k bars dropped from 6.5s to 1.4s on this host (load avg 18-37). Any remaining wall-clock is catalog loading of the 8 legs under host load, which earlier sandbox_timeout runs measured as the dominant cost. Per-bar cost is O(n^2) and refit cost O(W*n^2), both independent of span. Note: the hypothesis's own pre-study shows gross capture below round-trip cost, so a working backtest is expected to confirm the falsification.

Verification Results

sandbox_timeout: Verification failed (Layer 3 — sandbox backtest): smoke test exceeded the 300s wall-clock limit on a ~20000-bar window (2400 days of ETHUSDT.BINANCE-4-HOUR-LAST-EXTERNAL). This almost always means per-bar work that scales with history — e.g. rescanning the full funding/supplementary series, or rebuilding a list and calling min()/sorted() inside calculate_signal()/on_bar() on every bar. Precompute sorted timestamp arrays ONCE in __init__ and use bisect, or cache lookups keyed by timestamp, so per-bar cost is O(log n) not O(n).

Iteration History

Verification failed (Layer 1.5 — hypothesis/config consistency) [class=hypothesis_mismatch]: - optimization_plan fixes leverage at 1.0

Outcome Summary

Check that every leg of a multi-instrument strategy has complete bar coverage before coding, and treat a gross pre-study edge below round-trip cost as reason enough not to spend a pipeline slot, as the Research Lead had already recommended.

The run was abandoned after 2 iterations because the Layer 3 sandbox backtest could not run 3 times: SOLUSDT.BINANCE-4-HOUR-LAST-EXTERNAL was missing 1,752 expected bars, including the requested boundaries. The pipeline flagged this as a data-layer failure, not a verdict on the strategy, so the backtest-review, analyst and risk stages were never reached.

A market-neutral restatement of Tadi et al. (arXiv 2109.10662) on Binance USD-M 4H bars: each of 8 alt perps is traded against an Engle-Granger basket of the other 7, entering at |z|>2 when the residual passes DF t<-3.9 with an OU half-life of 2-30 bars, and exiting at the mean or after 3x the half-life.

No backtest or optimization metrics exist. The gross-of-fees pre-study found the 4H basket (W=180, DF<-3.9) made +0.014% per unit gross notional over 3,244 trades with a 50% win rate (+0.025% at DF<-4.5, -0.101% at W=360). On 1D the results ranged from -0.208% to +0.008%, and single pairs pooled about -0.19%, all below the 0.10% or higher round-trip cost.

Analysis

Evaluation of Dynamic Cointegration-Based Pairs Trading Strategy in the Cryptocurrency Market

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