← Lab
S036

Johansen cointegrated ETF baskets (curve butterfly + credit)

pairs-johansen-basket-v1
failed Stage 1 (Quick-screen) 2026-07-04
Share: Twitter / X LinkedIn

ID: S036 Slug: pairs-johansen-basket-v1 Run date: 2026-07-04 Failed at: Stage 1 (Quick-screen) Outcome: FAILED — both cells FAILED. Headline metric: per-fold cointegration persistence 19% / 48% (gate ≥ 50%); Sharpe −0.37 / −0.32 (gate ≥ 0.8) Fail reason: Both baskets are strongly cointegrated on the full sample (Johansen trace 58.6 / 40.3 vs 29.8 crit) — but under the honest per-fold walk-forward test the cointegration is intermittent (present in only 19% and 48% of folds, both below the 50% admission gate), and even in the folds where it does hold, the reverted spread loses money net of the triple-leg cost stack (negative Sharpe and negative expectancy). Full-sample cointegration is a long-horizon property that does not survive as a tradeable, per-fold signal.

What we tested

Two 3-asset Johansen baskets, each built to isolate one stationary dimension even when the individual legs trend: a [SHY, IEF, TLT] curve curvature butterfly (c01) and a [HYG, LQD, IEF] credit-quality premium net of duration (c02). The admission gate re-estimates the Johansen vector per fold (504-day window, monthly walk-forward, no look-ahead) and requires per-fold cointegration persistence ≥ 50% and Sharpe ≥ 0.8, net of a six-transaction round-trip and borrow. Market-neutral by construction; frozen over 2007–2026.

What we found

Cell Basket Full-sample Johansen Per-fold persistence Sharpe β-SPY Max-drawdown (DD) Exp/trade Verdict
c01 [SHY,IEF,TLT] butterfly 58.6 ✅ 19% −0.37 0.00 8.3% −0.30% FAILED
c02 [HYG,LQD,IEF] credit 40.3 ✅ 48% −0.32 0.03 21.3% −0.48% FAILED

What we learned

The 504-day window under-powers a 3-asset Johansen. A persistence-by-window diagnostic shows the fold-level cointegration rate rises with the estimation window: butterfly 18% → 46%, credit 48% → 56% as the window grows 504 → 1260 days (see chart). So the frozen 504-day choice was on the short side for a three-variable test — a genuine calibration lesson. A longer window (≈ 1000–1260 days) would push the credit basket over the 50% persistence bar.

But persistence was not the binding failure — profitability was. In the folds where the basket is cointegrated, the traded spread still earns a negative Sharpe and negative expectancy. A longer estimation window fixes the admission gate, not the fact that the reverted spread is too thin to pay for six transactions plus borrow. Fixing the window would let more folds trade a losing signal.

What this doesn't tell us yet

A longer estimation window (≈ 1008–1260 days) would push the credit basket over the 50% persistence gate — the frozen 504-day choice was on the short side for a three-variable Johansen. But that only fixes admission, not the binding failure: in the folds where the basket is cointegrated the reverted spread still earns a negative Sharpe and expectancy, so a longer window would let more folds trade a losing signal. What this screen cannot say is whether a fundamentally lower-cost expression (fewer legs, cheaper execution) could turn the thin reversion profitable — only a differently-structured, pre-registered test could.

What happens next

Both cells FAILED — cut at Stage 1. With S034 (7 two-asset pairs, all FAILED) this makes the pairs pillar 9 trials, all FAILED: liquid-ETF relative value, whether as fixed-ratio pairs or per-fold Johansen baskets, does not clear an honest, walk-forward, cost-aware, tail-aware gate over 2007–2026. The recurring lesson: cointegration that is real on the full sample is either not persistent in tradeable windows or not profitable net of the multi-leg cost stack. A longer-window variant (≈ 1008–1260 days) is a possible next S-NNN, but the bar is the negative net edge, not the persistence gate — so the expectation is low, and it must be pre-registered as a new identifier (the 504-day gate here is frozen). The pillar's transparent fail record across the stat-arb design space is the point.

What we tested — the recipe

What we tested — Johansen cointegrated ETF baskets
3-asset dollar-neutral spreads, vector re-estimated per fold, traded on z-score reversion
Baskets — Treasury curve butterfly [SHY,IEF,TLT] + credit [HYG,LQD,IEF]2 basketsVector — Johansen rank-1, estimated per fold (504-day window, no look-ahead)per foldAdmission — cointegrated (Johansen 95%) in ≥ 50% of foldspersistenceSignal — 90-day z of the spread, entry |z|>2, exit |z|<0.5mean-revertFriction — 6 transactions/round-trip (3 legs) + borrowtriple costGate: Sharpe≥0.8 · |beta-SPY|≤0.15 · max-DD≤15% · persistence≥50% · baseline ZERO
Both baskets clear cointegration on the FULL sample (Johansen trace 58.6 / 40.3) — but the gate re-estimates the vector per fold, the honest walk-forward test.

Slice & dice

Growth of $1 — both Johansen baskets (net of triple-leg friction)
even in the cointegrated folds the reverted spread loses money after cost
0.790.850.910.971.042008201020122014201620182020202220242026curve butterflycredit basket
Both drift down: the reversion is too thin to overcome the 6-transaction round-trip cost + borrow.
Cointegration persistence by estimation window — curve butterfly
% of walk-forward folds cointegrated (gate ≥ 50%); frozen window = 504d
504d756d1008d1260dflat = 33
The frozen 504-day window (leftmost) underpowers a 3-asset Johansen; persistence rises with a longer window — but even where it clears 50%, the traded edge is negative net of cost.
Cointegration persistence by estimation window — credit net of duration
% of walk-forward folds cointegrated (gate ≥ 50%); frozen window = 504d
504d756d1008d1260dflat = 49
The frozen 504-day window (leftmost) underpowers a 3-asset Johansen; persistence rises with a longer window — but even where it clears 50%, the traded edge is negative net of cost.
For the specialist — methodology details (click to expand)
  • Cointegration: Johansen vector re-estimated per fold (504-day window, monthly), never full-sample — the walk-forward test with no look-ahead. Full-sample trace 58.6 / 40.3 vs the 29.8 critical value; per-fold persistence 19% / 48%.
  • Baskets: c01 [SHY, IEF, TLT] curve butterfly (curvature); c02 [HYG, LQD, IEF] credit-quality premium net of duration.
  • Friction & baseline: six transactions per round-trip (three legs, in and out) at 5 bps + 0.5%/yr borrow on shorts; baseline zero (market-neutral, β-SPY ≈ 0.00).
  • Gate & data: per-fold persistence ≥ 50% AND Sharpe ≥ 0.8; Tiingo EOD 2007–2026 (bounded by HYG/LQD inception). Predecessor S034 (all failed).

Baseline zero (market-neutral). Friction: 6 transactions/round-trip at 5 bps + 0.5%/yr borrow on shorts. Johansen vector estimated per fold (504-day window, monthly), never full-sample. Data: Tiingo EOD 2007–2026 (panel bounded by HYG/LQD inception). English per repo convention. Ledger: pairs-pillar-ledger.md. Predecessor: S034 (pairs-cointegration-etf-v1, all FAILED).

← OlderMean-reversion on cointegrated ETF baskets Newer →Market-neutral mean-reversion + momentum (70/30)

Mechaniq provides information, not investment advice. We do not execute trades. Past results are no guarantee for future performance. You are solely responsible for your trading decisions.

Lab · Methodology · Greeks Lab · About · FAQ · Glossary · Privacy · Terms · mechaniq.trade © 2026

21 Aug 2026, 09:07