⚠ Trading ist mit einem erheblichen Verlustrisiko verbunden. Alle Inhalte dieser Website dienen ausschließlich der Bildung und stellen keine Finanzberatung dar.
Lektion 5 von 13 · Kostenlos

Renditen im Code: einfache und logarithmische Renditen, kumulierte Renditen, annualisierte Rendite und Volatilität sowie rollierende Fenster

Berechnen Sie einfache und logarithmische Renditen in pandas, verzinsen Sie sie korrekt, annualisieren Sie Rendite und Volatilität und erstellen Sie rollierende Statistiken.

Autor: Moustafa HijaziInhalt geprüft: 2026-10-305 Min. LesezeitSelbstlernkurs

Was Sie lernen werden

  • Wie Sie aus einer Schlusskursreihe einfache und logarithmische Renditen berechnen und wann welche das richtige Werkzeug ist.
  • Warum einfache Renditen über ein Produkt verkettet werden müssen, während logarithmische Renditen einfach addiert werden.
  • Wie Sie eine tägliche Durchschnittsrendite und eine tägliche Standardabweichung annualisieren und was die Wurzel-aus-der-Zeit-Regel voraussetzt.
  • Wie rollierende Fenster zeitlich veränderliche Statistiken wie die 20-Tage-Volatilität erzeugen und warum die ersten Zeilen leer sind.

Erklärung

Eine einfache Rendite ist die prozentuale Kursveränderung, rt = (Pt − Pt−1) ÷ Pt−1, in pandas r = df["close"].pct_change(). Eine logarithmische Rendite (Log-Rendite) ist der natürliche Logarithmus des Kursverhältnisses, ℓt = ln(Pt ÷ Pt−1), im Code np.log(df["close"]).diff(). Beide beginnen mit einem NaN. Bei kleinen Bewegungen sind beide nahezu identisch; bei großen Bewegungen weichen sie voneinander ab (eine einfache Rendite von −50% entspricht einer Log-Rendite von −69.3%).

Verkettung. Über mehrere Perioden werden einfache Renditen multipliziert: Gesamt = (1 + r1)(1 + r2)…(1 + rn) − 1. Log-Renditen werden addiert: Gesamt-Log-Rendite = ℓ1 + ℓ2 + … + ℓn, und die Rückumrechnung ergibt die einfache Gesamtrendite = exp(Summe) − 1. Einfache Renditen zu addieren ist falsch, und der Fehler wächst mit der Volatilität: +10% gefolgt von −10% ergibt in der Summe 0%, tatsächlich bleiben aber −1%. Eine Reihe kumulierter Renditen ist (1 + r).cumprod() − 1; eine Equity-Kurve ab €10,000 ist 10_000 * (1 + r).cumprod(); mit Log-Renditen np.exp(lr.cumsum()).

Wann welche? Log-Renditen für die Aggregation über die Zeit und für Statistiken; einfache Renditen immer dann, wenn Geld fließt oder Anlagen kombiniert werden, denn eine Portfoliorendite ist eine gewichtete Summe einfacher Renditen. Berichten Sie Menschen gegenüber in einfachen Prozentwerten.

Annualisieren. Konventionell geht man bei Aktien von 252 Handelstagen pro Jahr aus (die tatsächliche Zahl variiert je nach Börse und Jahr leicht; nennen Sie die verwendete Konvention). Die durchschnittliche Tagesrendite × 252 ist die arithmetisch annualisierte Rendite, und die CAGR (compound annual growth rate, jährliche Wachstumsrate mit Zinseszins, definiert im Kurs „Systematisches Trading“) ist (Endwert ÷ Anfangswert)1 ÷ Jahre − 1; diese sollten Sie für einen Backtest angeben. Die Volatilität ist die Standardabweichung der Renditen; sie skaliert mit der Quadratwurzel der Zeit, sodass die jährliche Volatilität ≈ tägliche Standardabweichung × √252 ≈ täglich × 15.87 ist. Für Monatsdaten verwenden Sie 12 und √12, für Wochendaten 52 und √52. Die Wurzelregel setzt unabhängige Renditen voraus, was trendende Reihen verletzen; behandeln Sie sie als Konvention.

Rollierende Fenster. r.rolling(20).std() * np.sqrt(252) liefert die annualisierte Volatilität der letzten 20 Tage, neu berechnet in jeder Zeile. Die ersten 19 Zeilen sind NaN, weil das Fenster noch nicht voll ist (min_periods kann dies lockern). expanding() nutzt alle Daten bis zur jeweiligen Zeile (etwa das laufende Equity-Maximum für den Drawdown in Lektion 9). Beide blicken nur zurück und sind daher konstruktionsbedingt frei von Look-Ahead-Bias.

Durchgerechnetes Beispiel

Hypothetisches Beispiel: vier Schlusskurse einer Aktie, €100.00, €105.00, €100.80, €105.84; keine Kosten, Dividenden oder Steuern.

Einfache Renditen: (105 − 100) ÷ 100 = +5.00%; (100.80 − 105) ÷ 105 = −4.00%; (105.84 − 100.80) ÷ 100.80 = +5.00%.

Log-Renditen: ln(1.05) = 0.04879; ln(0.96) = −0.04082; ln(1.05) = 0.04879. Summe = 0.05676. exp(0.05676) − 1 = 0.0584, also +5.84%.

