Class RiskParityOptimizer
java.lang.Object
com.quantfinlib.optimization.RiskParityOptimizer
Risk parity: the portfolio where every asset contributes a set share of
total risk (
w_i (Σw)_i / w'Σw = b_i; equal shares by default).
Solved through the convex formulation of Spinu (2013, "An algorithm for
computing risk parity weights", SSRN 2297383):
min_x ½x'Σx − Σ b_i ln x_i over x > 0, whose unique
minimiser satisfies x_i (Σx)_i = b_i; then w = x / 1'x.
Damped Newton steps with a backtracking line search that keeps x positive
converge quadratically, typically in under 20 iterations, including on
nearly collinear assets where the multiplicative fixed-point update
oscillates. Long-only, deterministic.
-
Method Summary
Modifier and TypeMethodDescriptionequalRiskContribution(double[] expectedReturns, double[][] covariance) Equal-risk-contribution weights (expected returns used only for reporting).riskBudget(double[] expectedReturns, double[][] covariance, double[] budgets) Risk-budgeting weights: asset i carries the fractionbudgets[i]of portfolio variance.static double[]riskContributions(double[] w, double[][] covariance) Each asset's fractional contribution to portfolio variance under weightsw.
-
Method Details
-
equalRiskContribution
public static PortfolioOptimizer.Allocation equalRiskContribution(double[] expectedReturns, double[][] covariance) Equal-risk-contribution weights (expected returns used only for reporting). -
riskBudget
public static PortfolioOptimizer.Allocation riskBudget(double[] expectedReturns, double[][] covariance, double[] budgets) Risk-budgeting weights: asset i carries the fractionbudgets[i]of portfolio variance.- Parameters:
budgets- positive, summing to 1
-
riskContributions
public static double[] riskContributions(double[] w, double[][] covariance) Each asset's fractional contribution to portfolio variance under weightsw.
-