# What is equal risk contribution (risk parity)? Formula and example

Canonical URL: https://marketheist.io/portfolio/learn/equal-risk-contribution
By Jeffrey Lin · Published 2026-10-25 · Updated 2026-10-25 · Data through Sep 2026
Category: Construction

## Key takeaways

- Equal risk contribution chooses weights so that each of n holdings carries 1/n of the portfolio's variance (uncertainty).
- It uses the full covariance matrix, so it accounts for correlations; inverse volatility weighting, its simpler cousin, ignores them.
- With two assets, or when every pair of holdings has the same correlation, equal risk contribution and inverse volatility give the same weights.
- There is no closed form in general; for long-only weights and a positive-definite covariance matrix a unique solution exists and is found numerically.
- Equal risk is not equal return: the method usually puts most of the money in bonds, and risk-parity funds often add leverage to reach a return target, which the weights on this page do not.

## Definition

Equal risk contribution (ERC), the precise form of risk parity, is the set of portfolio weights at which every holding contributes the same share of the portfolio's total risk. Calm holdings get more money and volatile ones less, with correlations taken into account, so no single holding dominates the portfolio's ups and downs.

Also known as: ERC, risk parity, equally weighted risk contribution, risk-parity portfolio, risk budgeting with equal budgets.

## How it works

A plain equal-weight portfolio gives each holding the same money. The risk is then uneven: the most volatile holdings drive most of the swings. Equal risk contribution turns the question around and asks which weights would make each holding's risk contribution the same.

The answer depends on two things per holding. The first is its volatility: a fund that swings twice as much needs roughly half the money to carry the same risk. The second is how it moves with the others: a fund that tends to move against the rest contributes less risk per dollar and can take more money, while a fund that moves with everything else gets less.

Ignore the second effect and you get inverse volatility weighting: each weight proportional to one over the holding's volatility. That is a good first guess, and exact when every pair of holdings has the same correlation. Equal risk contribution starts there and adjusts for the actual correlations.

Think of a seesaw with children of different weights: to balance it, the heavier child sits closer to the middle. Volatile holdings are the heavier children, and the weights are where each one sits.

The result is the allocation behind the risk-parity idea popularised by multi-asset funds: no economic risk, such as a fall in stocks, is allowed to dominate simply because its assets swing the most.

## Formula

**The equal risk contribution condition**

```
w_i (\Sigma w)_i = w_j (\Sigma w)_j for all i,j ⇔ RC_i = \frac{1}{n}
```

where:

- wᵢ: weight of holding i (positive, weights sum to 1)
- Σ: covariance matrix of the holdings' monthly returns
- (Σw)ᵢ: covariance of holding i with the whole portfolio
- RCᵢ: risk contribution of holding i as a share of portfolio variance
- n: number of holdings

**Spinu's convex formulation**

```
\min_{y > 0} \frac{1}{2} y^T \Sigma y - \frac{1}{n} \sum_{i = 1}^n \ln⁡y_i, w_i = \frac{y_i}{\sum_j y_j}
```

where:

- y: unnormalized positive weights
- yᵢ: unnormalized weight of holding i
- Σ: covariance matrix
- n: number of holdings
- wᵢ: final weight of holding i after rescaling to sum to 1

Setting the derivative to zero gives yᵢ(Σy)ᵢ = 1/n for every i, which is the equal risk contribution condition. The objective is strictly convex, so the minimum is unique.

**One coordinate step of the solver**

```
y_i←\frac{- a_i + \sqrt{a_i^2 + 4 \sigma_{i i}/n}}{2 \sigma_{i i}}, a_i = \sum_{j \ne i} \sigma_{i j} y_j
```

where:

- σᵢᵢ: variance of holding i (diagonal of Σ)
- σᵢⱼ: covariance of holdings i and j
- aᵢ: covariance of holding i with the rest of the portfolio, at the current weights
- yᵢ: unnormalized weight of holding i
- n: number of holdings

This is the positive root of σᵢᵢyᵢ² + aᵢyᵢ − 1/n = 0: holding the other weights fixed, it sets holding i's contribution to exactly 1/n. Cycling through the holdings until nothing moves converges to the solution.

**Two assets: a closed form**

