<aclass="brand"href="index.html"><svgclass="icon"aria-hidden="true"><usehref="#icon-book"></use></svg><span>Optimierte Entscheidungsfindung mit Python</span></a>
<navclass="sidebar"id="sidebar"aria-label="Kapitelnavigation"><divclass="sidebar-inhalt"><detailsclass="sidebar-gruppe"><summary>Einstieg</summary><ul><lidata-kapitel="vorwort.html"><ahref="vorwort.html"><spanclass="fortschritt-haken"><svgclass="icon"aria-hidden="true"><usehref="#icon-check"></use></svg></span><span>Vorwort & Lesehilfe</span></a></li><lidata-kapitel="notation.html"><ahref="notation.html"><spanclass="fortschritt-haken"><svgclass="icon"aria-hidden="true"><usehref="#icon-check"></use></svg></span><span>Notation & Abkürzungen</span></a></li></ul></details><detailsclass="sidebar-gruppe"><summary>Teil I: Grundlagen des Operations Research</summary><ul><lidata-kapitel="einfuehrung.html"><ahref="einfuehrung.html"><spanclass="fortschritt-haken"><svgclass="icon"aria-hidden="true"><usehref="#icon-check"></use></svg></span><span>Kapitel 1: Einführung in Operations Research — Vom Ursprung zur mathematischen Entscheidungsfindung</span></a></li><lidata-kapitel="fundament.html"><ahref="fundament.html"><spanclass="fortschritt-haken"><svgclass="icon"aria-hidden="true"><usehref="#icon-check"></use></svg></span><span>Kapitel 2: Das mathematische Fundament — Vektoren, Matrizen, Konvexität</span></a></li><lidata-kapitel="oekosystem.html"><ahref="oekosystem.html"><spanclass="fortschritt-haken"><svgclass="icon"aria-hidden="true"><usehref="#icon-check"></use></svg></span><span>Kapitel 3: Das Python-Ökosystem für OR — Solver, Bindings und Modellierungsschichten</span></a></li><lidata-kapitel="modellierung.html"><ahref="modellierung.html"><spanclass="fortschritt-haken"><svgclass="icon"aria-hidden="true"><usehref="#icon-check"></use></svg></span><span>Kapitel 4: Vom Management-Wunsch zum Modell</span></a></li><lidata-kapitel="synthese-grundlagen.html"><ahref="synthese-grundlagen.html"><spanclass="fortschritt-haken"><svgclass="icon"aria-hidden="true"><usehref="#icon-check"></use></svg></span><span>Synthese Teil I</span></a></li></ul></details><detailsclass="sidebar-gruppe"><summary>Teil II: Die Kernverfahren der deterministischen Optimierung</summary><ul><lidata-kapitel="lp.html"><ahref="lp.html"><spanclass="fortschritt-haken"><svgclass="icon"aria-hidden="true"><usehref="#icon-check"></use></svg></span><span>Kapitel 5: Lineare Programmierung — Simplex, Dualität und Schattenpreise</span></a></li><lidata-kapitel="milp.html"><ahref="milp.html"><spanclass="fortschritt-haken"><svgclass="icon"aria-hidden="true"><usehref="#icon-check"></use></svg></span><span>Kapitel 6: Gemischt-ganzzahlige Optimierung — Diskrete Entscheidungen und Branch-and-Bound</span></a></li><lidata-kapitel="cpsat.html"><ahref="cpsat.html"><spanclass="fortschritt-haken"><svgclass="icon"aria-hidden="true"><usehref="#icon-check"></use></svg></span><span>Kapitel 7: Constraint Programming mit CP-SAT — Logik, Scheduling und Zuweisung</span></a></li><lidata-kapitel="graphen.html"><ahref="graphen.html"><spanclass="fortschritt-haken"><svgclass="icon"aria-hidden="true"><usehref="#icon-check"></use></svg></span><span>Kapitel 8: Graphen, Flüsse und Touren — Min-Cost-Flow, Matching und VRP</span></a></li><lidata-kapitel="metaheuristiken.html"><ahref="metaheuristiken.html"><spanclass="fortschritt-haken"><svgclass="icon"aria-hidden="true"><usehref="#icon-check"></use></svg></span><span>Kapitel 9: Metaheuristiken — wenn der exakte Solver aussteigt</span></a></li><lidata-kapitel="dekomposition.html"><ahref="dekomposition.html"><spanclass="fortschritt-haken"><svgclass="icon"aria-hidden="true"><usehref="#icon-check"></use></svg></span><span>Kapitel 10: Spaltengenerierung — das Modell umbauen statt die Lösung raten</span></a></li><lidata-kapitel="synthese-kernverfahren.html"><ahref="synthese-kernverfahren.html"><spanclass="fortschritt-haken"><svgclass="icon"aria-hidden="true"><usehref="#icon-check"></use></svg></span><span>Synthese Teil II</span></a></li></ul></details><detailsclass="sidebar-gruppe"><summary>Teil III: Nichtlinearität, Unsicherheit und mehrperiodige D
<navclass="breadcrumb"aria-label="Breadcrumb"><ahref="index.html">Start</a>›<span>Teil IV</span>›<span>Kapitel 19: Die moderne Portfoliotheorie nach Markowitz</span></nav>
<navclass="prev-next"><aclass="prev-next-knopf prev-next-prev"href="finanzdaten.html"><svgclass="icon"aria-hidden="true"><usehref="#icon-chevron-left"></use></svg><span><small>Zurück</small>Kapitel 18: Finanzdaten-Modellierung — Renditen, Kovarianz und Shrinkage</span></a><aclass="prev-next-knopf prev-next-next"href="cvar.html"><span><small>Weiter</small>Kapitel 20: Tail-Risiko, CVaR und Transaktionskosten</span><svgclass="icon"aria-hidden="true"><usehref="#icon-chevron-right"></use></svg></a></nav>
<article>
<h1id="kap-markowitz">Kapitel 19: Die moderne Portfoliotheorie nach Markowitz</h1>
<divclass="card card-blick">
<blockquote>
<p><strong>📌 Kapitel auf einen Blick</strong></p>
<p><strong>Worum geht es?</strong> Um das Modell, das 1952 die quantitative Finanzwirtschaft begründete — und um die Restriktionen, ohne die es in der Praxis unbrauchbar bleibt.</p>
<p><strong>Danach können Sie:</strong> Die Effizienzgrenze berechnen, das Maximum-Sharpe-Portfolio über die Korn-Transformation bestimmen, institutionelle Nebenbedingungen einbauen — und beurteilen, wann eine Renditeschätzung das Ergebnis wertlos macht.</p>
<p><strong>Zeitbedarf:</strong> ca. 6 Stunden.</p>
<p>Statt <em>einer</em> Antwort rechnen wir gleich die <strong>ganze Auswahl</strong> durch — für jede Zielrendite das Portfolio mit dem geringsten Risiko:</p>
<spanid="cb1-11"><ahref="#cb1-11"aria-hidden="true"tabindex="-1"></a> [cp.<spanclass="bu">sum</span>(w) <spanclass="op">==</span><spanclass="dv">1</span>, mu <spanclass="op">@</span> w <spanclass="op">>=</span> ziel])</span>
<p><strong>Diese sechs Zeilen sind die Effizienzlinie</strong>, und sie beantworten die Frage anders, als die meisten sie stellen. Es gibt kein „bestes“ Portfolio — es gibt eine <strong>Auswahl</strong>, und jede Zeile ist für ihre Zielrendite optimal.</p>
<p>Lesen Sie die dritte Spalte: Sie zeigt, wie viel Rendite je Einheit Risiko herausspringt (die <strong>Sharpe-Kennzahl</strong>). Sie ist <strong>nicht</strong> unten am höchsten:</p>
<ul>
<li>Bei 3 % Zielrendite: 0,69 — das Portfolio ist sicher, aber lässt Ertrag liegen.</li>
<li>Bei <strong>4 %</strong>: <strong>0,75</strong> — das beste Verhältnis.</li>
<li>Bei 8 %: 0,44 — das renditestärkste Portfolio ist das <strong>schlechteste</strong> je Risikoeinheit. Und es besteht zu 100 % aus Aktien: Wer die höchste Rendite fordert, bekommt zwangsläufig gar keine Diversifikation mehr.</li>
</ul>
<p>Von 3 % auf 8 % Rendite ist ein Zuwachs um Faktor 2,7 — das Risiko steigt dabei um Faktor 3,7. Die letzten Prozentpunkte Rendite sind die teuersten.</p>
<blockquote>
<p><strong>🎯 Merksatz</strong> Ein Optimierer beantwortet nicht die Frage „was soll ich tun?“, sondern „was ist erreichbar?“. Die Effizienzlinie ist eine <strong>Speisekarte</strong>, keine Empfehlung. Welche Zeile die richtige ist, hängt von der Risikotragfähigkeit ab — und das ist keine mathematische, sondern eine unternehmerische Frage.</p>
</blockquote>
<p><strong>Warum funktioniert das?</strong> Weil <code>cp.Parameter</code> das Modell nur <strong>einmal</strong> aufbaut und dann sechsmal mit verschiedenen Zielwerten löst. Genau dafür gibt es Parameter in CVXPY: Bei 200 Punkten auf der Linie spart das den 200-fachen Kompilierungsaufwand (<ahref="oekosystem.html#sec:oekosystem-vektorisierung">Abschnitt 3.8</a>). Der Rest dieses Kapitels führt die Effizienzlinie sauber aus, zeigt, wie man das beste Verhältnis direkt berechnet statt es abzulesen — und warum das Ganze mit geschätzten Renditen gefährlicher ist, als es hier aussieht.</p>
<p>Harry Markowitz’ zentrale Einsicht von 1952: <strong>Das Risiko eines Portfolios ist nicht die Summe der Einzelrisiken.</strong> Es hängt davon ab, wie die Titel zusammenspielen.</p>
<p><strong>📐 Formel-Lesehilfe</strong> * Die ersten beiden Terme sind die „eigenen“ Risikobeiträge. * Der dritte Term enthält die <strong>Korrelation</strong><spanclass="math inline">\rho_{12}</span> — und <strong>nur er</strong> kann negativ werden.</p>
<p><strong>Ohne Formel gesagt:</strong> Wenn zwei Anlagen sich gegenläufig bewegen (<spanclass="math inline">\rho < 0</span>), gleichen sich ihre Schwankungen teilweise aus. Das Portfolio schwankt dann <strong>weniger als jeder Einzeltitel</strong> — bei einer Rendite, die genau dem gewichteten Mittel entspricht. Diversifikation ist damit das einzige „Gratis-Mittagessen“ der Finanzwirtschaft.</p>
</blockquote>
<blockquote>
<p><strong>✏️ Handrechnung 19.1: Das Gratis-Mittagessen in Zahlen</strong></p>
<p>Zwei Titel, beide mit <spanclass="math inline">\mu = 8\,\%</span> und <spanclass="math inline">\sigma = 20\,\%</span>, Gewichtung 50/50. Die Portfoliorendite ist <strong>immer</strong><spanclass="math inline">8\,\%</span> — unabhängig von der Korrelation. Das Risiko dagegen:</p>
<p><strong>Bei gleicher Rendite von 8 %.</strong> Genau das meint Markowitz: Risiko lässt sich reduzieren, ohne dafür Ertrag aufzugeben — allein durch die richtige Kombination.</p>
<p><strong>Die Kehrseite:</strong> In Krisen steigen Korrelationen. Ein Portfolio, dessen Diversifikation auf <spanclass="math inline">\rho = 0{,}2</span> beruht, kann bei <spanclass="math inline">\rho \to 0{,}9</span> plötzlich fast unkorrelierte Absicherung verlieren — genau dann, wenn man sie braucht. <ahref="cvar.html#kap-cvar">Kapitel 20</a> und <ahref="praxisfallen.html#kap-praxisfallen">Kapitel 22</a> kommen darauf zurück.</p>
</blockquote>
<p>Die Tabelle aus der Handrechnung <em>Das Gratis-Mittagessen in Zahlen</em> lässt sich auf zwei unabhängigen Wegen prüfen: über die <strong>analytische Formel</strong> und über eine <strong>Simulation</strong> korrelierter Renditepaare, die von der Formel nichts weiß.</p>
<spanid="cb3-5"><ahref="#cb3-5"aria-hidden="true"tabindex="-1"></a><spanclass="co">Kapitel Markowitz: Portfoliorisiko in Abhaengigkeit von der Korrelation - die</span></span>
<spanid="cb3-6"><ahref="#cb3-6"aria-hidden="true"tabindex="-1"></a><spanclass="co">Handrechnung zum Gratis-Mittagessen, geprueft ueber die analytische Formel und</span></span>
<spanid="cb3-24"><ahref="#cb3-24"aria-hidden="true"tabindex="-1"></a><spanclass="co">"""Erzeugt n korrelierte Renditepaare und misst die Portfolio-Volatilitaet empirisch."""</span></span>
<spanid="cb3-35"><ahref="#cb3-35"aria-hidden="true"tabindex="-1"></a><spanclass="bu">print</span>(<spanclass="st">" PORTFOLIORISIKO IN ABHAENGIGKEIT VON DER KORRELATION"</span>)</span>
<spanid="cb3-45"><ahref="#cb3-45"aria-hidden="true"tabindex="-1"></a><spanclass="bu">print</span>(<spanclass="st">"</span><spanclass="ch">\n</span><spanclass="st">Die simulierten Werte (500.000 gezogene Renditepaare je rho) bestaetigen"</span>)</span>
<spanid="cb3-46"><ahref="#cb3-46"aria-hidden="true"tabindex="-1"></a><spanclass="bu">print</span>(<spanclass="st">"die Formel aus der Handrechnung bis auf statistisches Rauschen - und das,"</span>)</span>
<spanid="cb3-47"><ahref="#cb3-47"aria-hidden="true"tabindex="-1"></a><spanclass="bu">print</span>(<spanclass="st">"obwohl Formel und Simulation nichts voneinander wissen."</span>)</span></code></pre></div>
\text{u. d. N.}\qquad \sum_{i=1}^n w_i = 1,\qquad w_i \ge 0\ \ \forall i
</span></p>
<blockquote>
<p><strong>📐 Formel-Lesehilfe</strong> * <spanclass="math inline">\tfrac12\mathbf{w}^\top\boldsymbol{\Sigma}\mathbf{w}</span> — die halbe Portfoliovarianz (das Risiko). * <spanclass="math inline">\lambda\,\boldsymbol{\mu}^\top\mathbf{w}</span> — die mit <spanclass="math inline">\lambda</span> gewichtete erwartete Rendite. Weil sie <strong>abgezogen</strong> wird, wird hohe Rendite belohnt. * <spanclass="math inline">\sum w_i = 1</span> — das Kapital wird vollständig investiert. * <spanclass="math inline">w_i \ge 0</span> — keine Leerverkäufe (<em>long only</em>).</p>
<p><strong>Die Rolle von <spanclass="math inline">\lambda</span>:</strong></p>
<table>
<colgroup>
<colstyle="width: 33%"/>
<colstyle="width: 33%"/>
<colstyle="width: 33%"/>
</colgroup>
<thead>
<trclass="header">
<th><spanclass="math inline">\lambda</span></th>
<th>Verhalten</th>
<th>Ergebnis</th>
</tr>
</thead>
<tbody>
<trclass="odd">
<td><spanclass="math inline">0</span></td>
<td>Risiko zählt allein</td>
<td><strong>GMV</strong> — Global Minimum Variance Portfolio</td>
<td>alles in den Titel mit höchstem <spanclass="math inline">\mu</span></td>
</tr>
</tbody>
</table>
<p><strong>Ohne Formel gesagt:</strong> „Streue so, dass das Risiko klein bleibt — aber lass dir dafür nicht zu viel Rendite entgehen. Wie viel Rendite dir das Risiko wert ist, sagt <spanclass="math inline">\lambda</span>.“</p>
</blockquote>
<divclass="card card-formel">
<blockquote>
<p><strong>🔤 Formel-Übersetzer: die Matrixschreibweise auflösen</strong></p>
<p>Der Sprung von der Zweititelformel weiter oben zu <spanclass="math inline">\mathbf{w}^\top\boldsymbol{\Sigma}\mathbf{w}</span> sieht aus wie ein neues Konzept. Er ist keines — es ist <strong>dieselbe Formel</strong>, nur nicht mehr ausgeschrieben:</p>
<td>Die Tabelle „wie bewegen sich je zwei Titel zueinander?“. Auf der Diagonale steht das Eigenrisiko <spanclass="math inline">\sigma_i^2</span>, daneben das Zusammenspiel <spanclass="math inline">\sigma_{ij}</span>.</td>
<td>Die <strong>Doppelsumme über alle Paare</strong>: <spanclass="math inline">\sum_i\sum_j w_i w_j \sigma_{ij}</span>. Bei <spanclass="math inline">n</span> Titeln sind das <spanclass="math inline">n^2</span> Summanden — bei 5 Titeln 25, bei 500 Titeln 250 000. Deshalb schreibt man es als Matrixprodukt.</td>
</tr>
</tbody>
</table>
<p><strong>Die Probe.</strong> Setzen Sie <spanclass="math inline">n = 2</span> in die Doppelsumme ein: Sie erhalten <spanclass="math inline">w_1^2\sigma_1^2 + w_2^2\sigma_2^2 + 2w_1w_2\sigma_{12}</span> — Buchstabe für Buchstabe die Formel aus <ahref="#sec:markowitz-warum-diversifikation-funktioniert">Abschnitt 19.3</a>. Die Matrixschreibweise führt nichts Neues ein; sie erspart nur das Ausschreiben.</p>
<p><strong>In einem Satz:</strong><em>Die Diagonale von <spanclass="math inline">\boldsymbol{\Sigma}</span> ist das Risiko, das jeder Titel mitbringt; alles daneben ist das, was Diversifikation daraus macht — und nur dieser zweite Teil kann negativ werden.</em> 13,15 % liegen unter <strong>beiden</strong> Einzelrisiken, und das ist keine Näherung, sondern das exakte Ergebnis der Formel.</p>
</blockquote>
</div>
<h3id="die-effizienzgrenze-und-das-tangentialportfolio">Die Effizienzgrenze und das Tangentialportfolio</h3>
<p>Die <strong>Effizienzgrenze</strong> (<em>efficient frontier</em>) ist die Kurve aller Portfolios, die zu jedem Risikoniveau die höchstmögliche Rendite liefern.</p>
<figure>
<imgsrc="bilder_04/kap12_efficient_frontier.svg"alt="Abb. 19.1: Efficient Frontier und Tangential-Portfolio"/>
<figcaptionaria-hidden="true">Abb. 19.1: Efficient Frontier und Tangential-Portfolio</figcaption>
</figure>
<p>Das <strong>Tangentialportfolio</strong> maximiert die <strong>Sharpe Ratio</strong>:</p>
<p><strong>📐 Formel-Lesehilfe</strong> Zähler: <strong>Überrendite</strong> über den risikolosen Zins <spanclass="math inline">r_f</span>. Nenner: die Volatilität.</p>
<p><strong>Ohne Formel gesagt:</strong> „Wie viel Mehrertrag bekomme ich je Einheit Risiko, die ich eingehe?“ Eine Sharpe Ratio von 0,8 heißt: Für jeden Prozentpunkt Volatilität gibt es 0,8 Prozentpunkte Überrendite.</p>
<p>Die Sharpe Ratio ist ein <strong>Bruch</strong> — und damit <strong>nicht konvex</strong>. CVXPY würde sie ablehnen. Der Ausweg ist ein eleganter Trick, der die Homogenität des Problems ausnutzt:</p>
<p>Die echten Gewichte ergeben sich am Ende durch Normierung:</p>
<p><spanclass="math display">
\mathbf{w}^* = \frac{\mathbf{y}^*}{\kappa^*}
</span></p>
<blockquote>
<p><strong>💡 Warum das funktioniert</strong> Die Sharpe Ratio ändert sich nicht, wenn man <spanclass="math inline">\mathbf{w}</span> mit einer positiven Zahl skaliert — Zähler und Nenner wachsen gleichermaßen. Man darf deshalb die <strong>Skala frei festlegen</strong>. Die Bedingung <spanclass="math inline">(\boldsymbol{\mu}-r_f\mathbf{1})^\top\mathbf{y} = 1</span> normiert die Überrendite auf 1; dann ist das Maximieren der Sharpe Ratio gleichbedeutend mit dem <strong>Minimieren des Nenners</strong> — und das ist ein gewöhnliches QP.</p>
<p><strong>Wichtig bei Restriktionen:</strong> Alle Nebenbedingungen müssen <strong>mitskaliert</strong> werden. Aus <spanclass="math inline">w_i \le 0{,}20</span> wird <spanclass="math inline">y_i \le 0{,}20\,\kappa</span>. Wer das vergisst, erhält ein falsches Portfolio.</p>
<h3id="was-diese-regeln-kosten">Was diese Regeln kosten</h3>
<p>Jede Regel schneidet etwas vom Erreichbaren ab. Wie viel, lässt sich ausrechnen — man legt die Effizienzlinie ohne und mit Beschränkungen übereinander:</p>
<figure>
<imgsrc="bilder_04/kap_markowitz_restriktionen.svg"alt="Abb. 19.2: Was die Hausregeln kosten. Der senkrechte Abstand ist der Renditeverlust bei gleichem Risiko. Wichtiger ist aber das rechte Ende: Mit den Hausregeln bricht die Linie bei 9,06 % ab — die letzten 1,50 Punkte sind mit keinem Risiko der Welt mehr zu kaufen. Feste Instanz aus einem Faktormodell, erzeugt von bilder_04/erzeuge_effizienzlinie.py."/>
<figcaptionaria-hidden="true">Abb. 19.2: Was die Hausregeln kosten. Der senkrechte Abstand ist der Renditeverlust bei gleichem Risiko. Wichtiger ist aber das rechte Ende: Mit den Hausregeln bricht die Linie bei 9,06 % ab — die letzten 1,50 Punkte sind mit keinem Risiko der Welt mehr zu kaufen. Feste Instanz aus einem Faktormodell, erzeugt von <code>bilder_04/erzeuge_effizienzlinie.py</code>.</figcaption>
<p><strong>Zwei verschiedene Kosten, und die zweite ist die größere.</strong> Der senkrechte Abstand — hier höchstens 0,58 Prozentpunkte — ist das, was die meisten erwarten: bei gleichem Risiko etwas weniger Rendite. Der eigentliche Einschnitt steht am oberen Ende. Ohne Grenzen darf das Portfolio ganz in die renditestärksten Titel gehen und erreicht 10,55 %; mit einer 20-%-Grenze je Titel und den Sektorlimits ist bei <strong>9,06 %</strong> Schluss. Diese 1,50 Punkte sind nicht teuer erkauft, sondern <strong>überhaupt nicht mehr erreichbar</strong> — auch nicht gegen mehr Risiko.</p>
<blockquote>
<p><strong>📎 Warum hier eine feste Instanz und nicht die Kursdaten</strong><code>Markowitz_CVXPY.py</code> lädt Livedaten; ein Diagramm daraus sähe an jedem Tag anders aus. Die Figur rechnet deshalb ein festes Universum aus einem Faktormodell — dieselbe Struktur (zehn Titel, vier Sektoren) und dieselben Regeln wie im Kapitel, aber reproduzierbar. Die Zahlen Ihres Livelaufs weichen ab; die Form der Aussage nicht.</p>
</blockquote>
<blockquote>
<p><strong>⚠️ Sektoren niemals über Positionsindizes definieren</strong></p>
<p>Ein naiver, aber gefährlicher Ansatz definiert den Technologiesektor so:</p>
<p>Weil <code>yfinance</code> alphabetisch sortiert, trifft das tatsächlich auf <strong>AAPL, AMZN, CVX (Chevron) und GS (Goldman Sachs)</strong> zu — Microsoft und NVIDIA blieben unbeschränkt.</p>
<p><strong>Robust ist die Definition über Namen:</strong></p>
<spanid="cb6-2"><ahref="#cb6-2"aria-hidden="true"tabindex="-1"></a>idx <spanclass="op">=</span> [tickers.index(t) <spanclass="cf">for</span> t <spanclass="kw">in</span> SEKTOREN[<spanclass="st">"Technologie"</span>]]</span></code></pre></div>
<p>Diese Schreibweise ist nicht nur sicher, sondern auch lesbar — und sie <strong>bricht laut ab</strong>, wenn ein Ticker fehlt, statt still das Falsche zu tun.</p>
</blockquote>
<hr/>
<h2id="sec:markowitz-vollimplementierung-mit-cvxpy">19.6 Vollimplementierung mit CVXPY</h2>
<spanid="cb7-5"><ahref="#cb7-5"aria-hidden="true"tabindex="-1"></a><spanclass="co">Kapitel Markowitz: Markowitz-Mean-Variance-Optimierung mit CVXPY.</span></span>
<spanid="cb7-6"><ahref="#cb7-6"aria-hidden="true"tabindex="-1"></a><spanclass="co">Enthaelt GMV, Maximum Sharpe (Korn-Transformation), Effizienzgrenze</span></span>
<spanid="cb7-10"><ahref="#cb7-10"aria-hidden="true"tabindex="-1"></a><spanclass="co"> * Spaltenreihenfolge erzwungen; Sektoren ueber NAMEN statt Indizes</span></span>
<spanid="cb7-11"><ahref="#cb7-11"aria-hidden="true"tabindex="-1"></a><spanclass="co"> * Effizienzgrenze bis zur TATSAECHLICH erreichbaren Maximalrendite</span></span>
<spanid="cb7-12"><ahref="#cb7-12"aria-hidden="true"tabindex="-1"></a><spanclass="co"> (nicht etwa max(mu)*0.95 - das waere unter Restriktionen oft</span></span>
<spanid="cb7-13"><ahref="#cb7-13"aria-hidden="true"tabindex="-1"></a><spanclass="co"> unerreichbar und die Kurve wuerde stillschweigend vorzeitig abbrechen)</span></span>
<spanid="cb7-14"><ahref="#cb7-14"aria-hidden="true"tabindex="-1"></a><spanclass="co"> * Pruefung aller Restriktionen nach dem Loesen</span></span>
<spanid="cb7-15"><ahref="#cb7-15"aria-hidden="true"tabindex="-1"></a><spanclass="co"> * Vergleich mit Gleichgewichtung als Realitaetscheck</span></span>
<spanid="cb7-34"><ahref="#cb7-34"aria-hidden="true"tabindex="-1"></a><spanclass="co"># Sektoren ueber Namen definiert, nicht ueber Positionen</span></span>
<spanid="cb7-50"><ahref="#cb7-50"aria-hidden="true"tabindex="-1"></a><spanclass="co">"""Laedt Kurse und garantiert die Spaltenreihenfolge."""</span></span>
<spanid="cb7-51"><ahref="#cb7-51"aria-hidden="true"tabindex="-1"></a> ende <spanclass="op">=</span> pd.Timestamp.today().normalize()</span>
<spanid="cb7-52"><ahref="#cb7-52"aria-hidden="true"tabindex="-1"></a> start <spanclass="op">=</span> ende <spanclass="op">-</span> pd.DateOffset(years<spanclass="op">=</span><spanclass="dv">2</span>)</span>
<spanid="cb7-58"><ahref="#cb7-58"aria-hidden="true"tabindex="-1"></a> kurse <spanclass="op">=</span> roh[<spanclass="st">"Close"</span>][TICKER].dropna() <spanclass="co"># [TICKER] erzwingt die Reihenfolge</span></span>
<spanid="cb7-60"><ahref="#cb7-60"aria-hidden="true"tabindex="-1"></a> kurse <spanclass="op">=</span> roh[[<spanclass="st">"Close"</span>]].dropna()</span>
<spanid="cb7-71"><ahref="#cb7-71"aria-hidden="true"tabindex="-1"></a><spanclass="co">"""Uebersetzt Sektornamen einmalig in Positionsindizes - mit Pruefung."""</span></span>
<spanid="cb7-73"><ahref="#cb7-73"aria-hidden="true"tabindex="-1"></a><spanclass="cf">for</span> sektor, titel <spanclass="kw">in</span> SEKTOREN.items():</span>
<spanid="cb7-74"><ahref="#cb7-74"aria-hidden="true"tabindex="-1"></a> fehlend <spanclass="op">=</span> [t <spanclass="cf">for</span> t <spanclass="kw">in</span> titel <spanclass="cf">if</span> t <spanclass="kw">not</span><spanclass="kw">in</span> TICKER]</span>
<spanid="cb7-76"><ahref="#cb7-76"aria-hidden="true"tabindex="-1"></a><spanclass="cf">raise</span><spanclass="pp">ValueError</span>(<spanclass="ss">f"Sektor '</span><spanclass="sc">{</span>sektor<spanclass="sc">}</span><spanclass="ss">': Ticker </span><spanclass="sc">{</span>fehlend<spanclass="sc">}</span><spanclass="ss"> nicht im Universum."</span>)</span>
<spanid="cb7-77"><ahref="#cb7-77"aria-hidden="true"tabindex="-1"></a> ergebnis[sektor] <spanclass="op">=</span> [TICKER.index(t) <spanclass="cf">for</span> t <spanclass="kw">in</span> titel]</span>
<spanid="cb7-83"><ahref="#cb7-83"aria-hidden="true"tabindex="-1"></a><spanclass="co"> Standardrestriktionen. Bei der Korn-Transformation muessen ALLE Grenzen</span></span>
<spanid="cb7-84"><ahref="#cb7-84"aria-hidden="true"tabindex="-1"></a><spanclass="co"> mit kappa mitskaliert werden - dafuer dient der Parameter 'skala'.</span></span>
<spanid="cb7-101"><ahref="#cb7-101"aria-hidden="true"tabindex="-1"></a><spanclass="cf">raise</span><spanclass="pp">SystemExit</span>(<spanclass="ss">f"GMV nicht loesbar: </span><spanclass="sc">{</span>problem<spanclass="sc">.</span>status<spanclass="sc">}</span><spanclass="ss">"</span>)</span>
<spanid="cb7-106"><ahref="#cb7-106"aria-hidden="true"tabindex="-1"></a><spanclass="co">"""Maximum Sharpe Ratio ueber die Korn-Transformation."""</span></span>
<spanid="cb7-107"><ahref="#cb7-107"aria-hidden="true"tabindex="-1"></a> n <spanclass="op">=</span><spanclass="bu">len</span>(mu)</span>
<spanid="cb7-108"><ahref="#cb7-108"aria-hidden="true"tabindex="-1"></a> ueberrendite <spanclass="op">=</span> mu <spanclass="op">-</span> r_f</span>
<spanid="cb7-110"><ahref="#cb7-110"aria-hidden="true"tabindex="-1"></a><spanclass="cf">raise</span><spanclass="pp">SystemExit</span>(<spanclass="st">"Kein Titel schlaegt den risikofreien Zins - "</span></span>
<spanid="cb7-120"><ahref="#cb7-120"aria-hidden="true"tabindex="-1"></a><spanclass="cf">raise</span><spanclass="pp">SystemExit</span>(<spanclass="ss">f"Max-Sharpe nicht loesbar: </span><spanclass="sc">{</span>problem<spanclass="sc">.</span>status<spanclass="sc">}</span><spanclass="ss">"</span>)</span>
<spanid="cb7-126"><ahref="#cb7-126"aria-hidden="true"tabindex="-1"></a><spanclass="co"> Achtung: max(mu)*0.95 als obere Grenze der Frontier anzunehmen, ist unter</span></span>
<spanid="cb7-127"><ahref="#cb7-127"aria-hidden="true"tabindex="-1"></a><spanclass="co"> Positions- und Sektorgrenzen oft unerreichbar; die Kurve wuerde dann</span></span>
<spanid="cb7-128"><ahref="#cb7-128"aria-hidden="true"tabindex="-1"></a><spanclass="co"> stillschweigend abbrechen. Hier wird die tatsaechliche Obergrenze berechnet.</span></span>
<spanid="cb7-137"><ahref="#cb7-137"aria-hidden="true"tabindex="-1"></a><spanclass="co">"""Effizienzgrenze durch Variation der Mindestrendite."""</span></span>
<spanid="cb7-138"><ahref="#cb7-138"aria-hidden="true"tabindex="-1"></a> n <spanclass="op">=</span><spanclass="bu">len</span>(mu)</span>
<spanid="cb7-139"><ahref="#cb7-139"aria-hidden="true"tabindex="-1"></a> w <spanclass="op">=</span> cp.Variable(n)</span>
<spanid="cb7-143"><ahref="#cb7-143"aria-hidden="true"tabindex="-1"></a> [cp.<spanclass="bu">sum</span>(w) <spanclass="op">==</span><spanclass="dv">1</span>, mu <spanclass="op">@</span> w <spanclass="op">>=</span> ziel_rendite] <spanclass="op">+</span> basis_restriktionen(w))</span>
<spanid="cb7-155"><ahref="#cb7-155"aria-hidden="true"tabindex="-1"></a><spanclass="bu">print</span>(<spanclass="ss">f" Hinweis: </span><spanclass="sc">{</span>uebersprungen<spanclass="sc">}</span><spanclass="ss"> Zielrenditen waren nicht erreichbar."</span>)</span>
<spanid="cb7-160"><ahref="#cb7-160"aria-hidden="true"tabindex="-1"></a><spanclass="co">"""Nach dem Loesen: haelt die Loesung wirklich alle Regeln ein?"""</span></span>
<spanid="cb7-188"><ahref="#cb7-188"aria-hidden="true"tabindex="-1"></a><spanclass="bu">print</span>(<spanclass="st">" ERGEBNISSE DER MEAN-VARIANCE-OPTIMIERUNG"</span>)</span>
<spanid="cb7-203"><ahref="#cb7-203"aria-hidden="true"tabindex="-1"></a><spanclass="co"># --- Gewichte je Titel ------------------------------------------------</span></span>
<spanid="cb7-205"><ahref="#cb7-205"aria-hidden="true"tabindex="-1"></a> sektor_je_titel <spanclass="op">=</span> {t: s <spanclass="cf">for</span> s, titel <spanclass="kw">in</span> SEKTOREN.items() <spanclass="cf">for</span> t <spanclass="kw">in</span> titel}</span>
<spanid="cb7-226"><ahref="#cb7-226"aria-hidden="true"tabindex="-1"></a><spanclass="bu">print</span>(<spanclass="ss">f"</span><spanclass="ch">\n</span><spanclass="ss">Effizienzgrenze von </span><spanclass="sc">{</span>ret_gmv<spanclass="op">*</span><spanclass="dv">100</span><spanclass="sc">:.2f}</span><spanclass="ss"> % bis </span><spanclass="sc">{</span>ret_max<spanclass="op">*</span><spanclass="dv">100</span><spanclass="sc">:.2f}</span><spanclass="ss"> % "</span></span>
<spanid="cb7-244"><ahref="#cb7-244"aria-hidden="true"tabindex="-1"></a><spanclass="co"># Kapitalmarktlinie durch den risikofreien Zins und das Tangentialportfolio</span></span>
<spanid="cb7-250"><ahref="#cb7-250"aria-hidden="true"tabindex="-1"></a><spanclass="cf">for</span> i, t <spanclass="kw">in</span><spanclass="bu">enumerate</span>(TICKER):</span>
<spanid="cb7-254"><ahref="#cb7-254"aria-hidden="true"tabindex="-1"></a> plt.title(<spanclass="st">"Markowitz-Effizienzgrenze mit Sektor- und Positionsgrenzen"</span>, fontsize<spanclass="op">=</span><spanclass="dv">12</span>)</span>
<spanid="cb7-260"><ahref="#cb7-260"aria-hidden="true"tabindex="-1"></a> ziel <spanclass="op">=</span> os.path.join(OUTPUT_DIR, <spanclass="st">"markowitz_efficient_frontier.png"</span>)</span>
<spanid="cb7-262"><ahref="#cb7-262"aria-hidden="true"tabindex="-1"></a><spanclass="bu">print</span>(<spanclass="ss">f"</span><spanclass="ch">\n</span><spanclass="ss">Diagramm gespeichert unter '</span><spanclass="sc">{</span>ziel<spanclass="sc">}</span><spanclass="ss">'"</span>)</span>
<p><strong>Zur letzten Zeile:</strong> Unter der 20-%-Positionsgrenze kann kein Portfolio die Rendite des besten Einzeltitels erreichen — man muss mindestens fünf Titel halten. Würde man die Obergrenze der Effizienzgrenze dennoch bei <spanclass="math inline">0{,}95 \cdot \max(\mu)</span> ansetzen, würden die unerreichbaren Zielrenditen vom <code>if status == "optimal"</code><strong>stillschweigend übersprungen</strong> — die gezeichnete Kurve bräche dadurch früher ab, ohne dass es auffiele.</p>
</blockquote>
<blockquote>
<p><strong>⚠️ Zur Reproduzierbarkeit</strong> Dieses Programm lädt Live-Daten. <strong>Ihre Zahlen werden abweichen.</strong> Prüfen Sie stattdessen die <strong>Struktur</strong> des Ergebnisses: Hält die Sektorgrenze? Summieren sich die Gewichte auf 100 %? Liegt die Sharpe Ratio des Max-Sharpe-Portfolios über der des GMV? Genau dafür sind die <code>assert</code>-Prüfungen da.</p>
</blockquote>
<blockquote>
<p><strong>🎯 Der Realitätscheck: Gleichgewichtung</strong> Das Programm vergleicht immer mit dem <strong>1/N-Portfolio</strong>. Das ist kein Scherz: DeMiguel, Garlappi und Uppal zeigten 2009 in einer viel beachteten Studie, dass die naive Gleichgewichtung viele optimierte Strategien out of sample schlägt — weil sie keinerlei Schätzung benötigt und damit auch keinen Schätzfehler enthält. <strong>Wenn Ihre Optimierung 1/N nicht schlägt, ist sie ihren Aufwand nicht wert.</strong> Diese Messlatte sollte in jedem Portfolioprojekt stehen.</p>
<p><strong>Aufgabe 19.1 ⭐ — Diversifikationseffekt rechnen.</strong> Zwei Titel: <spanclass="math inline">\mu_1 = 10\,\%</span>, <spanclass="math inline">\sigma_1 = 25\,\%</span>; <spanclass="math inline">\mu_2 = 6\,\%</span>, <spanclass="math inline">\sigma_2 = 12\,\%</span>; <spanclass="math inline">\rho = -0{,}2</span>. Berechnen Sie Rendite und Volatilität für die Gewichtungen <spanclass="math inline">(1;0)</span>, <spanclass="math inline">(0{,}5;0{,}5)</span>, <spanclass="math inline">(0{,}3;0{,}7)</span> und <spanclass="math inline">(0;1)</span>. Welche Kombination hat die beste Sharpe Ratio bei <spanclass="math inline">r_f = 2\,\%</span>?</p>
<p><strong>Aufgabe 19.2 ⭐ — Lambda deuten.</strong> Was passiert mit dem optimalen Portfolio, wenn <spanclass="math inline">\lambda</span> von 0 auf <spanclass="math inline">\infty</span> steigt? Skizzieren Sie den Weg auf der Effizienzgrenze.</p>
<p><strong>Aufgabe 19.3 ⭐⭐ — Korn-Transformation nachvollziehen.</strong> Zeigen Sie rechnerisch, dass die Sharpe Ratio invariant gegenüber positiver Skalierung ist: <spanclass="math inline">\text{SR}(c\,\mathbf{w}) = \text{SR}(\mathbf{w})</span> für <spanclass="math inline">c > 0</span>. Warum gilt das <strong>nicht</strong>, wenn die Nebenbedingung <spanclass="math inline">\sum w_i = 1</span> mitgeführt wird — und wie löst die Transformation dieses Problem?</p>
<p><strong>Aufgabe 19.4 ⭐⭐ — Restriktionen kosten Rendite.</strong> Lassen Sie <code>Markowitz_CVXPY.py</code> mit <code>MAX_GEWICHT</code> von 1,0 (keine Grenze) bis 0,10 in Schritten von 0,05 laufen. Tabellieren Sie Sharpe Ratio und maximal erreichbare Rendite. (a) Was kostet die 20-%-Grenze an Sharpe Ratio? (b) Ab welcher Grenze wird das Problem unlösbar? Warum?</p>
<p><strong>Aufgabe 19.5 ⭐⭐ — Den Sektorfehler nachstellen.</strong> Bauen Sie den Fehler bewusst nach: Verwenden Sie <code>tech_indices = [0,1,2,3]</code> auf den alphabetisch sortierten Spalten. Vergleichen Sie das Ergebnis mit der korrekten Version. (a) Welche Titel werden tatsächlich beschränkt? (b) Wie stark unterscheiden sich die Portfoliogewichte? (c) Fällt der Fehler in den ausgegebenen Kennzahlen auf?</p>
<p><strong>Aufgabe 19.6 ⭐⭐⭐ — Kardinalität ergänzen.</strong> Erweitern Sie das Modell um „höchstens <spanclass="math inline">K = 5</span> Titel“ mit Binärvariablen. CVXPY braucht dafür <code>cp.Variable(n, boolean=True)</code> und einen MIQP-fähigen Solver (z. B. <code>SCIP</code> über <code>cp.SCIP</code> oder <code>ECOS_BB</code>). Vergleichen Sie Sharpe Ratio und Rechenzeit mit dem unbeschränkten Fall.</p>
<p><strong>Aufgabe 19.7 ⭐⭐⭐ — Out-of-Sample-Test.</strong> Teilen Sie die Historie in zwei Hälften. Optimieren Sie auf der ersten, bewerten Sie auf der zweiten. Vergleichen Sie GMV, Max Sharpe und 1/N. (a) Welches Portfolio gewinnt out of sample? (b) Wie ändert sich das Bild mit Ledoit-Wolf gegenüber der Stichprobenkovarianz? (c) Welche Schlussfolgerung ziehen Sie für die Praxis?</p>
<hr/>
<h2id="sec:markowitz-denkfehler">19.8 Finde den Denkfehler</h2>
<p><ahref="finanzdaten.html#kap-finanzdaten">Kapitel 18</a> hat gezeigt, was eine schlecht geschätzte <strong>Kovarianzmatrix</strong> anrichtet. Bei den erwarteten <strong>Renditen</strong> ist es schlimmer — und weil sie in der Zielfunktion stehen statt in der Nebenbedingung, fällt es schwerer auf.</p>
<p>Ein Analyst optimiert ein Portfolio aus zwölf Anlagen. Erwartete Renditen und Kovarianzen schätzt er aus einem Jahr Tagesdaten — 250 Beobachtungen, in der Praxis durchaus üblich.</p>
<p>Zur Kontrolle bauen wir das Experiment so, dass die richtige Antwort <strong>feststeht</strong>: Alle zwölf Anlagen haben in Wahrheit exakt dieselbe Rendite (0,0400 % täglich) und dieselbe Schwankung, und sie sind unabhängig. Ein korrektes Verfahren müsste also gleichgewichten.</p>
<p>Der Optimierer legt stattdessen im Mittel <strong>38 %</strong> in eine einzige Anlage — und meldet für das Portfolio eine Tagesrendite von <strong>0,1261 %</strong>, mehr als das Dreifache dessen, was überhaupt erzielbar ist.</p>
<p><strong>Ihre Aufgabe:</strong> (a) Woher kommt die Spanne von 0,24 Prozentpunkten zwischen der höchsten und der niedrigsten geschätzten Rendite, wenn doch alle Anlagen identisch sind? (b) Rechnen Sie nach, wie viele Beobachtungen nötig wären, um eine Rendite von 0,04 % bei 1,2 % Tagesschwankung überhaupt von null zu unterscheiden. (c) Warum wirkt sich derselbe Schätzfehler bei Renditen stärker aus als bei Kovarianzen? (d) Nennen Sie drei Gegenmittel — und begründen Sie, warum das erste davon das wirksamste ist.</p>
<spanid="cb8-5"><ahref="#cb8-5"aria-hidden="true"tabindex="-1"></a><spanclass="co">Kapitel Markowitz: Warum geschaetzte Renditen noch gefaehrlicher sind als geschaetzte</span></span>
<spanid="cb8-8"><ahref="#cb8-8"aria-hidden="true"tabindex="-1"></a><spanclass="co">Das Kapitel Finanzdaten hat gezeigt, was eine schlecht geschaetzte Kovarianzmatrix</span></span>
<spanid="cb8-9"><ahref="#cb8-9"aria-hidden="true"tabindex="-1"></a><spanclass="co">anrichtet. Bei den erwarteten RENDITEN ist es schlimmer - aus einem einfachen</span></span>
<spanid="cb8-10"><ahref="#cb8-10"aria-hidden="true"tabindex="-1"></a><spanclass="co">statistischen Grund: Um eine Rendite von 0,04 % pro Tag von null zu</span></span>
<spanid="cb8-11"><ahref="#cb8-11"aria-hidden="true"tabindex="-1"></a><spanclass="co">unterscheiden, braucht man bei 1,2 % Tagesschwankung ueber tausend</span></span>
<spanid="cb8-12"><ahref="#cb8-12"aria-hidden="true"tabindex="-1"></a><spanclass="co">Beobachtungen. Kovarianzen konvergieren dagegen deutlich schneller.</span></span>
<spanid="cb8-14"><ahref="#cb8-14"aria-hidden="true"tabindex="-1"></a><spanclass="co">Das Experiment ist bewusst so gebaut, dass die Antwort feststeht: ALLE zwoelf</span></span>
<spanid="cb8-15"><ahref="#cb8-15"aria-hidden="true"tabindex="-1"></a><spanclass="co">Anlagen haben exakt dieselbe wahre Rendite und dieselbe Schwankung. Ein</span></span>
<spanid="cb8-16"><ahref="#cb8-16"aria-hidden="true"tabindex="-1"></a><spanclass="co">korrektes Ergebnis waere also Gleichgewichtung. Was der Optimierer stattdessen</span></span>
<spanid="cb8-17"><ahref="#cb8-17"aria-hidden="true"tabindex="-1"></a><spanclass="co">tut, zeigt der Lauf.</span></span>
<spanid="cb8-19"><ahref="#cb8-19"aria-hidden="true"tabindex="-1"></a><spanclass="co">Wiederholt wird 200 mal, damit das Ergebnis nicht von einer Zufallsstichprobe</span></span>
<spanid="cb8-31"><ahref="#cb8-31"aria-hidden="true"tabindex="-1"></a>BEOBACHTUNGEN <spanclass="op">=</span><spanclass="dv">250</span><spanclass="co"># ein Jahr Tagesdaten</span></span>
<spanid="cb8-32"><ahref="#cb8-32"aria-hidden="true"tabindex="-1"></a>BEOBACHTUNGEN_SPAETER <spanclass="op">=</span><spanclass="dv">2000</span><spanclass="co"># der "spaetere Verlauf"</span></span>
<spanid="cb8-35"><ahref="#cb8-35"aria-hidden="true"tabindex="-1"></a><spanclass="co"># Die Wahrheit, die der Optimierer nicht kennt: alle Anlagen sind gleich.</span></span>
<spanid="cb8-36"><ahref="#cb8-36"aria-hidden="true"tabindex="-1"></a>WAHRE_RENDITE <spanclass="op">=</span><spanclass="fl">0.0004</span><spanclass="co"># 0,04 % pro Tag</span></span>
<spanid="cb8-37"><ahref="#cb8-37"aria-hidden="true"tabindex="-1"></a>WAHRE_SCHWANKUNG <spanclass="op">=</span><spanclass="fl">0.012</span><spanclass="co"># 1,2 % pro Tag</span></span>
<spanid="cb8-44"><ahref="#cb8-44"aria-hidden="true"tabindex="-1"></a><spanclass="co">"""Baut das Markowitz-Problem EINMAL mit Parametern.</span></span>
<spanid="cb8-46"><ahref="#cb8-46"aria-hidden="true"tabindex="-1"></a><spanclass="co"> Bei 200 Wiederholungen ist das der Unterschied zwischen Sekunden und</span></span>
<spanid="cb8-47"><ahref="#cb8-47"aria-hidden="true"tabindex="-1"></a><spanclass="co"> Minuten: cp.Parameter erlaubt es, nur die Daten zu tauschen, statt den</span></span>
<spanid="cb8-48"><ahref="#cb8-48"aria-hidden="true"tabindex="-1"></a><spanclass="co"> Ausdrucksbaum jedes Mal neu zu kompilieren (siehe Kapitel Oekosystem).</span></span>
<spanid="cb8-61"><ahref="#cb8-61"aria-hidden="true"tabindex="-1"></a><spanclass="co">"""Renditen, bei denen alle Anlagen identisch verteilt und unabhaengig sind."""</span></span>
<spanid="cb8-80"><ahref="#cb8-80"aria-hidden="true"tabindex="-1"></a><spanclass="co"># Symmetrisieren und minimal anheben: numerisches Rauschen kann die</span></span>
<spanid="cb8-81"><ahref="#cb8-81"aria-hidden="true"tabindex="-1"></a><spanclass="co"># Matrix sonst knapp unter die PSD-Grenze druecken (Kapitel Fundament).</span></span>
<spanid="cb8-97"><ahref="#cb8-97"aria-hidden="true"tabindex="-1"></a><spanclass="bu">print</span>(<spanclass="st">" WENN DER OPTIMIERER GESCHAETZTE RENDITEN GLAUBT"</span>)</span>
<spanid="cb8-100"><ahref="#cb8-100"aria-hidden="true"tabindex="-1"></a><spanclass="ss">f"je </span><spanclass="sc">{</span>BEOBACHTUNGEN<spanclass="sc">}</span><spanclass="ss"> Beobachtungen zur Schaetzung."</span>)</span>
<spanid="cb8-101"><ahref="#cb8-101"aria-hidden="true"tabindex="-1"></a><spanclass="bu">print</span>(<spanclass="ss">f"In Wahrheit haben ALLE dieselbe Tagesrendite von "</span></span>
<spanid="cb8-102"><ahref="#cb8-102"aria-hidden="true"tabindex="-1"></a><spanclass="ss">f"</span><spanclass="sc">{</span>WAHRE_RENDITE <spanclass="op">*</span><spanclass="dv">100</span><spanclass="sc">:.4f}</span><spanclass="ss"> % und dieselbe Schwankung."</span>)</span>
<spanid="cb8-107"><ahref="#cb8-107"aria-hidden="true"tabindex="-1"></a><spanclass="bu">print</span>(<spanclass="ss">f" -> Das ist das </span><spanclass="sc">{</span>prozent(schaetzspanne) <spanclass="op">/</span> (WAHRE_RENDITE <spanclass="op">*</span><spanclass="dv">100</span>)<spanclass="sc">:.1f}</span><spanclass="ss">-Fache "</span></span>
<spanid="cb8-108"><ahref="#cb8-108"aria-hidden="true"tabindex="-1"></a><spanclass="ss">f"des wahren Werts. Aus reinem Rauschen."</span>)</span>
<spanid="cb8-116"><ahref="#cb8-116"aria-hidden="true"tabindex="-1"></a><spanclass="bu">print</span>(<spanclass="ss">f"</span><spanclass="sc">{</span><spanclass="st">'Optimierer IM Schaetzzeitraum'</span><spanclass="sc">:<38}</span><spanclass="ss"></span><spanclass="sc">{</span>prozent(im_zeitraum)<spanclass="sc">:>13.4f}</span><spanclass="ss"> %"</span></span>
<spanid="cb8-124"><ahref="#cb8-124"aria-hidden="true"tabindex="-1"></a><spanclass="bu">print</span>(<spanclass="ss">f"</span><spanclass="ch">\n</span><spanclass="ss">Im Schaetzzeitraum verspricht der Optimierer das "</span></span>
<spanid="cb8-125"><ahref="#cb8-125"aria-hidden="true"tabindex="-1"></a><spanclass="ss">f"</span><spanclass="sc">{</span>faktor<spanclass="sc">:.1f}</span><spanclass="ss">-Fache der wahren Rendite."</span>)</span>
<spanid="cb8-126"><ahref="#cb8-126"aria-hidden="true"tabindex="-1"></a><spanclass="bu">print</span>(<spanclass="ss">f"Ausserhalb bleibt davon nichts: Er liegt </span><spanclass="sc">{</span><spanclass="bu">abs</span>(vorsprung)<spanclass="sc">:.4f}</span><spanclass="ss">"</span></span>
<spanid="cb8-130"><ahref="#cb8-130"aria-hidden="true"tabindex="-1"></a><spanclass="bu">print</span>(<spanclass="st">"Der Grund ist statistisch, nicht finanzwirtschaftlich: Um eine"</span>)</span>
<spanid="cb8-131"><ahref="#cb8-131"aria-hidden="true"tabindex="-1"></a><spanclass="bu">print</span>(<spanclass="ss">f"Rendite von </span><spanclass="sc">{</span>WAHRE_RENDITE<spanclass="op">*</span><spanclass="dv">100</span><spanclass="sc">:.2f}</span><spanclass="ss"> % taeglich von null zu unterscheiden,"</span>)</span>
<spanid="cb8-132"><ahref="#cb8-132"aria-hidden="true"tabindex="-1"></a><spanclass="bu">print</span>(<spanclass="ss">f"braucht man bei </span><spanclass="sc">{</span>WAHRE_SCHWANKUNG<spanclass="op">*</span><spanclass="dv">100</span><spanclass="sc">:.1f}</span><spanclass="ss"> % Schwankung ueber tausend"</span>)</span>
<spanid="cb8-133"><ahref="#cb8-133"aria-hidden="true"tabindex="-1"></a><spanclass="bu">print</span>(<spanclass="st">"Beobachtungen. Mit 250 misst man ueberwiegend Rauschen - und der"</span>)</span>
<spanid="cb8-134"><ahref="#cb8-134"aria-hidden="true"tabindex="-1"></a><spanclass="bu">print</span>(<spanclass="st">"Optimierer nimmt jedes Rauschen fuer bare Muenze."</span>)</span>
<spanid="cb8-137"><ahref="#cb8-137"aria-hidden="true"tabindex="-1"></a><spanclass="bu">print</span>(<spanclass="st">" 1. Verzichten Sie auf Renditeschaetzungen, wo es geht. Das"</span>)</span>
<spanid="cb8-138"><ahref="#cb8-138"aria-hidden="true"tabindex="-1"></a><spanclass="bu">print</span>(<spanclass="st">" Minimum-Varianz-Portfolio braucht gar keine."</span>)</span>
<spanid="cb8-139"><ahref="#cb8-139"aria-hidden="true"tabindex="-1"></a><spanclass="bu">print</span>(<spanclass="st">" 2. Wenn Sie welche brauchen: schrumpfen Sie sie stark zur Mitte"</span>)</span>
<spanid="cb8-140"><ahref="#cb8-140"aria-hidden="true"tabindex="-1"></a><spanclass="bu">print</span>(<spanclass="st">" (James-Stein, Black-Litterman) - viel staerker als Kovarianzen."</span>)</span>
<spanid="cb8-141"><ahref="#cb8-141"aria-hidden="true"tabindex="-1"></a><spanclass="bu">print</span>(<spanclass="st">" 3. Begrenzen Sie Einzelgewichte. Was der Optimierer nicht darf,"</span>)</span>
<spanid="cb8-142"><ahref="#cb8-142"aria-hidden="true"tabindex="-1"></a><spanclass="bu">print</span>(<spanclass="st">" kann er auch nicht auf Rauschen setzen."</span>)</span>
<p><strong>🎯 Merksatz</strong> Die Effizienzlinie aus dem Kapitelanfang ist mathematisch tadellos — und praktisch nur so viel wert wie die Renditen, die man hineinsteckt. Das <strong>Minimum-Varianz-Portfolio</strong> ist deshalb in der Praxis oft die bessere Wahl als das Maximum-Sharpe-Portfolio: Es braucht überhaupt keine Renditeschätzung, sondern nur die Kovarianzmatrix — und die lässt sich ungleich zuverlässiger schätzen.</p>
<p>Genau eine Antwort ist jeweils richtig. Auflösung in <ahref="anhang-loesungen.html#quiz-loesung-markowitz">Anhang A</a>.</p>
<p><strong>1. Auf der Effizienzlinie liegt das Portfolio mit der höchsten Rendite. Warum ist es trotzdem selten die richtige Wahl?</strong> (a) Weil es rechnerisch instabil ist. (b) Weil es das schlechteste Verhältnis von Rendite zu Risiko hat und zwangsläufig vollständig in die renditestärkste Einzelanlage geht — also gar nicht mehr diversifiziert ist. (c) Weil CVXPY dort keine Lösung mehr findet.</p>
<p><strong>2. Warum ist das Minimum-Varianz-Portfolio in der Praxis oft robuster als das Maximum-Sharpe-Portfolio?</strong> (a) Weil es weniger Nebenbedingungen hat. (b) Weil es <strong>ohne Renditeschätzung</strong> auskommt. Renditen sind die mit Abstand am unzuverlässigsten geschätzte Eingangsgröße; wer sie nicht braucht, umgeht das Problem. (c) Weil es immer die höhere Rendite erzielt.</p>
<p><strong>3. Ihr optimiertes Portfolio legt 44 % in einen einzigen von zwölf Titeln. Was ist Ihre erste Vermutung?</strong> (a) Dieser Titel ist tatsächlich deutlich besser als die anderen. (b) Der Optimierer folgt einem Schätzfehler in den erwarteten Renditen. Prüfen Sie, wie stark die Gewichte auf kleine Datenänderungen reagieren, und begrenzen Sie Einzelpositionen. (c) Die Kovarianzmatrix ist falsch skaliert.</p>
<li><strong>Diversifikation ist das einzige Gratis-Mittagessen:</strong> Risiko sinkt, Rendite bleibt. Aber: In Krisen steigen Korrelationen, genau wenn man die Streuung braucht.</li>
<li><strong><spanclass="math inline">\lambda</span> steuert zwischen GMV und Renditemaximierung.</strong> Das GMV benötigt keine Renditeprognose und ist deshalb robuster.</li>
<li><strong>Die Korn-Transformation</strong> macht aus der nicht-konvexen Sharpe-Maximierung ein QP — alle Nebenbedingungen müssen dabei mit <spanclass="math inline">\kappa</span> mitskaliert werden.</li>
<li><strong>Sektoren immer über Namen definieren</strong>, nie über Positionsindizes.</li>
<li><strong>Die Obergrenze der Effizienzgrenze muss berechnet werden</strong>, nicht geraten — sonst bricht die Kurve stillschweigend ab.</li>
<li><strong>Vergleichen Sie immer mit 1/N.</strong> Wer die naive Gleichgewichtung nicht schlägt, hat Schätzrauschen optimiert.</li>
<li><strong>Renditeschätzungen sind die schwächste Stelle des ganzen Modells.</strong> Der Standardfehler einer Renditeschätzung aus einem Jahr Tagesdaten ist rund doppelt so groß wie der geschätzte Wert selbst; für eine belastbare Schätzung bräuchte man über ein Jahrzehnt. Deshalb ist „keine Renditeschätzung brauchen“ (GMV) wirksamer als jede Verbesserung der Schätzung.</li>
<li><strong>Die Effizienzlinie ist eine Speisekarte, keine Empfehlung.</strong> Welcher Punkt richtig ist, entscheidet die Risikotragfähigkeit — eine unternehmerische, keine mathematische Frage.</li>
</ul>
<p><strong>Ausblick.</strong><ahref="cvar.html#kap-cvar">Kapitel 20</a> ersetzt die Varianz durch ein Risikomaß, das die tatsächlichen Verlustränder erfasst — und fügt Transaktionskosten hinzu.</p>