RSJ Portfolio Portfolio Optimization

← Alle Beiträge

2026-10-06

Optimizer-Zuteilungsgewichte und Risk-Model-Output lesen

Optimizer-Zuteilungsgewichte und Risk-Model-Output lesen
portfolio optimization modern portfolio theory portfolio correlation portfolio optimization hierachical risk parity minimize volatility minimize semivariance maximize sharpe

So lesen Sie Optimizer-Zuteilungsgewichte und die Ausgabe des Risikomodells

Sie haben den Optimizer in RSJ Portfolio ausgeführt. Er ist konvergiert, und jetzt liegt eine Tabelle vor Ihnen: ein Zuteilungsgewicht pro Kandidat, eine Risikokennzahl für das Portfolio und eine Handvoll Modelldiagnostiken. Nichts in dieser Tabelle besagt „dies ist ein gutes Portfolio" – das müssen Sie selbst herauslesen.

In diesem Leitfaden geht es genau darum: einen abgeschlossenen Optimierungslauf in eine Interpretation zu verwandeln, die Sie verteidigen können. Am Ende werden Sie in der Lage sein, die Gewichtsspalte vor dem Hintergrund des von Ihnen gewählten Ziels zu lesen, die Ausgabe des Risikomodells zu entschlüsseln (Volatilität, Semivarianz, CVaR und die Risikobeiträge pro Asset) und eine kurze Verifikations-Checkliste durchzugehen, bevor Sie auf das Ergebnis reagieren.

Dieser Artikel setzt voraus, dass Sie bereits ein Ergebnis haben. Wenn Sie noch Kurse einlesen müssen, beginnen Sie mit How to Import End-of-Day Stock Prices Into a Portfolio Optimizer. Wenn Sie noch entscheiden, welches Ziel Sie ausführen möchten, lesen Sie Minimum Semivariance vs Minimum Volatility: Which Objective?.

Voraussetzungen: Was Sie zur Hand haben sollten, bevor Sie irgendetwas interpretieren

  • Einen abgeschlossenen Optimierungslauf in RSJ Portfolio, mit einer Kandidatenliste und einem ausgewählten Ziel (Minimum Volatility, Maximum Sharpe Ratio, Minimum Semi-Variance, Hierarchical Risk Parity oder Minimum CVaR).
  • Wissen darüber, welches Risikomodell und welches Renditemodell Sie verwendet haben. Die Ausgabekennzahlen werden von diesem Modell erzeugt. Eine Semivarianz-Kennzahl so zu lesen, als wäre sie eine Standardabweichung, ist die häufigste Fehlinterpretation.
  • Ein mentales Modell der Gewichte. Long-only-Gewichte sind nicht negativ und summieren sich zu 1 (100 %). Alles andere bedeutet eine Einschränkung oder ein Ziel, das Sie nicht beabsichtigt haben.
  • Zugriff auf die Empfehlungsansicht, in der der Optimizer die resultierende Zuteilung zusammen mit den geschätzten Risikokennzahlen anzeigt.

Bevor Sie mit dem Lesen der Ausgabe beginnen, schreiben Sie die Laufparameter auf. Ihr zukünftiges Ich wird sich nicht daran erinnern:

# run-notes.yaml - fill this in from the optimizer configuration
run: 2026-10-06-watchlist-a
objective: minimum-volatility
risk_model: sample-covariance
return_model: none
constraints:
  long_only: true
  max_weight_per_asset: 0.10
data:
  provider: <your configured provider>
  start: 2019-01-01
  end: 2026-09-30

Schritt 1: Die Zuteilungsgewichte und die Risikokennzahlen lokalisieren