Probe: 1.05 × 0.96 × 1.05 = 1.0584 → +5.84%, und 105.84 ÷ 100 − 1 = 5.84%. Die Addition der einfachen Renditen ergäbe 6.00% und würde in drei Tagen um 0.16 Prozentpunkte übertreiben: Aus €10,000 werden €10,584, nicht €10,600.

Code: r = c.pct_change(); total = (1 + r.dropna()).prod() - 1 liefert 0.0584. r.rolling(3).mean() setzt (0.05 − 0.04 + 0.05) ÷ 3 = 2.00% in die letzte Zeile und davor NaN.

Annualisierung einer hypothetischen längeren Stichprobe: Haben die Tagesrenditen einen Mittelwert von 0.04% und eine Standardabweichung von 1.2%, beträgt die arithmetisch annualisierte Rendite 0.0004 × 252 = 10.08% und die annualisierte Volatilität 0.012 × 15.87 = 19.05%.

Häufiger Fehler

Einfache Renditen summieren oder mitteln, um eine Gesamtrendite zu erhaltenSchnell erstellte Notebooks verwenden oft r.sum() als Periodenrendite. Das ignoriert den Zinseszinseffekt und übertreibt die Ergebnisse bei volatilen Reihen, bei gehebelten Produkten sogar dramatisch. Verwenden Sie (1 + r).prod() − 1 für einfache Renditen, oder summieren Sie Log-Renditen und wenden Sie die Exponentialfunktion an.

Übungsaufgabe

Auf Papier: Schlusskurse €50.00, €48.00, €50.40, €49.392 (hypothetisch). (a) Berechnen Sie die drei einfachen Renditen. (b) Berechnen Sie die drei Log-Renditen mit ln(0.96) = −0.04082, ln(1.05) = 0.04879 und ln(0.98) = −0.02020. (c) Geben Sie die Gesamtrendite durch Verkettung und durch Summieren der Logarithmen an und vergleichen Sie sie mit der naiven Summe der einfachen Renditen. (d) Wenn eine andere Reihe eine tägliche Standardabweichung von 1.5% aufweist, geben Sie ihre annualisierte Volatilität mit 252 Tagen an und erklären Sie, warum eine Multiplikation mit 252 falsch wäre.

Lösung anzeigen

(a) 48 ÷ 50 − 1 = −4.00%; 50.40 ÷ 48 − 1 = +5.00%; 49.392 ÷ 50.40 − 1 = −2.00%.

(b) −0.04082, +0.04879, −0.02020; Summe = −0.01223.

(c) Verkettet: 0.96 × 1.05 × 0.98 = 0.98784 → −1.216%. Aus den Logarithmen: exp(−0.01223) − 1 = −1.216%, und 49.392 ÷ 50 − 1 = −1.216% bestätigt dies. Die naive Summe ergibt −4 + 5 − 2 = −1.00% und unterschätzt den Verlust.

(d) Annualisierte Volatilität = 1.5% × √252 = 1.5% × 15.87 = 23.8%. Eine Multiplikation mit 252 ergäbe 378% und verwechselt die Skalierungsregel für Mittelwerte (linear in der Zeit) mit der Regel für Standardabweichungen (Quadratwurzel der Zeit).

Einschränkungen: Die √252-Regel setzt unabhängige Tagesrenditen voraus; reale Reihen mit Autokorrelation haben eine andere tatsächliche Jahresvolatilität.

Kernaussagen

  • pct_change() liefert einfache Renditen, np.log(c).diff() liefert Log-Renditen; beide hinterlassen ein NaN in der ersten Zeile.
  • Verketten Sie einfache Renditen über ein Produkt; summieren Sie Log-Renditen und wenden Sie die Exponentialfunktion an; addieren Sie niemals einfache Renditen.
  • Annualisieren Sie Mittelwerte mit × 252 und Standardabweichungen mit × √252, nennen Sie die Konvention und geben Sie für Backtests die CAGR an.
  • Rollierende und expandierende Fenster blicken nur zurück, liefern NaN, bis sie voll sind, und verwenden standardmäßig die Stichproben-Standardabweichung.

Nächster Schritt

Lektion 6 programmiert die Standardindikatoren SMA, EMA, RSI, ATR und Bollinger-Bänder als vektorisierte Funktionen und zeigt, wie Sie sie mit einer Charting-Plattform abgleichen.

Selbsttest

Beantworten Sie die Fragen und prüfen Sie dann Ihre Antworten. Sie können es so oft wiederholen, wie Sie möchten.

1. Eine Reihe einfacher Tagesrenditen lautet +10%, −10%, +10%, −10%. Wie hoch ist die Gesamtrendite?

2. Die Monatsrenditen eines Fonds haben eine Standardabweichung von 4%. Wie hoch ist die annualisierte Volatilität nach der üblichen Konvention?

3. Warum zeigen die ersten 19 Zeilen von r.rolling(20).std() NaN?

Automatischer Selbsttest zur eigenen Wiederholung. Ihre Antworten werden in Ihrem Browser geprüft und von uns weder eingesehen noch bewertet. Es ist keine Prüfung und kein Abschluss.

Ihr Fortschritt

„Erledigt“ bedeutet nur, dass Sie die Lektion als abgeschlossen markiert haben. Es ist kein Test Ihres Verständnisses. Fortschritt und Notizen werden nur in diesem Browser auf diesem Gerät gespeichert — nicht in einem Konto.