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
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.