Risk Parity Calculator
RISK/STATS · RISK PARITY · ADVANCED
Long-only portfolio weights so each asset contributes equal (or custom) risk, solved via cyclical coordinate descent for 2+ assets.
Comma, space, or newline separated. No thousand separators (write 43250.50, not 43,250.50).
Comma, space, or newline separated. No thousand separators (write 43250.50, not 43,250.50).
Comma, space, or newline separated. No thousand separators (write 43250.50, not 43,250.50).
Risk budget is relative (doesn't need to sum to 1) - equal values (default) mean equal risk contribution. All asset series must be the same length and same dates.
The method
Finds long-only weights so each asset contributes its target share of total portfolio variance (equal share by default - the standard "equal risk contribution", or ERC, portfolio). No closed form exists for more than 2 assets, so this solves the equivalent convex problem by cyclical coordinate descent:
- Minimize 0.5 × y'Cy − Σ b_i × log(y_i), y > 0
- Solved coordinate-by-coordinate: C_ii × y_i² + α_i × y_i − b_i = 0
- Final weights: y normalized to sum to 1
For exactly 2 assets there's a well-known closed form independent of correlation: weight1 = σ2 / (σ1 + σ2).
Where to go next
Risk parity weights assets you've already chosen. To find a pair with a genuine long-run relationship first, see the cointegration test, or evaluate the resulting portfolio's return series with the portfolio tearsheet.
Use via API or MCP
This calculation is available as a deterministic API call for bots and AI agents.
What is a risk-parity portfolio?
A portfolio where each asset contributes an equal (or otherwise targeted) share of total portfolio risk, rather than an equal dollar allocation. A low-volatility asset gets a larger weight and a high-volatility asset gets a smaller one, so no single asset dominates the portfolio's swings.
How is this computed for more than 2 assets?
There's no closed form for 3+ assets. This solves the equivalent convex optimization problem (minimizing a log-barrier objective whose first-order condition is the equal-risk-contribution equation) via cyclical coordinate descent: solving a simple quadratic for each asset in turn, cycling until the weights stop moving.
Can I supply a covariance matrix directly instead of return series?
Yes, via the API/MCP tool (workflow.run_risk_parity accepts either returns[][] or a covariance[][] matrix directly). The web widget here always takes return series and computes the covariance from them.
Do the weights always sum to 1 and stay long-only?
Yes on both counts, by construction: the solver's per-asset update always has a positive root (given any asset has positive variance and a positive risk budget), and the raw solution is normalized to sum to 1 at the end.
Is this a buy/sell recommendation?
No. It's a portfolio-construction calculation answering "what weights make each asset's risk contribution equal (or match a custom target)," not a recommendation to hold these specific assets.