Kointegration statt Korrelation: Ein Pairs-Trade auf zwei Schweizer Pharmatitel, ehrlich durchgerechnet
Zwei Aktien mit Korrelation 0,91 sind kein Pairs-Trade. Was zählt, ist die Stationarität des Residuums - und die Half-Life, die entscheidet, ob nach Kosten etwas übrig bleibt.
Der häufigste Fehler beim Pairs Trading, also dem Kauf einer Aktie bei gleichzeitigem Leerverkauf einer verwandten, passiert in der Auswahl, nicht in der Ausführung. Man nimmt zwei Titel aus derselben Branche, rechnet die Korrelation der Renditen, findet 0,91 und hält das Paar für geeignet. Damit verwechselt man Korrelation mit Kointegration, und das kostet zuverlässig Geld.
Der Unterschied, konkret
Korrelation ist eine Aussage über gleichzeitige Renditen. Kointegration ist eine Aussage über die Preisniveaus: Zwei nicht-stationäre Reihen sind kointegriert, wenn eine Linearkombination von ihnen stationär ist. Anders gesagt: Der Abstand kehrt zu einem Mittelwert zurück.
Zwei Reihen können hoch korreliert und nicht kointegriert sein. Das ist sogar der Normalfall bei Aktien derselben Branche, die unterschiedliche Wachstumsraten haben. Sie bewegen sich täglich gemeinsam und driften über Jahre auseinander. Ein Pairs-Trade auf so ein Paar ist eine Short-Position auf den Trend des besseren Unternehmens - mit begrenztem Gewinn und unbegrenztem Verlust.
Der Test, in der richtigen Reihenfolge
Ich verwende die Engle-Granger-Prozedur, weil sie transparent ist und man an jedem Schritt sehen kann, was passiert: Zuerst schätzt sie per Regression das Hedge-Ratio, also wie viele Einheiten der einen Aktie gegen eine Einheit der anderen gehandelt werden. Dann prüft der ADF-Test (Augmented Dickey-Fuller), ob der verbleibende Spread stationär ist.
import numpy as np, statsmodels.api as sm
from statsmodels.tsa.stattools import adfuller
def engle_granger(y, x):
'''Schritt 1: Hedge-Ratio per OLS. Schritt 2: ADF auf das Residuum.'''
X = sm.add_constant(x)
fit = sm.OLS(y, X).fit()
beta = fit.params.iloc[1]
spread = y - beta * x - fit.params.iloc[0]
stat, p, *_ = adfuller(spread.dropna(), maxlag=1, regression="c")
return beta, spread, p
def half_life(spread):
'''Ornstein-Uhlenbeck-Schaetzung der Rueckkehrgeschwindigkeit in Tagen.'''
s = spread.dropna()
lag, delta = s.shift(1).dropna(), s.diff().dropna()
lag, delta = lag.align(delta, join="inner")
lam = sm.OLS(delta, sm.add_constant(lag)).fit().params.iloc[1]
return -np.log(2) / lam if lam < 0 else np.inf
Die Half-Life ist der Teil, den man nicht überspringen darf. Sie sagt, wie viele Tage der Spread braucht, um die Hälfte einer Abweichung abzubauen. Und sie entscheidet gemeinsam mit den Transaktionskosten darüber, ob das Paar handelbar ist.
Ein durchgerechnetes Paar
Zwei Schweizer Pharmatitel, Tagesschlusskurse in CHF, 2019 bis Ende 2025, Log-Preise. Die Kennzahlen im In-Sample-Fenster:
| Kennzahl | In-Sample | Out-of-Sample |
|---|---|---|
| Renditekorrelation | 0,91 | 0,88 |
| ADF p-Wert (Spread) | 0,013 | 0,067 |
| Hedge-Ratio β | 0,84 | 0,79 |
| Half-Life | 14,2 T | 23,6 T |
| Trades | 31 | 11 |
| Sharpe (brutto) | 1,62 | 0,74 |
| Sharpe (nach Kosten) | 1,18 | 0,21 |
Das ist ein typisches und ernüchterndes Bild. Der ADF-Test verfehlt Out-of-Sample die Fünf-Prozent-Schwelle, die Half-Life steigt um zwei Drittel, das Hedge-Ratio verschiebt sich. Von einer Brutto-Sharpe (Rendite pro Einheit Schwankung) von 0,74 bleiben nach realistischen Kosten 0,21 - statistisch nicht von null unterscheidbar.
Die Kostenrechnung, die meist fehlt
Ein Pairs-Trade kostet vier Transaktionen: zwei beim Einstieg, zwei beim Ausstieg. Bei Schweizer Blue Chips rechne ich mit einem halben Basispunkt Kommission und zwei bis drei Basispunkten Spread und Slippage je Bein. Das ergibt pro Rundlauf rund vierzehn Basispunkte.
Bei HL = 14 T: ≈ 9 Trades/Jahr → ≈ 126 bp Kosten
Bei HL = 24 T: ≈ 5 Trades/Jahr → ≈ 74 bp Kosten
Kurze Half-Life bedeutet mehr Signale und mehr Kostenlast.
Eine kurze Half-Life klingt attraktiv, weil sie viele Signale liefert. Sie verlangt aber eine höhere Bruttorendite pro Trade, um dieselbe Nettorendite zu erreichen. In meiner Erfahrung liegt der praktikable Bereich bei zehn bis dreißig Handelstagen. Darunter frisst der Spread alles, darüber ist die Kapitalbindung nicht mehr zu rechtfertigen.
Was ich daraus gemacht habe
Ich handle heute keine Einzelpaare mehr, sondern Körbe aus zwölf bis zwanzig Paaren mit gleichgewichteter Risikoallokation. Der Grund ist nicht Diversifikation im üblichen Sinne, sondern die Instabilität des Hedge-Ratios: Wenn β eines einzelnen Paares um zehn Prozent wegläuft, ist eine Einzelposition beschädigt; im Korb ist es ein Rauschbeitrag.
Und ich schätze β heute rollierend über 250 Tage statt fix im Schätzfenster neu. Das kostet In-Sample Sharpe und hält Out-of-Sample deutlich besser. Dazu mehr im nächsten Beitrag über Walk-Forward-Validierung.
Marktneutrale Strategien sind nicht risikolos. Kointegrationsbeziehungen können durch Übernahmen, Spin-offs oder strukturelle Veränderungen dauerhaft brechen; Leerverkäufe bergen zusätzliche Risiken. Dieser Beitrag ist eine methodische Darstellung, keine Anlageberatung. Alle Zahlen sind Beispielwerte.