agentic-trading · desk research note · 25 aug 2026

Pairs trading, run on our own book.

We ran the standard cointegration pairs trade — the one every tutorial teaches — across 81 pairs of crypto majors and country ETFs, on the daily bars already sitting in this repo. Every parameter is fit out-of-sample. It loses money before fees are charged, in both universes, over fifteen years of ETF history and six of crypto.

D-P1 Crypto pairs · dead D-P2 ETF pairs · flat D-B1b Funding carry · still the one that pays
00

First, the tape disagrees with the brief

The reason for running this now was an expected crypto bull market. The data on this box does not show one.

Our newest Binance bar is 2026-08-11. On that bar Bitcoin closes at $63,55949% below its 2025-10-06 peak of $124,659, and down 46% over twelve months. That does not make a bull market impossible; it means nothing in this report can be read as evidence of one, and any strategy justified by "the bull market is coming" is being justified by a forecast rather than by data.

Bitcoin, weekly close — the sample this report is fit on
Binance BTCUSDT daily bars, resampled weekly, 2023-01 to 2026-08-11. The peak marker sits on the highest weekly close in the file.
01

What was actually run

The design is the textbook one, taken from the method in KidQuant's Pairs Trading With Python: screen every pair for cointegration, regress one leg on the other, trade the residual when it stretches.

Four rules matter more than the rest, because they are where this kind of backtest usually invents its profits:

  • The hedge ratio is refit every bar on the trailing 250 bars only. Nothing at time t touches a price from t or later.
  • A pair may only open a position while its trailing window passes Engle-Granger at p < 0.05, re-tested monthly. Pairs that stop cointegrating stop trading.
  • The ratio is frozen at entry and the trade is priced from the two legs' real returns — long one unit of A against β units of B. This is the correction that matters most: pricing a trade off a spread whose β drifts while you hold it books the model's own revisions as profit, and it flatters results by hundreds of basis points per trade.
  • Costs are charged once per round trip on both legs together — 20 bps on crypto, 6 bps on ETFs. Both are generous to the strategy.

Entry at |z| ≥ 2, exit at z = 0, stop at |z| ≥ 4, maximum hold 60 bars. Positions are open only 7.7% of bars in crypto and 7.4% in ETFs — the cointegration gate is doing real filtering, not waving everything through.

This is not a repeat of the desk's earlier cointegration test. That one (D-B2) used hourly bars over 2022–2024 with a static hedge ratio and died at the stationarity gate before any backtest ran. Its own write-up listed "daily rather than hourly bars" and "a rolling hedge ratio" among the unresolved explanations for why published work disagrees. This run uses exactly those two things, and gets the same answer.

02

Crypto majors: dead, and not because of fees

Nine liquid Binance pairs, 36 combinations, 2020-08-18 → 2026-08-11.

D-P1 · crypto pairs 36 pairs · 2,185 daily bars · cost 20 bps round trip Dead

The number that closes the question is gross, not net. Before a single basis point of cost, the average trade earns −91 bps. There is no fee schedule, no venue, no rebate that rescues a trade whose raw price move is against it. The cost model is not the binding constraint — the strategy simply does not have an edge to charge fees against.

The distribution is worse than the mean suggests: the median trade loses 129 bps, so this is not one blow-up dragging a healthy book down. Only 41% of trades close positive, and across the eight pairs that traded at least five times, zero are net-positive. Averaging one number per pair, so that a busy pair cannot outvote a quiet one, the mean is negative at t = −3.61.

Every crypto pair that traded, net basis points per trade
Pairs with at least five closed trades. Bars run left from zero because every one of them is negative. Hover for trade count and win rate.
It also loses to its own null. We re-ran each pair with the entry dates drawn at random from the same bars where the cointegration gate was open, the same holding periods, and the side flipped on a coin — 500 bootstrap replications. Random entries lose 24 bps a trade. The z-score rule loses 111. Timing entries on the spread is worse than not timing them at all, which is what a mean-reversion signal looks like when the thing it is betting on reverting is actually trending.
03

Country ETFs: the honest version of "no edge"

Ten index and country ETFs with fifteen years of history, 45 combinations, 2011-08-11 → 2026-08-11 — the longest clean sample in the repo.

D-P2 · ETF pairs 45 pairs · 3,771 daily bars · cost 6 bps round trip Flat

This one is not a rout, and it is worth being precise about the difference. At −29 bps a trade over 341 trades, with 12 of 33 pairs net-positive and a pooled t = −1.38, the honest reading is indistinguishable from zero and pointed the wrong way. It is a flat result, not a dead one.

