Main Content

Risk Budgeting Portfolio

This example shows how to use riskBudgetingPortfolio to create a risk budgeting portfolio and portfolioRiskContribution to compute the risk contribution of the assets in the portfolio.

Risk budgeting is a portfolio allocation strategy that focuses on the allocation of risk to define the weights of a portfolio. The risk budgeting portfolio is constructed by ensuring that the risk contribution of each asset to the portfolio overall risk matches a target risk budget.

A common risk budgeting portfolio is the risk parity or equal risk contribution portfolio. For risk parity portfolios, the goal is to ensure that all assets contribute equally to the portfolio risk, that is, the target risk budget is the same for all assets. Key advantages of the risk budgeting portfolio are stability and diversification of weights:

  • Stability of the allocations: The weights of the risk parity portfolio are more robust to changes in the returns covariance than the weights of the mean-variance portfolio.

  • Diversification of the portfolio weights: The risk parity portfolio keeps the portfolio from concentrating in just a few number of assets.

This example follows the example in Section 3.1.1 of Bruder and Roncalli.[1]

Define the Asset Returns Covariance

Define the covariance matrix of the asset returns (Sigma). Sigma must be a positive semidefinite matrix.

% Define the returns covariance matrix.
sigma = [0.2; 0.21; 0.1];       % Assets risk
rho = 0.8;                      % Assets correlation
C = @(rho) [  1  rho  rho;
            rho    1  rho;
            rho  rho    1 ];    % Uniform correlation
Sigma = corr2cov(sigma,C(rho)); % Covariance
% Check that Sigma is positive semidefinite. All
% eigenvalues should be nonnegative (>= 0).
eig(Sigma)
ans = 3×1

    0.0026
    0.0084
    0.0831

Create Risk Budgeting Portfolio

Use riskBudgetingPortfolio with the covariance matrix (Sigma) and a vector of risk budgets (budget) to compute the long-only fully invested risk budgeting portfolio. When you specify the target risk budget, the function computes the risk parity portfolio.

% Define a risk budget.
budget = [0.5; 0.25; 0.25];
wRB = riskBudgetingPortfolio(Sigma,budget)
wRB = 3×1

    0.3912
    0.1964
    0.4124

Compute Risk Contribution for Each Asset

Use portfolioRiskContribution to check that the risk contribution of the portfolio obtained in wRB matches the target risk budget. By default, portfolioRiskContribution computes the relative risk contribution of a given portfolio (wRB) with respect to the provided covariance matrix (Sigma).

prc = portfolioRiskContribution(wRB,Sigma)
prc = 3×1

    0.5000
    0.2500
    0.2500

As expected, the risk contribution of each asset matches the target risk budget (budget). You can also use portfolioRiskContribution to compute the absolute risk contribution of each asset.

mrc = portfolioRiskContribution(wRB,Sigma,RiskContributionType="absolute")
mrc = 3×1

    0.0751
    0.0376
    0.0376

Compare Risk Budgeting Portfolios with Mean-Variance

While the allocation strategy of the risk budgeting portfolio focuses only on the risk, the allocation strategy of the mean-variance portfolio also makes use of the assets' return information.

% Define the returns mean.
mu = [0.08; 0.08; 0.05];

Initialize a Portfolio object with default constraints using Sigma and mu.

% Define the mean-variance portfolio.
p = Portfolio(AssetMean=mu,AssetCovar=Sigma);
p = setDefaultConstraints(p);

Compute the portfolio on the efficient frontier with a target volatility equal to the risk attained by the risk budgeting portfolio previously computed as wRB.