```
w_1 = \frac{\sigma_2}{\sigma_1 + \sigma_2}, w_2 = \frac{\sigma_1}{\sigma_1 + \sigma_2}
```

where:

- σ₁, σ₂: volatilities of the two assets
- w₁, w₂: their equal-risk weights

With two assets the correlation drops out, so equal risk contribution is exactly inverse volatility weighting.

## Worked example

The five funds of the All Weather portfolio, VTI (US stocks), TLT (long Treasuries), IEF (intermediate Treasuries), GLD (gold) and DBC (commodities), weighted three ways from their monthly returns, Dec 2004 to Sep 2026.

With equal weights each fund gets 20.0% of the money, but the risk is uneven: GLD carries 30.4% of the portfolio's variance and DBC 28.5%, while IEF, the calmest fund, carries 7.1%.

Equal risk contribution solves for the weights at which every fund carries the same share, 20.0% each. To get there it puts 35.7% of the money in IEF and 12.6% in GLD.

Inverse volatility weighting ignores correlations. Even so, it lands close to the same place: 38.2% in IEF. Its risk shares are not equal, though; the largest is 24.0%.

Both risk-based weightings ran with lower volatility than equal weights: 8.2% for equal weights, 7.0% for inverse volatility and 7.1% for equal risk contribution. Equalizing risk shares is a different goal from minimizing volatility, and the method does not attempt the second.

One consequence is easy to miss. Equal risk contribution equalizes risk per fund, not per kind of exposure, so TLT and IEF, two Treasury funds that move together, take two of the five equal shares between them. On the co-movement groups count the three weightings read 3.94, 3.58 and 3.79 independent bets. Hierarchical methods weight by cluster instead.

Data through Sep 2026. Reproduce id: 7af3286a1e525d1b (this guide, its lab setup and the data month).

## How MarketHeist computes it

- **Data**: Monthly total returns (dividends reinvested). Funds younger than the period shown are extended backward with older funds, spliced on returns, not prices.
- **Window**: The worked example and the lab use the common window of the holdings, Dec 2004 to Sep 2026 (262 months), ending at the data month of this page.
- **Covariance**: Population covariance (divides by N, the number of months) of the funds' monthly returns over the full common window. The divisor cancels in the weights. (`covarianceMatrix` in packages/portfolio/engine/risk.ts)
- **Solver**: Cyclical coordinate descent on Spinu's convex formulation: for each fund in turn, hold the others fixed and take the positive root of σᵢᵢyᵢ² + aᵢyᵢ − 1/n = 0. A sweep visits every fund; sweeps repeat until no weight moves by more than 1e-12, up to 1,000 sweeps. The weights are then rescaled to sum to 1. (`equalRiskContributionWeights` in packages/portfolio/engine/risk.ts)
- **Starting point**: Inverse-volatility weights, 1/σᵢ before rescaling. For a diagonal covariance matrix (no correlations) this is already the solution. (`equalRiskContributionWeights` in packages/portfolio/engine/risk.ts)
- **Long only, no leverage**: Every weight stays positive by construction (a root at or below zero would be replaced by 1e-12) and the weights sum to 1. A variance below 1e-18 is floored at 1e-18 to avoid dividing by zero. (`equalRiskContributionWeights` in packages/portfolio/engine/risk.ts)
- **Inverse volatility**: wᵢ proportional to 1/σᵢ, with σᵢ the square root of the diagonal of the same covariance matrix, rescaled to sum to 1. Correlations are not used. (`inverseVolWeights` in packages/portfolio/engine/risk.ts)
- **Comparison statistics**: Portfolio volatility is √(12 · w′Σw) on monthly data; the table also reports the largest weight, the largest risk share and the co-movement groups count of independent bets at each set of weights. (`weightingStats` in packages/portfolio/engine/risk.ts)
- **In the app**: The Balance-risk table and the equal-risk weights reported by the MCP tools use the same function on the portfolio's full window. The weights are estimated once from the whole window, not re-estimated month by month.
- **Engine functions**: `inverseVolWeights` (packages/portfolio/engine/risk.ts), `equalRiskContributionWeights` (packages/portfolio/engine/risk.ts), `hierarchicalRiskParity` (packages/portfolio/engine/hrp.ts), `hierarchicalEqualRiskContribution` (packages/portfolio/engine/hrp.ts), `weightingStats` (packages/portfolio/engine/risk.ts), `effectiveBets` (packages/portfolio/engine/overlap.ts)