But gross is −23 bps here too. The 6 bps cost assumption is doing almost nothing; halve it, and the trade still loses. Fifteen years and 341 trades is a large enough sample that "we were unlucky" stops being available as an explanation.

The one pair that behaves — and why it does not rescue the family

EFA / VGK is the single best-behaved pair in either universe, and it is worth looking at because it proves the mechanism rather than the strategy. Its cointegration p-value is 0.004, its gate stays open 28% of bars — four times the average — and it earns +33 bps a trade net over 17 trades at t = 2.02, beating its own random-entry null.

The reason is not a market inefficiency. EFA is MSCI EAFE and VGK is FTSE Developed Europe: the two funds hold many of the same companies. There is a real tether, because it is the same assets priced twice. That is what genuine cointegration looks like, and it is also why it does not generalise — you cannot go looking for it in pairs that do not share holdings.

And it is still not a business. One pair clearing t = 2 out of 81 tested is roughly what pure chance delivers at a 5% threshold — we should expect about four. Seventeen trades across fifteen years at 33 bps is 5.7% total, on a spread that is only open a quarter of the time. It is a real effect that is too small and too rare to fund.

Cumulative net profit, both universes Crypto majors Country & index ETFs
Every closed trade in the universe, one unit of notional each, stamped at its exit date and cumulated. Left panel starts mid-2021, after the first 250-bar formation window closes. Note the two panels use different vertical scales — the crypto book is roughly fifty percentage points deeper in the hole on half the elapsed time.
04

Why it fails: these assets are correlated, not tethered

A pairs trade does not need two assets to move together. It needs a force that pulls them back when they drift apart. Correlation is the first thing; cointegration is the second; only the second one pays.

BTC and ETH make the point cleanly. Their daily log returns correlate at 0.83 — as tightly coupled as any two large assets you will find. Their Engle-Granger cointegration p-value over the full daily sample is 0.84: no evidence of a stable relationship whatsoever. High correlation, zero tether.

Correlation buys you nothing — 81 pairs Crypto majors Country & index ETFs
Horizontal: correlation of daily log returns. Vertical: Engle-Granger cointegration p-value on full-sample log prices; below the dashed line at 0.05 is the conventional pass. The cloud is flat — knowing how tightly two assets move together tells you nothing about whether their spread comes back. Only 7 of 81 pairs pass, about what 81 tests at a 5% threshold produce by chance.
The BTC/ETH spread, in the units the strategy trades
Rolling 250-day z-score of log BTC against log ETH. A tradeable spread oscillates through zero and rarely leaves the shaded band. This one spends months at a time outside ±2 and drifts to ±4 without turning — every one of those excursions is an entry that gets stopped out, and then re-entered against the same trend.
05

The last twelve months look good. They are not evidence.

One subsample does break positive, and it is the one closest to the bull-market thesis — so it deserves to be taken seriously and then measured properly.

Crypto trades closing after 2025-08-11 average +369 bps across 28 trades, at a 64% win rate, against −238 bps for the 106 trades before them. Read on its own that looks like a regime change.

So we swept every rolling twelve-month window in the sample instead of only the last one. There are 46 of them. 24% are positive, the median is −99 bps, and 17% of windows match or beat the recent one. A window this good shows up roughly one year in six in a strategy whose full-sample result is solidly negative. That is exactly what a fat-tailed loser looks like when you slice it — not a regime.

The ETF sweep is a useful control in the other direction: its most recent twelve months are below its own median, beaten by 79% of windows. Same strategy, same period, opposite sign. Neither number is telling you about the market.

Crypto pairs, rolling 12-month mean profit per trade
Each bar is one trailing-year window containing at least ten trades. The dashed line is the median window. The final bar is the window that motivated the bull-market question; seven others in the sample are as good or better.
The rule this desk already runs by. A subsample chosen after seeing the results is a hypothesis, not a finding. If the belief is that pairs behave differently in a crypto bull, the way to test it is to write the regime definition down first — funding rate, drawdown from peak, realized vol, whatever it is — fix the kill number, and run it forward. Not to keep the window that happened to be green.
06

What actually pays on this desk

The desk has one positive result, and this report does not change it. It is worth restating here because it is the answer to "we have nothing to show."

Funding carry (D-B1b). Hold spot, short the perpetual in equal size. The position is flat in price by construction, so the return is the funding stream minus one round trip of cost. Twelve of fourteen symbols pay. The reason it survives while everything else on this desk died is structural: every other design pays its fee on every trade, and this one pays it twice in a lifetime.

