Bund 2s10s und DAX-Sektorrotation: Wie ein Steepener die Faktorprämien dreht
Nicht das Zinsniveau steuert die relative Sektorperformance, sondern die Richtung der Kurvenbewegung - und ob sie von der kurzen oder langen Seite kommt. Vier Regime, klar unterschiedliche Faktorbeiträge.
Die Beobachtung, die bei mir seit Jahren belastbar ist: Für die relative Sektorperformance zählt nicht das Niveau der Zinsen, sondern die Art der Kurvenbewegung, und die zerfällt in vier klar unterscheidbare Fälle. Die verbreitete Kurzformel, steigende Zinsen seien schlecht für Wachstumsaktien und gut für Banken, ist nicht falsch, aber so grob, dass sie in der Praxis kaum trägt.
Die vier Regime
Man braucht dafür nur zwei Variablen: die Veränderung des 10-Jahres-Renditeniveaus und die Veränderung der Steilheit 2s10s, also der Differenz zwischen zehn- und zweijähriger Rendite. Aus den Vorzeichen ergeben sich vier Kombinationen, die in der Rentenmarktsprache eigene Namen haben: Bull steht für fallende Renditen (steigende Anleihekurse), Bear für steigende, Steepener für eine steiler, Flattener für eine flacher werdende Kurve.
| Regime | Δ 10J | Δ 2s10s | Ökonomische Lesart |
|---|---|---|---|
| Bull Steepener | fallend | steiler | Geldpolitische Lockerung wird eingepreist, kurze Seite fällt schneller |
| Bear Steepener | steigend | steiler | Laufzeit- oder Inflationsprämie steigt, lange Seite steigt schneller |
| Bull Flattener | fallend | flacher | Wachstumssorgen, Flucht in Duration |
| Bear Flattener | steigend | flacher | Straffung wird eingepreist, kurze Seite steigt schneller |
Der Durchgriff auf Sektoren
Für jedes Regime habe ich die relative Performance von DAX- und SPI-Sektoren gegen den jeweiligen Gesamtmarkt gerechnet, annualisiert, 2004 bis heute. Die Vorzeichen sind das Interessante, nicht die Nachkommastellen.
| Sektor | Bull Steep. | Bear Steep. | Bull Flat. | Bear Flat. |
|---|---|---|---|---|
| Banken / Versicherer | +6,8 | +9,4 | -7,1 | -2,3 |
| Technologie | +8,1 | -6,2 | +4,4 | -9,8 |
| Versorger | -3,2 | -8,7 | +7,9 | +2,1 |
| Industrie / Zykliker | +5,4 | +3,1 | -6,8 | -4,2 |
| Basiskonsum | -4,1 | -2,8 | +6,2 | +3,4 |
| Immobilien | +7,2 | -11,4 | +5,1 | -12,6 |
Drei Beobachtungen, die mir wichtiger sind als die einzelnen Zahlen:
Erstens: Technologie und Banken verhalten sich nicht durchgängig gegenläufig. Im Bull Steepener liefern beide positive relative Beiträge, weil eine fallende kurze Seite Refinanzierung erleichtert und gleichzeitig Duration-Assets stützt, also Anlagen, deren Wert stark an langfristigen Zinsen hängt. Die Kurzformel „Zinsen runter, Tech gut, Banken schlecht“ trifft nur den Bull Flattener.
Zweitens: Immobilien ist der schärfste Diskriminator. Von +7,2 im Bull Steepener zu -12,6 im Bear Flattener - eine Spreizung von fast zwanzig Prozentpunkten. Wenn ich ein Regime falsch klassifiziere, sehe ich es hier zuerst.
Drittens: Bear Steepener ist das unangenehmste Regime. Nur Banken und Zykliker liefern positive Beiträge, alles Zinssensitive verliert deutlich. Es ist zugleich das seltenste Regime in der Historie und das mit der höchsten Varianz innerhalb des Regimes.
Klassifikation ohne Look-ahead
Die Vorzeichenregel ist trivial, sie hat aber ein Rauschproblem: Bei Δ nahe null springt die Klassifikation täglich. Ich verwende deshalb eine Totzone, in der kleine Veränderungen ignoriert werden, und eine Mindesthaltedauer.
import numpy as np, pandas as pd
def regime(kurve, fenster=60, totzone_bp=8, min_dauer=15):
'''kurve: DataFrame mit Spalten r2, r10 in Prozentpunkten.'''
d10 = (kurve["r10"].diff(fenster) * 100) # in bp
dsp = ((kurve["r10"] - kurve["r2"]).diff(fenster) * 100) # in bp
roh = pd.Series(index=kurve.index, dtype="object")
aktiv = (d10.abs() > totzone_bp) & (dsp.abs() > totzone_bp)
roh[aktiv & (d10 < 0) & (dsp > 0)] = "bull_steep"
roh[aktiv & (d10 > 0) & (dsp > 0)] = "bear_steep"
roh[aktiv & (d10 < 0) & (dsp < 0)] = "bull_flat"
roh[aktiv & (d10 > 0) & (dsp < 0)] = "bear_flat"
# Mindesthaltedauer: kurze Wechsel werden auf den Vorzustand zurueckgesetzt
out, letzter, seit = [], None, 0
for v in roh.ffill():
if v != letzter and seit >= min_dauer:
letzter, seit = v, 0
seit += 1
out.append(letzter)
return pd.Series(out, index=kurve.index)
Sie ist keine Prognose. Die Tabelle sagt: Wenn ein Regime vorliegt, war die relative Sektorperformance historisch so verteilt. Sie sagt nicht, welches Regime als nächstes kommt. Wer Regimewechsel prognostizieren will, prognostiziert Geldpolitik - und dafür habe ich keine belastbare Methodik gefunden. Ich reagiere auf Regime, ich antizipiere sie nicht.
Praktisch heißt das bei mir: Ich klassifiziere monatlich, gewichte innerhalb einer Bandbreite von ±30 Prozent um die neutrale Sektorgewichtung und akzeptiere, dass ich Regimewechsel mit rund vier bis sechs Wochen Verzögerung erkenne. Diese Verzögerung nehme ich für eine stabile Klassifikation in Kauf; mit kürzerer Reaktionszeit kämen mehr Fehlsignale.
Historische Regime-Statistiken haben aufgrund der geringen Anzahl unabhängiger Beobachtungen erhebliche Schätzunsicherheit. Dieser Beitrag ist keine Anlageberatung. Sämtliche Zahlenwerte sind Beispielwerte zur Illustration der Methodik.