σμimplied vol · KKmax(S−K,0)udβρᵢⱼfat tailsPnL · drawdownyield · TdSₜ = μSₜ dt + σSₜ dWₜC = S·N(d₁) − K·e⁻ʳᵀ·N(d₂)σₚ² = wᵀΣwd₁ = [ln(S/K) + (r + σ²⁄2)T] ⁄ σ√T∂V/∂t + ½σ²S²·∂²V/∂S² + rS·∂V/∂S − rV = 0Sharpe = (Rₚ − R_f) ⁄ σₚVaR₉₉ = μ − 2.33σρ = Cov(X,Y) ⁄ σₓσᵧE[Rₚ] = Σ wᵢ·E[Rᵢ]φ(x) = e^(−x²/2) ⁄ √2πE[Rᵢ] = R_f + βᵢ(E[Rₘ] − R_f)dXₜ = θ(μ − Xₜ)dt + σ dWₜσ²ₜ = ω + α·ε²ₜ₋₁ + β·σ²ₜ₋₁C − P = S − K·e⁻ʳᵀΔ = ∂V/∂S Γ = ∂²V/∂S²p = (e^(rΔt) − d) ⁄ (u − d)rₜ = ln(Pₜ ⁄ Pₜ₋₁)E[Xₜ₊₁ | ℱₜ] = Xₜf* = (bp − q) ⁄ bz = (x − μ) ⁄ σP(N=k) = λᵏe^(−λ) ⁄ k!Θ = −∂V/∂Tν = S·φ(d₁)·√Tmin wᵀΣw s.t. wᵀμ = μ*∫Σ∂∞λ
σμimplied vol · KKmax(S−K,0)udβρᵢⱼfat tailsPnL · drawdownyield · TdSₜ = μSₜ dt + σSₜ dWₜC = S·N(d₁) − K·e⁻ʳᵀ·N(d₂)σₚ² = wᵀΣwd₁ = [ln(S/K) + (r + σ²⁄2)T] ⁄ σ√T∂V/∂t + ½σ²S²·∂²V/∂S² + rS·∂V/∂S − rV = 0Sharpe = (Rₚ − R_f) ⁄ σₚVaR₉₉ = μ − 2.33σρ = Cov(X,Y) ⁄ σₓσᵧE[Rₚ] = Σ wᵢ·E[Rᵢ]φ(x) = e^(−x²/2) ⁄ √2πE[Rᵢ] = R_f + βᵢ(E[Rₘ] − R_f)dXₜ = θ(μ − Xₜ)dt + σ dWₜσ²ₜ = ω + α·ε²ₜ₋₁ + β·σ²ₜ₋₁C − P = S − K·e⁻ʳᵀΔ = ∂V/∂S Γ = ∂²V/∂S²p = (e^(rΔt) − d) ⁄ (u − d)rₜ = ln(Pₜ ⁄ Pₜ₋₁)E[Xₜ₊₁ | ℱₜ] = Xₜf* = (bp − q) ⁄ bz = (x − μ) ⁄ σP(N=k) = λᵏe^(−λ) ⁄ k!Θ = −∂V/∂Tν = S·φ(d₁)·√Tmin wᵀΣw s.t. wᵀμ = μ*∫Σ∂∞λ
uantCraft AcademySkills
Ctrl K
AO
+1,2 Tsd. Lernende
AnmeldenBeitreten ↗
Skills
AO
+1,2 Tsd. Lernende
Anmelden
  • English
  • Français
  • Español
  • العربية
  • Português
  • Deutsch
  • 日本語
  • 中文
Python-Skill›Modul 3 · Wahrscheinlichkeit & Monte-Carlo-Simulation›Thema 3.2·~40 Min.Mittelstufe

Schiefe und Kurtosis

Position in der SkillModul 3 von 11 · Thema 2 von 12
3.2 Schiefe und Kurtosis
—Lab-Punkte— / 100XP gesamt—Serie—

Jenseits von Mittelwert und Varianz

Zwei Renditereihen können denselben Mittelwert und dieselbe Volatilität haben und doch sehr unterschiedlich zu halten sein. Die eine steigt langsam und fällt hin und wieder an einem Tag um 6 %; die andere ist symmetrisch und ruhig. Mittelwert und Varianz sind die ersten beiden Momente einer Verteilung. Das zentrale Moment k-ter Ordnung ist der Durchschnitt von (x - mean) ** k. Die Momente 3 und 4 beschreiben die Form: Die Schiefe sagt, welcher Rand länger ist, die Kurtosis, wie schwer die Ränder sind.

m_k = mean((x - mean)^k) skewness = m3 / m2^1.5 excess kurtosis = m4 / m2^2 - 3
import numpy as np

def central_moment(x, k):
    return float(np.mean((x - x.mean()) ** k))

# Calm days of about +1%, and one crash of -6%
returns = np.array([0.010, 0.012, 0.008, 0.011, 0.009, 0.010, 0.012, -0.060, 0.010, 0.009])

print(round(central_moment(returns, 2), 8))     # 0.00044389   the variance with ddof=0
print(round(central_moment(returns, 3), 10))    # -2.47823e-05   odd powers keep the sign: the crash dominates
print(round(central_moment(returns, 4), 12))    # 1.587946e-06   even powers are always positive

Schiefe: welcher Rand ist länger