SymbolGross income / yrBreak-even holdHours funding positiveVerdict
UNI10.0%7.3 d89%Pays
LINK9.8%7.4 d89%Pays
DOGE9.1%8.0 d85%Pays
BTC8.0%9.1 d86%Pays
ETH7.3%9.9 d84%Pays
SOL−7.7%never73%No
BNB−8.1%never17%No
And what that number is not. It is an income measurement. It excludes the way the trade actually loses money: the short perpetual leg needs margin, so a sharp rally pulls collateral into the losing leg while the offsetting gain sits idle in spot. Published work also finds that high carry predicts crashes — the payment is compensation for tail risk. A positive result here licenses a properly sized paper trade with real margin mechanics. It does not license capital.
07

The full pair ledger

Every pair that opened at least one position, both universes, heaviest-traded first. Nothing is hidden, nothing is dropped, and nothing was re-tuned after the fact.

PairUniverse Gate openCoint. pRet corr TradesAvg hold Gross bpsNet bpsWin

Ordered by trade count, so the pairs carrying the most evidence sit at the top. Dimmed rows opened fewer than five positions — their per-trade figures are single draws from a fat-tailed distribution and should be read as noise, in either direction. Gate open = share of bars the trailing window passed Engle-Granger at p < 0.05, the only bars on which a position could be opened. Coint. p is the full-sample value, shown for reference only — it was never used to select a pair.

08

A gap worth fixing before the next design

Pairs trading's best-documented successes are in single-name equities — same sector, same supply chain, same shock. We could not test that here.

The equity inventory on this box is four months deep: NVDA, AMD, MU, INTC, META, MSFT, TSLA, PLTR, MSTR, CRCL, SNDK, LITE and QQQ all start on 2026-04-13 with 86 rows. A cointegration screen needs a formation window longer than the whole file. The ETF panel is the exception — ten symbols with 3,772 rows back to 2011 — which is why it, and not the semis, carries the equity side of this report.

If single-name pairs are worth a real test, the blocking item is not the method. It is ten years of daily bars for twenty or so names, which is a free download away and takes an afternoon.

GroupSymbolsRows eachCoverageUsable for pairs
Country & index ETFs103,7722011-08-11 → 2026-08-11Yes
Crypto majors (Binance)92,186–2,4162020-01-01 → 2026-08-11Yes
AAPL15022024-08-12 → 2026-08-11Marginal
Semis, mega-cap, BTC proxies, QQQ13862026-04-13 → 2026-08-12No
09

Which desk to use

There are five surfaces in this repo that all look like "the desk". They are not competing — they do different jobs, and two of them are stale rather than wrong.

SurfaceWhat it isStateUse it for
tradedesk
:8600
Idea intake. Type or speak an idea; the desk prices it against the frozen cost model and writes a kill number before anything runs. SQLite, stdlib only. Running The front door. Every new idea starts here.
desk-site/ The research record — 29 designs, verdict, the number that decided it, and a link to the full result doc. Plus provenance, pre-registrations, test status. Current The source of truth. What you show anyone asking what the desk has done.
kronos_pipeline/site/ Long-form narrative of the Kronos programme, written as a lab notebook — scope, method, every kill. Current The read-through version of the same record.
index.html
ALPHA/DESK
Idea board, knowledge graph, live TA tape. 547 KB single static file, no server behind it. Snapshot · 15 d stale Nothing, until it regenerates. Its "live" tape is a frozen quote from 2026-08-10.
jesse-desk
:9000
Jesse backtest/live framework. Running, sitting at a password prompt. Locked Execution and backtest plumbing — not a research surface.
Recommendation: keep two. tradedesk as the only place ideas enter, desk-site as the only place results live. Retire index.html or wire it to regenerate from the same ledger — a dashboard whose top panel is a two-week-old quote labelled "live" is worse than no dashboard, because it is the one thing on the page a visitor will trust immediately.
10

What follows from this

  • Close the pairs family. Three independent runs now — hourly static, daily rolling, and the pinned-pair variant D-M — all reach the same place. Cointegration pairs on liquid crypto is a settled negative on this desk. Stop paying for it.
  • Buy the equity history. Ten years of daily bars for twenty single names is the cheapest open question in the repo: it is the one universe where pairs trading has a real published track record and the one we cannot currently test.
  • Pre-register the regime claim, or drop it. If crypto pairs are supposed to work in a bull market, define the regime with a number, fix the kill threshold, and run it forward — the sweep in section 05 shows that picking the window afterwards proves nothing.
  • Take the carry to paper. D-B1b is the desk's only positive result and it has never been run with real margin mechanics. That is the highest-value next experiment, and it is not a backtest.