## Equal risk contribution (risk parity) compared with its neighbours

Equal risk contribution and its neighbours

| Method | Weights come from | Uses correlations | Risk shares | Typical tilt |
| --- | --- | --- | --- | --- |
| Equal weight | Nothing: 1/n each | No | Uneven; volatile holdings dominate | None |
| Inverse volatility | Each holding's volatility | No | Equal only when every pair has the same correlation | Toward calm holdings |
| Equal risk contribution | The full covariance matrix | Yes, every pair | Equal by construction | Toward calm holdings and those that move against the rest |
| Minimum variance | The full covariance matrix, inverted | Yes | Uneven, often concentrated | Heavily toward the calmest holdings |
| Hierarchical risk parity | A correlation tree and cluster variances | Through the tree | Uneven | Toward calm clusters |

## Limitations

- Equal risk is not equal return. Calm assets such as bonds receive most of the money, so an unlevered equal-risk portfolio has usually grown more slowly than a stock-heavy one. Many risk-parity funds borrow to raise the whole portfolio's risk; the weights on this page use no leverage.
- The weights depend on estimated volatilities and correlations. When those change, as when stocks and bonds fall together, the risk shares stop being equal until the weights are re-estimated.
- The weights here are estimated from the whole window. Holding them from the start of a backtest would use information from later years, so they describe the window, not a decision someone could have made at its start.
- Risk is measured as variance of monthly returns. Rare crashes, fat tails and liquidity are not part of the calculation.
- Equal risk per fund can mean unequal risk per exposure: two funds that hold nearly the same thing get two shares. Hierarchical risk parity and its variants weight by cluster to address this.

## Frequently asked questions

**Is risk parity the same as equal risk contribution?**

Risk parity is the broad idea of balancing risk rather than money; it covers inverse volatility weighting, equal risk contribution and leveraged multi-asset funds. Equal risk contribution is its precise form: every holding carries exactly the same share of variance.

**Why does a risk-parity portfolio hold so many bonds?**

High-quality bonds swing much less than stocks or commodities, so they need more money to carry the same risk. The bond-heavy mix is the direct result of equalizing risk, not a view on bonds.

**Does risk parity use leverage?**

The weighting itself does not: the weights sum to one. Some institutional risk-parity strategies then borrow to scale the whole portfolio up to a chosen volatility. MarketHeist's equal-risk weights are unlevered.

**How is equal risk contribution different from inverse volatility weighting?**

Inverse volatility uses only each holding's volatility. Equal risk contribution also uses the correlations, so a holding that moves against the rest can take more money. They coincide for two assets, or when all pairs share one correlation.

**Is the equal risk contribution portfolio unique?**

For long-only weights and a positive-definite covariance matrix, yes. Maillard, Roncalli and Teiletche showed it exists and is unique, and Spinu's convex formulation gives a problem with a single minimum that numerical solvers find reliably.

## References

1. Maillard, S., Roncalli, T. and Teiletche, J. (2010) The Properties of Equally Weighted Risk Contribution Portfolios <https://papers.ssrn.com/sol3/papers.cfm?abstract_id=1271972>. Journal of Portfolio Management 36(4).
2. Spinu, F. (2013) An Algorithm for Computing Risk Parity Weights <https://papers.ssrn.com/sol3/papers.cfm?abstract_id=2297383>. The convex formulation the solver uses.
3. Griveau-Billion, T., Richard, J.-C. and Roncalli, T. (2013) A Fast Algorithm for Computing High-dimensional Risk Parity Portfolios. Cyclical coordinate descent for risk parity.
4. Qian, E. (2005) Risk Parity Portfolios: Efficient Portfolios Through True Diversification. PanAgora Asset Management white paper.
5. Roncalli, T. (2013) Introduction to Risk Parity and Budgeting. Chapman and Hall/CRC.

## Try it

App: https://marketheist.io/portfolio/p/all-weather

MCP prompt (MarketHeist MCP server, https://marketheist.io/mcp):

```
Using MarketHeist, what are the equal-risk-contribution weights for VTI, TLT, IEF, GLD and DBC, and how does each holding's share of risk compare with equal weights?
```

Historical simulation, not advice.