Das Kubieren behält das Vorzeichen jeder Abweichung und lässt große viel stärker zählen, daher wird das dritte Moment von den extremsten Werten dominiert. Die Division durch m2 ** 1.5 entfernt die Einheiten und liefert die Schiefe: 0 bei einer symmetrischen Verteilung, negativ, wenn der lange Rand links liegt (seltene große Verluste), positiv, wenn er rechts liegt (seltene große Gewinne). Aktienindizes haben meist negative Schiefe: langsame Anstiege, plötzliche Einbrüche. Die Schiefe einer Stichprobe von 100.000 Normalwerten liegt bei etwa 0.

m2 = central_moment(returns, 2)
m3 = central_moment(returns, 3)
print(round(m3 / m2 ** 1.5, 3))     # -2.65   strongly negative: one big loss among calm gains

mirror = -returns                    # flip every return: the long tail moves to the right
print(round(central_moment(mirror, 3) / central_moment(mirror, 2) ** 1.5, 3))   # 2.65

Kurtosis: wie schwer sind die Ränder

Die vierte Potenz lässt Extremwerte enorm zählen, daher wächst m4 / m2 ** 2 mit den Rändern. Bei einer Normalverteilung ist es 3, weshalb man die Exzess-Kurtosis m4 / m2 ** 2 - 3 angibt: Sie ist 0 für die Normalverteilung, positiv bei schweren Rändern (Extremtage treten häufiger auf, als die Glocke vorhersagt) und negativ bei dünnen Rändern (das Dünnste überhaupt, zwei gleiche Spitzen, ergibt -2). Tägliche Renditen der meisten Anlagen haben eine klar positive Exzess-Kurtosis, oft 5 oder mehr. Beide Kennzahlen ändern sich nicht, wenn man die Renditen skaliert oder verschiebt, sie beschreiben also nur die Form.

m4 = central_moment(returns, 4)
print(round(m4 / m2 ** 2 - 3, 3))   # 5.059   fat tails: one crash dominates the fourth moment

calm = np.array([-0.02, -0.01, -0.005, 0.0, 0.005, 0.01, 0.02, -0.015, 0.015, 0.0])
c2, c3, c4 = (central_moment(calm, k) for k in (2, 3, 4))
print(round(c3 / c2 ** 1.5, 3), round(c4 / c2 ** 2 - 3, 3))   # 0.0 -1.033   symmetric, slightly thin tails
# Shape does not depend on scale or shift: multiply the returns by 3 and add 1
rescaled = returns * 3 + 1
print(round(central_moment(rescaled, 3) / central_moment(rescaled, 2) ** 1.5, 3))   # -2.65
print(round(central_moment(rescaled, 4) / central_moment(rescaled, 2) ** 2 - 3, 3))  # 5.059   the same two numbers
Ein einziger Crash kann alles ändernSchiefe und Kurtosis werden von den wenigen extremsten Werten bestimmt und sind daher viel weniger stabil als Mittelwert oder Volatilität: Fügen Sie einen Tag hinzu oder entfernen Sie einen, und sie springen. Berechnen Sie sie auf genug Daten (mindestens Hunderte Tage) und sehen Sie sich auch das Histogramm an, bevor Sie einer Zahl trauen.
  • Das zentrale Moment k-ter Ordnung ist mean((x - mean) ** k): Die Momente 2, 3 und 4 ergeben Varianz, Schiefe und Kurtosis.
  • Schiefe m3 / m2 ** 1.5: negativ = langer linker Rand (seltene große Verluste); Exzess-Kurtosis m4 / m2 ** 2 - 3 ist 0 bei einer Normalverteilung.
  • Positive Exzess-Kurtosis bedeutet schwere Ränder; beide Kennzahlen hängen von wenigen Extremtagen ab und brauchen viele Daten.

Als Nächstes: schwere Ränder und Normalitätstests, um formal zu prüfen, ob Renditen der Glockenkurve folgen.

Lab: Was bewertet wird

  • Mit central_moment den Baustein berechnen25 Pkt.
  • Mit skewness messen, welcher Rand länger ist25 Pkt.
  • Mit excess_kurtosis messen, wie schwer die Ränder sind25 Pkt.
  • Mit shape_label die Form benennen25 Pkt.
Explorer · lab-55-1
▾ lab-55-1
…
bash · im Browser
learner@quantcraft:~/lab-55-1$
Python noch nicht geladenPythonLn 1, Col 1Spaces: 4UTF-8

Dieses Thema zurücksetzen?

Alles in lab-55-1 wird auf die Startdateien zurückgesetzt und das Terminal geleert. Ihre aktuelle Lösung geht verloren – das lässt sich nicht rückgängig machen.

Wird zurückgesetzt
  • main.py → Startcode
  • Terminal-Verlauf und Testausgabe
  • Nicht eingereichte Änderungen
Bleibt erhalten
  • Beste Lab-Punktzahl
  • Ihre XP und Ihre Serie
  • Vorlesungsfortschritt und Notizen

Melde dich an, um deinen Code auszuführen.

Alle Lektionen kannst du kostenlos lesen. Erstelle ein Konto oder melde dich an, um Code auszuführen, Tests zu starten und dieses Lab abzugeben.

  • IDE im Browser mit Bash-Terminal — nichts zu installieren
  • Sofortige Bewertung, XP und dein Platz auf der Skill
Konto erstellenAnmelden
ODER
Weiter mit GitHub