Nach Abschluss des Laufs öffnen Sie die Empfehlungsansicht. Sie erhalten zwei Dinge nebeneinander, und genau darum geht es:

  • Die Zuteilungstabelle – eine Zeile pro Kandidat mit seinem Gewicht, normalerweise nach Größe sortiert, sodass die größten Positionen oben stehen.
  • Der Risiko-Ausgabeblock – die Risikokennzahl auf Portfolioebene für das von Ihnen gewählte Ziel (Volatilität, Semivarianz, CVaR), plus die Risikobeiträge pro Asset und, je nach Lauf, die Korrelationsinformationen, auf denen die Zuteilung aufgebaut wurde.

Zwei Dinge, die es sich hier zu verinnerlichen lohnt:

  1. Gewichte sind die Entscheidung; Risikokennzahlen sind die Prüfspur. Ein Gewicht sagt Ihnen, was der Optimizer getan hat. Eine Risikokennzahl sagt Ihnen, wie viel diese Entscheidung Sie voraussichtlich kosten wird.
  2. Die Ausgabe ist modellabhängig, nicht absolut. Führen Sie dieselbe Kandidatenliste mit einem anderen Risikoschätzer aus, und die Gewichte werden sich verschieben. Das ist zu erwarten, kein Fehler.

Der mühsame Weg, dieselbe Tabelle zu erhalten, besteht darin, die Kurse selbst abzurufen und ein eingeschränktes quadratisches Programm in NumPy von Hand zu schreiben und dann Ihre eigene Berichterstattung über Risikobeiträge darauf aufzusetzen. RSJ Portfolio erzeugt sowohl die Zuteilung als auch die Risikoausgabe aus einem einzigen Lauf.

Schritt 2: Die Gewichte im Kontext Ihres Ziels interpretieren

Ein Gewicht ist keine Prognose. Es ist der Kapitalanteil, den der Optimizer zugewiesen hat, um die Zielfunktion zu verbessern. Dieser eine Satz löst die meisten Verwirrungen auf.

  • Minimum Volatility: Erwarten Sie, dass sich das Kapital auf Kandidaten verteilt, deren Renditen schwach miteinander korrelieren – oder deren Abwärtsseite schwach korreliert. Assets mit niedriger Korrelation sind es, die die geschätzte Volatilität des Portfolios senken, also erhalten sie Gewicht, selbst wenn ihre individuelle Volatilität unspektakulär ist.
  • Maximum Sharpe Ratio: Die Gewichte hängen nun auch von einem Renditemodell ab. Ein großes Gewicht kann „gute risikoadjustierte Renditeschätzung" bedeuten, nicht „niedriges Risiko".
  • Hierarchical Risk Parity: Die Gewichte folgen der Cluster-Struktur der Korrelationsmatrix statt einer einzigen globalen Optimierung, daher tendiert die Verteilung dazu, gleichmäßiger gestreut zu wirken.
  • Konzentrationsprüfung: Wenn drei Positionen 70 % des Kapitals halten, fragen Sie sich, ob das echte Diversifikationsgrenzen widerspiegelt oder eine bindende Einschränkung. Der Optimizer konzentriert selten ohne Grund.

Verifizieren Sie dann, dass die Einschränkungen tatsächlich eingehalten wurden. Dies ist eine Fünf-Zeilen-Prüfung des exportierten Ergebnisses:

import csv

with open("rsj-portfolio-weights.csv", newline="") as f:
    rows = list(csv.DictReader(f))  # adjust column names to your export

total = sum(float(r["weight"]) for r in rows)
MAX_WEIGHT = 0.10  # the cap you configured

print(f"positions: {len(rows)}")
print(f"sum of weights: {total:.6f}")

breaches = [r["symbol"] for r in rows if float(r["weight"]) > MAX_WEIGHT + 1e-6]
print("constraint breaches:", breaches or "none")

Wenn die Summe 1,0 ist und es keine Verstöße gibt, sind die Gewichte intern konsistent. Jetzt können Sie sie interpretieren.

Schritt 3: Die Ausgabe des Risikomodells lesen: Volatilität, Semivarianz, CVaR

