-
Notifications
You must be signed in to change notification settings - Fork 704
Description
Inhalt (Deutsch + Englisch)
Deutsch
Im Widget „Risikokennzahlen“ werden bisher angezeigt:
-
Maximaler Drawdown
-
Aktueller Drawdown
-
Maximale Drawdown Duration
-
Volatilität
-
Semivolatilität
-
Sharpe Ratio
Ich möchte vorschlagen, die klassischen Kennzahlen Beta und Alpha zu ergänzen.
Fachliche Begründung:
Beta misst die Sensitivität des Portfolios im Vergleich zu einem Benchmark (z. B. MSCI World).
Beta > 1: Portfolio schwankt stärker als der Markt
Beta < 1: Portfolio schwankt schwächer als der Markt
Alpha zeigt die Über- oder Unterperformance gegenüber der Benchmark.
Formeln:
Beta = Cov(R_p, R_m) / Var(R_m)
Alpha (vereinfachte) = avg(R_p) - Beta * avg(R_m)
Alpha (CAPM) = (avg(R_p) - rf) - Beta * (avg(R_m) - rf)
Technische Skizze:
Analog zu Risk.Volatility könnten neue Klassen Risk.Beta und Risk.Alpha implementiert werden, die zwei Rendite-Zeitreihen (Portfolio und Benchmark) verarbeiten und einen Wert zurückgeben.
Beispiel (vereinfacht):
public static class Beta {
private final double beta;
public Beta(double[] returnsP, double[] returnsM) {
if (returnsP.length != returnsM.length)
throw new IllegalArgumentException("Time series must have same length");
int n = returnsP.length;
if (n < 2) {
this.beta = 0.0;
return;
}
double avgP = 0.0;
double avgM = 0.0;
for (int i = 0; i < n; i++) {
avgP += returnsP[i];
avgM += returnsM[i];
}
avgP /= n;
avgM /= n;
double covSum = 0.0;
double varMSum = 0.0;
for (int i = 0; i < n; i++) {
double dP = returnsP[i] - avgP;
double dM = returnsM[i] - avgM;
covSum += dP * dM;
varMSum += dM * dM;
}
double cov = covSum / (n - 1);
double varM = varMSum / (n - 1);
this.beta = (varM == 0.0) ? 0.0 : cov / varM;
}
public double getBeta() {
return beta;
}
}
public static class Alpha {
private final double alpha;
// rf can be null -> use simple alpha (no risk-free adjustment)
public Alpha(double[] returnsP, double[] returnsM, Double rf) {
// compute averages
int n = returnsP.length;
double avgP = 0.0, avgM = 0.0;
for (int i = 0; i < n; i++) { avgP += returnsP[i]; avgM += returnsM[i]; }
avgP /= n; avgM /= n;
Beta b = new Beta(returnsP, returnsM);
double beta = b.getBeta();
if (rf == null) {
this.alpha = avgP - beta * avgM;
} else {
this.alpha = (avgP - rf) - beta * (avgM - rf);
}
}
public double getAlpha() {
return alpha;
}
}
UI-Vorschlag:
Im bestehenden „Risikokennzahlen“-Widget zwei zusätzliche Widgets:
Beta
Alpha (%)
Der Benchmark ist bereits in PP auswählbar (Wertpapier/Index), Zeitraum ergibt sich aus den Dashboard-Filtern.
English (short summary for international users)
In the “Risk Metrics” widget, please consider adding the classic measures Beta and Alpha in addition to the existing ones (Drawdown, Volatility, Sharpe Ratio, etc.).
Beta: sensitivity of the portfolio vs. a selected benchmark
Alpha: out- or underperformance compared to the benchmark
Formulas:
Beta = Cov(R_p, R_m) / Var(R_m)
Alpha (vereinfachte) = avg(R_p) - Beta * avg(R_m)
Alpha (CAPM) = (avg(R_p) - rf) - Beta * (avg(R_m) - rf)