Most signal services would never publish this. We're leading with it. Here's why.
What the scanner actually does
Statistical arbitrage through pairs trading works on a simple premise: find two instruments whose prices move together over time (cointegration), wait for them to diverge, and bet on convergence. The edge is mathematical, not directional. You don't need to predict where the market goes — you need to identify when a spread has stretched beyond its statistical norm.
Our nightly scan runs every combination of 70 instruments — 47 FX pairs, 10 crypto, 5 commodities, 8 indices — through a dual gate:
Gate 1: Johansen Cointegration Test. This isn't correlation. Two assets can be 95% correlated and completely useless for pairs trading. Cointegration means their price spread is stationary — it reverts to a mean. The Johansen trace test gives us a statistic that must exceed a critical value of 15.49 at the 95% confidence level. Below that, no relationship exists that we'd bet money on.
Gate 2: Half-Life Filter (5–60 trading days). Even if a pair is cointegrated, we need the spread to mean-revert within a tradeable window. A half-life under 5 days means the reversion is too fast to capture reliably at daily frequency. Over 60 days means capital is locked up too long relative to the edge. Both get rejected.
A pair must pass both gates on two consecutive nightly scans before the system will generate a signal. No exceptions.
The results
Thirty nights. 2,415 combinations per night. 72,450 total tests.
Accepted pairs: 0.
But here's what makes this interesting — the scanner isn't finding garbage. It's finding almost:
| Pair | Trace Statistic | Critical Value | Half-Life (days) |
|---|---|---|---|
| EURUSD / GBPUSD | 15.20 | 15.49 | 18 |
| AUDUSD / NZDUSD | 15.16 | 15.49 | 22 |
| EURJPY / GBPJPY | 14.87 | 15.49 | 14 |
| XAUUSD / XAGUSD | 13.94 | 15.49 | 41 |
Those first two pairs — classic stat-arb candidates — are knocking on the door. A trace stat of 15.20 against a threshold of 15.49 is a 1.9% miss. Any looser system would have already entered these trades.
We didn't loosen the system.
Why zero is the right answer
Markets move through regimes. Trending regimes — where macro narratives, central bank divergence, or risk-on/risk-off flows drive assets in sustained directions — are hostile to mean-reversion strategies. Spreads that normally oscillate around a stable mean instead drift, trending in ways that turn a convergence bet into a slow bleed.
That's what's happening now. Dollar strength from persistent rate differentials, commodity repricing on supply chain shifts, and crypto correlation with risk sentiment are all pushing traditional stat-arb pairs out of their equilibrium relationships.
The scanner is telling us what the market already knows: this is not a mean-reversion environment. The correct number of trades in a trending regime is zero.
Most systems don't have this concept. They lower thresholds, shorten lookback windows, or add discretionary overrides until they find something to trade. That's how drawdowns start — not from bad models, but from good models being forced into bad environments.
What happens when pairs pass
When the regime shifts — and it will, because regimes always do — the pipeline is ready.
A pair that clears both gates triggers an 8-layer defense architecture before any capital moves:
There are eight layers total. The system was built to protect capital first and generate returns second. The full architecture is documented in 1,365 lines of specification, validated by 1,256 automated tests.
All of this runs on serverless infrastructure — Cloudflare Workers, AWS Fargate Spot, Neon PostgreSQL — with no always-on compute. The system wakes, computes, writes results, and sleeps.
The honest math
Here's what "waiting for signal" actually costs:
| Item | Monthly Cost |
|---|---|
| AWS Fargate Spot (daily compute) | ~$2.50 |
| Neon PostgreSQL (serverless) | $0.00 (free tier) |
| Cloudflare Workers/Pages | $0.00 (free tier) |
| Cloudflare R2 storage | ~$0.20 |
| Total infrastructure | ~$8.70 |
Eight dollars and seventy cents a month to run a full cointegration scanner across 2,415 pairs, maintain an 8-layer risk system, and keep the execution pipeline warm. Less than a single candle chart subscription.
On the prop firm side: our FTMO challenge has no time limit. They removed profit target deadlines in July 2024. The only requirement is one trade every 30 calendar days to keep the account active. A 0.01 lot on any pair satisfies this. The clock is irrelevant.
We pay $8.70/month to wait. FTMO doesn't charge us to be patient. The only cost of zero pairs is zero P&L — which, in a hostile regime, is the optimal outcome.
Patience is the edge
Every signal service needs content. Every fund needs to justify fees. Every social media account needs engagement. The incentive structure of this industry pushes people to trade when there's nothing to trade.
We're building PairSignal on the opposite principle. The system trades when the math says trade. When the math says wait, we publish this blog post instead.
Zero pairs found. Zero capital risked. Zero drawdown.
This is what signal over noise looks like. The scanner runs tonight at 22:00 UTC. It'll run tomorrow night too. When the regime shifts and those trace statistics cross 15.49, the pipeline will execute exactly as designed. Until then, the most profitable position is no position at all.
We show our losses before our wins. Month one, the loss is zero. That's the point.
This content is for informational and educational purposes only and does not constitute financial advice, investment advice, or a recommendation to buy or sell any financial instrument. PairSignal provides statistical analysis tools and commentary on quantitative trading methodologies. All trading involves substantial risk of loss. Past statistical relationships between instruments do not guarantee future cointegration or profitability. You should consult a qualified financial advisor before making any investment decisions. PairSignal is not a registered investment advisor, broker-dealer, or financial institution.