σμ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 AcademyRoadmapsSkills
Ctrl K
AO
+1,2 Tsd. Lernende
AnmeldenBeitreten ↗
RoadmapsSkills
AO
+1,2 Tsd. Lernende
Anmelden
  • English
  • Français
  • Español
  • العربية
  • Português
  • Deutsch
  • 日本語
  • 中文
σμ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 AcademyRoadmapsSkills
Ctrl K
AO
+1,2 Tsd. Lernende
AnmeldenBeitreten ↗
RoadmapsSkills
AO
+1,2 Tsd. Lernende
Anmelden
  • English
  • Français
  • Español
  • العربية
  • Português
  • Deutsch
  • 日本語
  • 中文
Optimization-Skill›Modul 5 · Optimierung in der Praxis›Thema 5.2·~1 Std. 40 Min.Fortgeschritten

Abschlussprojekt: Portfoliooptimierung mit Nebenbedingungen sowie Umschlags- und Kostengrenzen

Position in der SkillModul 5 von 5 · Thema 2 von 2
5.2 Abschlussprojekt: Portfoliooptimierung mit Nebenbedingungen sowie Umschlags- und Kostengrenzen
—Lab-Punkte— / 100XP gesamt—Serie—

Von den Bausteinen zu einem funktionierenden Optimierer

Ein Minimum-Varianz-Portfolio auf dem Papier hat keine Regeln. Ein echtes Mandat ist nur long, voll investiert und zahlt fürs Handeln, und die einzige Möglichkeit zu sehen, was diese Regeln bewirken, ist, den Optimierer selbst zu bauen und an Tagen zu testen, die er nie gesehen hat. Dieses Abschlussprojekt nutzt drei Ideen der Fähigkeit: das Gradientenverfahren für die Schleife, eine Projektion für die Nur-Long-Budgetregel und eine L1-Grenze für die Trades. Es genügt NumPy, und kein Bibliothekslöser ist erlaubt.

wₖ₊₁=Π(wₖ-η·2Σwₖ), η=1/(2λₘₐₓ(Σ))

Das projizierte Gradientenverfahren macht einen gewöhnlichen Gradientenschritt auf der Varianz wᵀΣw, deren Gradient 2Σw ist, und bildet das Ergebnis dann mit der Projektion Π auf das nächste Nur-Long-Portfolio mit voller Investition ab. Die Schrittweite 1/L, mit L=2λₘₐₓ(Σ) dem größten Eigenwert der Hesse-Matrix, ist stets stabil. Die Projektion auf {w≥0, Σw=1} hat eine exakte Antwort: den Vektor absteigend sortieren, kumulative Summen minus eins bilden, die letzte Position ρ finden, an der der sortierte Wert noch seine kumulative Summe geteilt durch k übersteigt, θ als diese kumulative Summe geteilt durch ρ+1 setzen und max(v-θ,0) zurückgeben. Alle Gewichte werden um denselben Betrag verschoben, und die, die negativ würden, werden bei null gekappt.

w=w₀+α(wₜ-w₀), α=min(1, τ/(‖wₜ-w₀‖₁)), c ‖w-w₀‖₁

Der Umschlag ist die L1-Norm des Trades, ‖w-w₀‖₁. Um ihn unter einer Grenze τ zu halten und zugleich zulässig zu bleiben, geht man nur den Bruchteil α des Weges vom aktuellen Portfolio w₀ zum Ziel wₜ des Optimierers. Ein Punkt auf der Strecke zwischen zwei Nur-Long-Portfolios mit voller Investition ist wieder Nur-Long und voll investiert, und die L1-Norm wächst entlang der Strecke linear, der Trade ist also genau min(Lücke,τ). Jedes Rebalancing kostet dann c mal seinen Umschlag, den der Backtest vom ersten Tag des Haltebocks abzieht. Die Gewichte eines Blocks dürfen nur die Tage davor nutzen, und berichtet werden Volatilität und Rendite der aneinandergefügten Out-of-Sample-Tage nach Kosten.

Was die echten Daten sagenFür zwölf große US-Aktien seit 2010, mit einem 126-Tage-Fenster, das alle 42 Tage neu geschätzt wird, Kosten von 10 Basispunkten und 4058 Out-of-Sample-Tagen, hat das Nur-Long-Minimum-Varianz-Portfolio eine Volatilität von etwa 13,4 % pro Jahr, eine Rendite von etwa 13,8 % und einen Umschlag von etwa 0,36 pro Rebalancing. Eine Umschlagsgrenze von 0,2 ergibt eine Volatilität von etwa 13,6 %, eine Rendite von etwa 14,0 % und einen Umschlag von 0,20: etwas mehr Risiko, aber weniger Trades und kein Verlust an Nettorendite. Gleichgewichte haben eine Volatilität von etwa 18,4 %, eine Rendite von etwa 21,4 % und keinen Handel. Sie verdienen nur deshalb mehr, weil diese zwölf Überlebenden, allen voran Apple, Amazon und Nvidia, so gut gelaufen sind.
  • Projiziertes Gradientenverfahren: Gradientenschritt 2Σw mit Schrittweite 1/L, dann Projektion auf den Simplex.
  • Umschlagsgrenze: den Bruchteil α=min(1,τ/Lücke) zum Ziel gehen; das Portfolio bleibt zulässig.
  • Ehrlicher Backtest: auf den letzten window Tagen schätzen, step Tage halten, Kosten abziehen und die aneinandergefügten Out-of-Sample-Zahlen berichten.
Zwei Vereinfachungen, die man kennen sollteDer Backtest ignoriert die Gewichtsdrift innerhalb eines Blocks (die Gewichte bleiben fest) und berechnet pro Umschlagseinheit einen festen Kostensatz, während der echte Impact mit der gehandelten Menge und der Illiquidität wächst. Beides macht die Zahlen etwas zu freundlich. Betrachten Sie die Übung als sauberes Modell des Zielkonflikts zwischen Risiko, Umschlag und Kosten, nicht als Prognose der Live-Performance.

Lab: Was bewertet wird

  • Projektion auf den Simplex20 Pkt.
  • Projiziertes Gradientenverfahren25 Pkt.
  • Eine Umschlagsgrenze15 Pkt.
  • Ein rollierender Backtest mit Kosten25 Pkt.
  • Die Politiken vergleichen15 Pkt.
Explorer · lab-op-11
▾ lab-op-11
▾ data
…
bash · im Browser
learner@quantcraft:~/lab-op-11$
Python noch nicht geladenPythonLn 1, Col 1Spaces: 4UTF-8

Dieses Thema zurücksetzen?

Alles in lab-op-11 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