Cointegration und Pairs-Strategien: stationäre Spreads finden.
Pairs-Trading ist die älteste statistische Arbitrage-Strategie — und sie funktioniert bis heute, wenn man sie sauber aufsetzt. Der Kern: zwei Assets, deren Preise individuell driften, deren Spread aber stationär bleibt. Wer das richtig testet, handelt Mean Reversion mit harter Statistik im Rücken.
Korrelation ist nicht Cointegration.
Der häufigste Anfängerfehler: Pairs werden über Korrelation ausgewählt. Zwei Aktien mit Korrelation 0,95 sehen verlockend aus — sind aber meist nicht handelbar. Korrelation misst nur, ob sich Renditen kurzfristig im Gleichschritt bewegen. Sie sagt nichts darüber, ob der Preisabstand langfristig stabil bleibt.
Cointegration ist das stärkere Konzept: zwei Zeitreihen sind cointegriert, wenn beide individuell nicht-stationär sind (random-walk-artig driften), eine Linearkombination der beiden aber stationär ist. Genau das brauchen Sie für Mean Reversion — einen Spread, der zuverlässig zu seinem Mittelwert zurückkehrt.
Klassisches Beispiel: zwei Versorger derselben Region, zwei Mineralöl-Majors, zwei Eisenbahn-Operatoren in den USA. Ihre Preise bewegen sich, weil sie demselben Risikofaktor ausgesetzt sind. Der relative Preis schwankt — und kehrt zurück, weil ökonomische Substitution ihn nicht zu weit auseinanderlaufen lässt.
Der Engle-Granger-Test in der Praxis.
Der einfachste Test auf Cointegration ist zweistufig: Erst eine OLS-Regression zwischen den beiden Preisreihen, dann ein Augmented-Dickey-Fuller-Test (ADF) auf die Residuen. Ist das Residuum stationär (p < 0,05), liegt Cointegration vor.
import numpy as np
import pandas as pd
import statsmodels.api as sm
from statsmodels.tsa.stattools import adfuller, coint
def test_cointegration(y, x):
"""Engle-Granger-Test: gibt p-Wert und Hedge-Ratio zurück."""
# Schritt 1: OLS-Regression y = alpha + beta * x + eps
X = sm.add_constant(x)
model = sm.OLS(y, X).fit()
hedge_ratio = model.params[1]
residuals = model.resid
# Schritt 2: ADF-Test auf Residuen
adf_stat, p_value, *_ = adfuller(residuals, maxlag=1, autolag=None)
# Alternativ: direkter coint-Test aus statsmodels
_, p_coint, _ = coint(y, x)
return {
'hedge_ratio': hedge_ratio,
'p_adf_residuals': p_value,
'p_coint': p_coint,
'is_cointegrated': p_value < 0.05
}
Wichtig: Das Vorzeichen der Regression spielt eine Rolle. Wer y und x vertauscht, bekommt einen anderen Hedge-Ratio. In der Praxis testet man beide Richtungen und wählen das Pair mit dem niedrigeren p-Wert.
Spread-Konstruktion und Z-Score.
Ist Cointegration nachgewiesen, konstruieren Sie den Spread:
Spread = y - hedge_ratio · x
Dieser Spread ist Ihre Handelseinheit. Sie short ihn, wenn er weit über dem Mittel liegt, und long ihn, wenn er weit darunter liegt. Die übliche Normierung ist der Z-Score:
def build_signals(y, x, hedge_ratio, lookback=60, entry_z=2.0, exit_z=0.5):
spread = y - hedge_ratio * x
mu = spread.rolling(lookback).mean()
sigma = spread.rolling(lookback).std()
z = (spread - mu) / sigma
pos = pd.Series(0, index=y.index)
pos[z > entry_z] = -1 # Spread short
pos[z < -entry_z] = 1 # Spread long
pos[(z.abs() < exit_z)] = 0
# Forward-fill: Position halten bis Exit-Trigger
pos = pos.replace(0, np.nan).ffill().fillna(0)
# Exit erzwingen
pos[z.abs() < exit_z] = 0
return pos, z
Die Wahl von entry_z = 2 und exit_z = 0,5 ist Konvention —
entspricht etwa 2 Standardabweichungen Entry und Rückkehr auf 0,5. Aggressivere Setups
entern bei 1,5, defensivere bei 2,5.
Half-Life: wie schnell kehrt der Spread zurück?
Ein stationärer Spread ist nur dann handelbar, wenn er auch in vertretbarer Zeit zum Mittelwert zurückkehrt. Die Halbwertszeit (Half-Life) der Mean Reversion sagt Ihnen, wie viele Tage es im Schnitt dauert, bis sich eine Abweichung halbiert. Geschätzt wird sie über eine AR(1)-Regression auf die Spread-Differenzen:
Δspread_t = κ · (μ − spread_{t-1}) + ε_t → half_life = ln(2) / κ
Faustregel: Half-Lives unter 5 Tagen sind oft Mikrostruktur-Rauschen, Half-Lives über 60 Tagen sind selten profitabel nach Kosten. Sweet-Spot liegt zwischen 10 und 30 Handelstagen. Sinnvoll ist, Pairs hart auf diesen Bereich zu filtern, bevor sie in den Live-Universum-Pool gehen.
Universum-Screening: Pairs systematisch finden.
Bei N Assets gibt es N·(N−1)/2 mögliche Paare. Bei einem S&P-500-Universum sind das knapp 125.000 Paare. Naives Durchtesten produziert garantiert falsche Treffer — bei 5 % Signifikanzniveau erwarten Sie 6.250 statistisch signifikante Pairs allein durch Zufall.
Drei bewährte Vorfilter:
- Sektor-Filter: Nur Pairs innerhalb desselben GICS-Subsektors. Ökonomische Begründung muss da sein.
- Liquiditäts-Filter: Tägliches Median-Volumen > 10 Mio. USD. Keine Microcaps.
- Bonferroni-Korrektur: Signifikanzniveau auf 0,05 / Anzahl Tests anpassen. Bei 1.000 getesteten Pairs wird das Niveau zu 5 · 10⁻⁵.
Nach diesen Filtern bleiben aus 500 Aktien typischerweise 20–80 plausible Pairs übrig, von denen 5–15 stabile Half-Lives haben.
Risiken in der Praxis.
Pairs-Trading ist nicht risikolos — der Spread kann brechen. Drei Hauptszenarien:
- Strukturbruch: M&A-Aktivität, Spin-off, neuer CEO mit anderer Strategie. Die ökonomische Beziehung zerfällt.
- Regime-Wechsel: COVID-März-2020, Energie-Schock 2022. Korrelationsstrukturen brechen kollektiv zusammen.
- Crowding: Wenn alle dieselben Pairs handeln, wird der Spread vorzeitig geschlossen und entwickelt eine andere Verteilung.
Robuste Setups arbeiten mit Stop-Loss bei extremen Z-Scores (z. B. |z| > 4), mit Re-Estimation des Hedge-Ratios in rollendem Fenster und mit einem Portfolio von 10–20 unkorrelierten Pairs statt einem einzigen.
Was Sie vom Backtest zur Live-Strategie mitnehmen sollten.
Pairs-Trading sieht im Backtest fast immer gut aus — und enttäuscht oft live. Die Gründe sind selten exotisch:
- Der Hedge-Ratio aus dem In-Sample-Fenster passt im Out-of-Sample nicht mehr. Lösung: rollende Re-Estimation alle 20–40 Tage.
- Transaktionskosten und Spreads sind unterschätzt. Bei Half-Lives von 15 Tagen und 200 % Bruttoumsatz pro Trade fressen 5 bps schon spürbar Performance.
- Short-Borrow ist nicht kostenlos. In illiquiden Namen kostet das Leihen jährlich 1–5 % — und kann jederzeit zurückgerufen werden.
- Survivorship-Bias: Wer im Universum „heute existierender Aktien“ testet, übersieht die übernommenen, delistierten oder fusionierten Pairs der Vergangenheit.
Wer diese Punkte adressiert, bekommt ein realistisches Bild davon, ob nach Kosten noch ein Vorteil bleibt — im besten Fall solide, nicht spektakulär, und mit niedriger Marktkorrelation. Genau das, wofür man Statistical Arbitrage einsetzt.
Stand: Mai 2026, überarbeitet Oktober 2026. Angaben zu Produkten, Preisen, Gesetzen und Fristen können sich seitdem geändert haben; maßgeblich sind die aktuellen Angaben der Anbieter und Behörden.
Sie wollen ein Pairs-Trading-Setup aufbauen oder ein bestehendes Modell überprüfen? Unverbindlich anfragen — wir bauen das Screening, die Tests und die Live-Engine. Mehr zu meinem Angebot: Trading-Systeme entwickeln lassen.