Constructing Risk-Parity Portfolios with Correlated Assets
Summary
The document distinguishes risk parity from simply assigning equal asset volatilities. A portfolio’s total volatility is derived from its covariance matrix, and each asset’s risk contribution is its weight multiplied by its marginal contribution to portfolio volatility. Equal risk budgeting therefore requires weights that account for both individual volatilities and correlations.
It presents an optimization that minimizes deviations between each asset’s contribution and an equal share of total risk, then describes alternative convex formulations using logarithmic risk-budget terms. In the special case of zero correlations, inverse-volatility weights provide a simpler extension of the two-asset formula. The discussion offers formulations rather than empirical comparisons or a complete implementation guide; estimated covariance inputs and numerical choices affect the resulting portfolio, and equal budgets are only one possible allocation objective.
Key ideas
- Risk parity equalizes assets’ contributions to total portfolio volatility, not their standalone volatility.
- Marginal risk contributions can be computed from portfolio weights and the covariance matrix.
- A covariance-aware optimization can target equal or custom risk budgets.
- Inverse-volatility weighting is a simplifying special case when asset correlations are zero.
- Risk budgets and covariance estimates influence the final allocation.
Tags
Full text
# How to construct a Risk-Parity portfolio?
# How to construct a Risk-Parity portfolio?
If I would like to construct a fully invested long-only portfolio with two asset classes (Bonds $B$ and Stocks $S$) based on the concept of risk-parity.
The weights $W$ of my portfolio would then be the following:
Then the weight of the bonds: $$W_B = \textrm{Vol}(S)/[\textrm{Vol(S)}+\textrm{Vol(B)}]$$
and the weights of the stocks $$W_S = 1 - W_B$$
Based on this result, I am going to overweight the low-volatility asset and underweight the high-volatility asset. My question is: how do I calculate the weights for a portfolio with multiple asset classes, 5 for example, so that each asset class will have the same volatility and contribute the same amount of risk into my portfolio. From historical data I can extract the volatility of each asset class and the correlation between them.
## Answer by SRKX (score 22, accepted)
https://quant.stackexchange.com/a/3115
Risk Parity is not about "having the same volatility", it is about having each asset contributing in the same way to the portfolio overall volatility.
The volatility of the portfolio is defined as:
$$\sigma(w)=\sqrt{w' \Sigma w}$$
The risk contribution of asset $i$ is computed as follows:
$$\sigma_i(w)= w_i \times \partial_{w_i} \sigma(w)$$
You can then show that:
$$\sigma(w)=\sum_{i=1}^n \sigma_i(w)$$
The vector of the marginal contributions ($\partial_{w_i} \sigma(w)$) is computed as follows:
$$c(w)= \frac{\Sigma w}{\sqrt{w' \Sigma w}}$$
You can then find the solution by running the following optimization:
$$\underset{w}{\arg \min} \sum_{i=1}^N [\frac{\sqrt{w^T \Sigma w}}{N} - w_i \cdot c(w)_i]^2$$ This article contains all the developments you require to understand how the formulas above are derived.
## Answer by vanguard2k (score 7)
https://quant.stackexchange.com/a/14108
I am very happy with the following equivalent formulation for the risk budgeting problem (as presented in Bruder, Roncalli, 2012, Managing Risk Exposures using the Risk Budgeting Apporach):
Let $b_i$, $\Sigma_{i=1}^n b_i =1$ be the risk budgets, $y_i$ the unscaled portfolio weights and $S$ the variance covariance matrix and $c$ arbitrary.
$$ y^* = \text{arg min}_y \sqrt{y^T S y}, \quad \text{s.t.} \sum_{i=1}^n b_i \ln y_i \geq c, \quad \sum_{i=1}^ny_i=1, \quad y_i \geq 0 $$
Now the good thing about this formulation is: It is a quadratic program with convex constraints (assuming $b_i >0$) which is numerically nice. Further more, for numerical implementation one would like to drop the constraint $\sum_{i=1}^ny_i=1$ and manually rescale afterwards $x_i^* = \frac{y_i^*}{\sum_{i=1}^ny_i^*} $. It works better for me than the solution presented in the other answer.
## Answer by Zé Vinícius (score 5)
https://quant.stackexchange.com/a/42770
Another approach to construct a risk parity portfolio would be to use the formulation proposed by Spinu [1]: $$\begin{array}{ll} \underset{\mathbf{w}}{\textsf{minimize}} & \frac{1}{2}\mathbf{w}^{T}\Sigma\mathbf{w} - \sum_{i=1}^{N}b_i\log(w_i)\\ \textsf{subject to} & \mathbf{1}^T\mathbf{w}=1. \end{array}$$ where $\mathbf{w}$ is the vector of portfolio weights, $\Sigma$ is the covariance matrix, and $b_i, i = 1, 2, ..., N,$ are the risk budgets.
A robust algorithm to solve the above optimization problem is available in R and Python through the riskParityPortfolio package: https://github.com/dppalomar/riskParityPortfolio.
[1] Florin Spinu, An Algorithm for Computing Risk Parity Weights, 2013. https://papers.ssrn.com/sol3/papers.cfm?abstract_id=2297383
EDIT: I've also released a Python version of the above package. For those interested, here is the link to the repo: https://github.com/mirca/riskparity.py
## Answer by Ishan Shah (score 2)
https://quant.stackexchange.com/a/45604
Let us intuitively understand the risk parity algorithm. In this algorithm, the important point to consider is it allocates more capital for the assets which has lower risk and less capital to the assets which has higher risks.
For example, consider two assets where the risk of asset1 is 9% and the risk of asset2 is 5%. Then, the amount of capital allocated to asset1 = 1/9 / (1/9 + 1/5) = 35% and amount allocated to asset2 = (1 - 35%) = 65%.
As seen, 65% is allocated to asset2 as it has less risk of 5% compared to asset1 which has the risk of 9%.
You can check that the formula you gave: $w_B=\frac{\sigma_S}{\sigma_B+\sigma_S}$ is algebraically equivalent to $w_B=\frac{1/\sigma_B}{1/\sigma_B+1/\sigma_S}$. So the result is the same. But the formula in terms of inverses is more intuitive and more general.
To extend this formula to multiple assets (assuming correlations are zero), you can place the inverse of risk of the asset in numerator and sum of the inverse of risk of all assets in the denominator to get the weights.
In this example, the sum of the inverse of risk of all assets is 0.48. The weight for asset1 is 1/9 / 0.48 = 23%.
To understand the derivation of the algorithm and how to introduce non-zero correlations, you can refer to below link: How to understand this Risk Parity Algorithm?Shown in full with attribution under the source's licence. Licence: CC BY-SA 4.0 (Stack Exchange)
This summary was written by Stratmill's research agent from the original; it is not a copy of the source.