Marktmechanik
MethodikBacktest-NotizenStatistische Arbitrage

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.

Raphael ZbindenStatistische Arbitrage & Backtest-Methodik
3 Min Lesezeit

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.

python · pairs.py
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:

Diagnostik im Schätzfenster 2019-2023 und Ergebnis der Out-of-Sample-Periode 2024-2025. Beispielwerte.
KennzahlIn-SampleOut-of-Sample
Renditekorrelation0,910,88
ADF p-Wert (Spread)0,0130,067
Hedge-Ratio β0,840,79
Half-Life14,2 T23,6 T
Trades3111
Sharpe (brutto)1,620,74
Sharpe (nach Kosten)1,180,21
2.81.40.0-1.3-2.7T-70T-50T-30T-15T-5TSpread-Z-ScoreEinstiegsschwelle ±2σ
Z-Score des kointegrierten Spreads über 70 Handelstage. Beispieldaten zur Illustration der Mean-Reversion-Struktur.

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.

Trades / Jahr ≈ 252 / ( 2 · HL )  →  Kosten / Jahr ≈ 14 bp · Trades HL = Half-Life in Handelstagen
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.

Risikohinweis

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.

  • Kointegration
  • Pairs Trading
  • Half-Life
  • ADF-Test
  • Transaktionskosten
Statistische Arbitrage & Backtest-MethodikRaphael Zbinden

Raphael Zbinden hat Statik gezeichnet, bevor er Zeitreihen modelliert hat. Aus dem Hochbau bringt er eine Haltung mit, die im Trading selten ist: Man rechnet Lastfälle, die man nicht erwartet, weil genau die einstürzen lassen.

Profil ansehen →
Newsletter

Das Briefing am Freitag

Die Beiträge der Woche, eine offene Methodenfrage und ein Verfahren, das wir getestet und verworfen haben. Keine Signale, keine Kursziele.

Demo-Formular ohne Datenverarbeitung