Die Risikokennzahl am unteren Rand der Empfehlungsansicht ist das geschätzte Risiko des gesamten Portfolios unter dem von Ihnen gewählten Modell – nicht die Summe der Risiken der einzelnen Assets. Diese Lücke zwischen den beiden ist der Effekt, für den Sie bezahlen.

  • Volatilität (Standardabweichung). Gesamtrisiko, Aufwärts- und Abwärtsbewegungen werden gleich behandelt. Niedriger bedeutet weniger volatil. Wenn Sie auf Minimum Volatility optimiert haben, ist dies die Kennzahl, die Sie mit alternativen Läufen vergleichen sollten.
  • Semivarianz. Nur Abweichungen unterhalb eines Ziels zählen. Wenn Sie Minimum Semi-Variance gewählt haben, ist dies Ihr Zielwert; eine Volatilitätskennzahl wäre hier eine Nebenmetrik.
  • CVaR (Conditional Value at Risk). Schätzt den durchschnittlichen Verlust im Tail jenseits eines gewählten Konfidenzniveaus. Es beantwortet „wie schlimm ist ein schlechter Tag", nicht „wie holprig ist die Fahrt". Verwenden Sie es, wenn Sie auf Minimum CVaR optimiert haben.
  • Risikobeitrag pro Asset. Der Anteil am Gesamtrisiko des Portfolios, der auf jede Position entfällt. Dies ist der Teil, den die meisten überspringen, und er ist oft der informativste.

Gewichte und Risikobeiträge sind nicht dieselbe Größe. Eine 10-%-Position in einem hochvolatilen, schwach korrelierten Asset kann mehr als 30 % des Portfoliorisikos beitragen. Rekonstruieren Sie die Aufteilung aus dem Export:

import numpy as np
import pandas as pd

w = pd.read_csv("weights.csv", index_col="symbol")["weight"]
cov = pd.read_csv("covariance.csv", index_col=0)  # model output, same ordering

wv = w.to_numpy()
port_var = wv @ cov.to_numpy() @ wv
port_vol = np.sqrt(port_var)

marginal = cov.to_numpy() @ wv / port_vol
contrib = wv * marginal / port_vol          # sums to 1
print(pd.Series(contrib, index=w.index).sort_values(ascending=False).round(4))

Wenn eine Zeile diese Ausgabe dominiert, während ihr Gewicht bescheiden ist, haben Sie den tatsächlichen Risikotreiber Ihres Portfolios gefunden.

Schritt 4: Das Ergebnis anhand von Korrelation und Risiko auf Asset-Ebene validieren

Das Kernversprechen des Produkts ist statistisch: Durch die Zuteilung auf Kandidaten, die schwach korrelieren – oder deren Abwärtsseite schwach korreliert – ist das resultierende Portfolio weniger volatil als seine Bestandteile. Die Ausgabe sollte das belegen. Prüfen Sie es auf drei Weisen.

  1. Diversifikationsnutzen. Vergleichen Sie die Portfoliorisikokennzahl mit dem gewichteten Durchschnitt der Risikokennzahlen der einzelnen Assets. Das Portfolio sollte niedriger liegen. Wenn nicht, haben Sie einen Korb zusammengestellt, der sich wie ein einzelnes Asset verhält.
  2. Korrelationsstruktur. Prüfen Sie die Korrelationsmatrix für die ausgewählten Assets. Sie möchten niedrige oder negative paarweise Werte unter den Positionen, die Gewicht tragen.
  3. Risikokonzentration. Gleichen Sie dies mit Schritt 3 ab: Kein einzelnes Asset sollte das Gesamtrisiko dominieren, es sei denn, Sie haben es beabsichtigt.
import pandas as pd

corr = pd.read_csv("correlation.csv", index_col=0)
w = pd.read_csv("weights.csv", index_col="symbol")["weight"]
held = w[w > 0.001].index

sub = corr.loc[held, held].copy()
sub.values[[range(len(held))] * 2] = float("nan")  # drop the diagonal
print("max pairwise correlation among held assets:", round(sub.max().max(), 3))

