Class RiskParityOptimizer

java.lang.Object
com.quantfinlib.optimization.RiskParityOptimizer

public final class RiskParityOptimizer extends Object
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 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 fraction budgets[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 weights w.