% Define the target volatility.
targetRisk = sqrt(wRB'*Sigma*wRB);
wMV = estimateFrontierByRisk(p,targetRisk)
wMV = 3×1

    0.3846
    0.2030
    0.4124

Assume that the correlation between the assets is 0.7 instead of 0.8. Use the new covariance matrix (Sigma7) to compute the same mean-variance and risk budgeting portfolios.

% Update the covariance matrix.
Sigma7 = corr2cov(sigma,C(0.7));
% Compute the mean-variance portfolio.
p = Portfolio(AssetMean=mu,AssetCovar=Sigma7);
p = setDefaultConstraints(p);
wMV_rho7 = estimateFrontierByRisk(p,targetRisk)
wMV_rho7 = 3×1

    0.3841
    0.2600
    0.3559

% Compute the risk budgeting portfolio.
wRB_rho7 = riskBudgetingPortfolio(Sigma7,budget)
wRB_rho7 = 3×1

    0.3844
    0.1986
    0.4170

What if the correlation is 0.9 instead of 0.8 (Sigma9) and the risk of the second asset is 0.18 instead of 0.21?

% Update the covariance matrix.
sigma2 = sigma;
sigma2(2) = 0.18;
Sigma9 = corr2cov(sigma2,C(0.9));
% Compute the mean-variance portfolio.
p = Portfolio(AssetMean=mu,AssetCovar=Sigma9);
p = setDefaultConstraints(p);
wMV_rho9 = estimateFrontierByRisk(p,targetRisk)
wMV_rho9 = 3×1

    0.0000
    0.6612
    0.3388

% Compute the risk budgeting portfolio.
wRB_rho9 = riskBudgetingPortfolio(Sigma9,budget)
wRB_rho9 = 3×1

    0.3852
    0.2196
    0.3952

What if the original covariance (Sigma) is correct, but the mean of the first asset is 0.09 instead of 0.08?

% Update the returns vector.
mu1 = mu;
mu1(1) = 0.09;
% Compute the mean-variance portfolio.
p = Portfolio(AssetMean=mu1,AssetCovar=Sigma);
p = setDefaultConstraints(p);
wMV_mu1 = estimateFrontierByRisk(p,targetRisk)
wMV_mu1 = 3×1

    0.5664
         0
    0.4336

% Compute the risk budgeting portfolio.
wRB_mu1 = riskBudgetingPortfolio(Sigma,budget)
wRB_mu1 = 3×1

    0.3912
    0.1964
    0.4124

The weights of the risk budgeting portfolio are more stable than those of the mean-variance portfolio. When the change is in the expected returns, the risk budgeting portfolio remains the same as in the original problem. The risk budgeting portfolio accounts only for changes to the covariance matrix and a change in the vector of expected returns does not affect the weights allocation.

% Display a table of weights for the risk budgeting portfolios.
RBtable = table(wRB,wRB_rho7,wRB_rho9,wRB_mu1)
RBtable=3×4 table
      wRB      wRB_rho7    wRB_rho9    wRB_mu1
    _______    ________    ________    _______

    0.39123    0.38444     0.38521     0.39123
    0.19638    0.19857     0.21957     0.19638
    0.41239    0.41699     0.39522     0.41239

% Display a table of weights for the mean-variance portfolios.
MVtable = table(wMV,wMV_rho7,wMV_rho9,wMV_mu1)
MVtable=3×4 table
      wMV      wMV_rho7     wMV_rho9     wMV_mu1
    _______    ________    __________    _______

    0.38462    0.38411     1.1102e-16    0.56638
    0.20301    0.26003         0.6612          0
    0.41237    0.35586         0.3388    0.43362

The results on these tables show that the risk budgeting portfolio is more robust to changes in the parameters. The weights in the third and fourth column of the mean-variance portfolio table change so drastically that the portfolios stop investing in some assets altogether when the parameters change. The mean-variance portfolio tends to concentrate weights in a few number of assets, which decreases portfolio diversification.

References

[1] Bruder, B. and T. Roncalli. Managing Risk Exposures Using the Risk Budgeting Approach. January 2012. Available at SSRN: https://papers.ssrn.com/sol3/papers.cfm?abstract_id=2009778.

See Also

| | | | | | |

Related Examples

More About

External Websites