Wenn dieses Maximum hoch ist oder das Portfoliorisiko nicht unter dem gewichteten Durchschnitt der Asset-Risiken liegt, beginnen Sie nicht, Gewichte von Hand anzupassen. Gehen Sie zu den beiden vorgelagerten Entscheidungen zurück: dem Risikomodell und den Daten. Veraltete oder fehlende Kurse verzerren jede Korrelationsschätzung. Die Bereinigungspipeline und der Cache in RSJ Portfolio existieren, um genau das stillschweigend zu verhindern – wenn der Datumsbereich oder der Anbieter falsch aussieht, beheben Sie das zuerst.

Schritt 5: Bestätigen, dass es funktioniert hat: die Verifikations-Checkliste

Gehen Sie dies durch, bevor Sie auf die Zuteilung reagieren:

  • [ ] Gewichte summieren sich zu 100 % (1,0), innerhalb der Rundung.
  • [ ] Alle Einschränkungen gelten – maximales Gewicht pro Asset, Long-only, alle von Ihnen konfigurierten Gruppenlimits.
  • [ ] Kein unerwartetes Vorzeichen – keine negativen Gewichte in einem Long-only-Lauf.
  • [ ] Portfoliorisiko < gewichteter Durchschnitt des Asset-Risikos – der Diversifikationsnutzen ist vorhanden.
  • [ ] Risikobeiträge sind ausreichend proportional – keine unbeabsichtigte Risikodominanz eines einzelnen Assets.
  • [ ] Das Ergebnis entspricht dem Ziel – ein Minimum-Volatility-Lauf hat die niedrigste geschätzte Volatilität unter den von Ihnen getesteten Varianten.
  • [ ] Jedes gehaltene Asset hat einen plausiblen Grund, dort zu sein – niedrige Korrelation, nicht nur ein bekannter Name.
# verify.py - run after each export
import pandas as pd

w = pd.read_csv("weights.csv", index_col="symbol")["weight"]
risk = pd.read_csv("risk_summary.csv", index_col=0)["value"]

checks = {
    "weights sum to 1": abs(w.sum() - 1.0) < 1e-6,
    "long only": (w >= -1e-9).all(),
    "max weight respected": w.max() <= 0.10 + 1e-6,
    "risk below asset average": risk["portfolio"] < risk["asset_weighted_average"],
}
for name, ok in checks.items():
    print(f"[{'PASS' if ok else 'FAIL'}] {name}")

Jedes FAIL ist ein Signal, mit korrigierter Konfiguration neu zu laufen, nicht die Ausgabe von Hand zu bearbeiten.

Fehlerbehebung häufiger Probleme beim Lesen der Ausgabe

Die Gewichte sind alle null, oder die Summe stimmt nicht. Der zulässige Bereich ist leer, oder die Kandidatenliste ist leer. Prüfen Sie, ob Ihre Kandidatenliste tatsächlich Symbole enthält und ob Ihre Einschränkungen gleichzeitig erfüllt werden können – eine 5-%-Obergrenze mit 10 Kandidaten ist nicht zulässig.

Die Risikokennzahlen wirken unrealistisch. Fast immer die Daten. Überprüfen Sie den Datumsbereich, den Anbieter und ob die Bereinigungspipeline Beobachtungen verworfen hat. Fehlende oder veraltete End-of-Day-Kurse blähen jede Schätzung stromabwärts auf oder drücken sie zusammen.

Unerwartete Konzentration in wenigen Assets. Öffnen Sie die Korrelationsmatrix. Wenn die meisten Kandidaten hoch korreliert sind, hat der Optimizer nur wenige echte Diversifikatoren zur Auswahl und konzentriert sich auf die verbleibenden. Erweitern Sie die Kandidatenliste oder lockern Sie die Einschränkungen.

Die Ausgabe entspricht nicht Ihren Erwartungen. Bestätigen Sie, welches Ziel und welches Risikomodell sie erzeugt haben. RSJ Portfolio lässt Sie beide umschalten und neu laufen, und die beiden Läufe sind nur vergleichbar, wenn sie sich in einer Dimension auf einmal unterscheiden.

Eine Kennzahl, die Sie erwartet haben, wird nicht angezeigt. Der Ausgabeblock zeigt das für Ihr Ziel relevante Risikomaß an. Wechseln Sie das Ziel, um das entsprechende Maß zu sehen.

FAQ

Was bedeutet ein negatives Zuteilungsgewicht?

Wenn Ihre Optimierung Leerverkäufe zulässt, stellt ein negatives Gewicht eine Short-Position dar. Wenn Shorting deaktiviert ist – der Standard – sollten alle Gewichte nicht negativ sein. RSJ Portfolio respektiert die von Ihnen gesetzten Gewichtseinschränkungen, prüfen Sie also Ihre Konfiguration, wenn Sie unerwartete negative Werte sehen.

Wie interpretiere ich die Ausgabe des Risikomodells, wenn ich ein nicht standardmäßiges Risikomodell verwendet habe?

Die Ausgabekennzahlen (Volatilität, Semivarianz, CVaR) entsprechen dem von Ihnen gewählten Risikomodell. RSJ Portfolio zeigt das für Ihr Ziel relevante Risikomaß an. Wenn Sie unsicher sind, laufen Sie mit einem Standardmodell neu, um zu vergleichen.

Kann ich die Zuteilungsgewichte und Risikokennzahlen für weitere Analysen exportieren?

Ja. RSJ Portfolio unterstützt den Export der Ergebnisse, einschließlich Gewichte und Risikokennzahlen, sodass Sie sie in Ihren eigenen Tools analysieren oder mit Stakeholdern teilen können.

Warum wirken die Gewichte manchmal auf wenige Assets konzentriert?

Konzentration kann auftreten, wenn der Optimizer feststellt, dass wenige Assets die beste risikoadjustierte Rendite bieten, oder wenn Einschränkungen die Diversifikation begrenzen. Prüfen Sie die Korrelationsmatrix und erwägen Sie, Einschränkungen anzupassen oder die Kandidatenliste zu erweitern.

Fazit: Ausgabe in Entscheidungen verwandeln

Die Ausgabe des Optimizers zu lesen, geht nicht darum, die „richtige" Zahl zu finden – die gibt es nicht. Es geht darum zu verstehen, welchen Trade-off der Optimizer in Ihrem Namen eingegangen ist: wie viel Kapital wohin ging, welche Assets das Risiko tragen und ob die versprochene Diversifikation tatsächlich in den Kennzahlen sichtbar wird.

Verwenden Sie die Checkliste. Wenn die Gewichte korrekt summieren, die Einschränkungen gelten, das Portfoliorisiko unter dem gewichteten Durchschnitt des Asset-Risikos liegt und keine einzelne Position das Risiko unbeabsichtigt dominiert, ist das Ergebnis solide genug, um darauf zu reagieren. Wenn eines davon fehlschlägt, liegt das Problem vorgelagert – beim Modell, den Einschränkungen oder den Daten –, nicht bei den Gewichten.

RSJ Portfolio ist darauf ausgelegt, diesen Kreislauf kurz zu halten: Gewichte und Risikokennzahlen werden zusammen präsentiert, mit auswählbaren Zielen, Risikomodellen und Gewichtseinschränkungen, sodass Sie eine Variable ändern, neu laufen und die Differenz lesen können. Beginnen Sie mit der Übersicht unter portfolio.rsj.de und dem Benutzerhandbuch, und führen Sie dann eine zweite Konfiguration aus – Minimum Semi-Variance gegen Minimum Volatility ist der lehrreichste erste Vergleich. Der Zugang wird als Einzelnutzerlizenz verkauft; die Preisseite beschreibt, was sie abdeckt.

Verwandte Beiträge

EU label: AI-generated content