Portfolios

In comparison to the well known portfolios allocation methods, risk budgeting portfolios considers the amount of risk contribution each asset in the portfolio can hold. Let $w_i$ and $\mathcal{R} (w_1, \ldots, w_N)$ denote the weights of the asset $i$ and the risk measure of the portfolio, for example volatility, respectively. Given that the risk measure is coherent and convex it will satisfy the condition of Euler decomposition

\[\begin{aligned} \mathcal{R} (w_1, \ldots, w_N) = \sum_{i=1}^n w_i \frac{\partial \mathcal{R} (w_1 , \ldots, w_n)}{\partial w_i}. \end{aligned}\]

As a result, the risk contribution, interpreted as the amount of risk exposure an asset in a portfolio is allowed to collect of asset $i$, is expressed as

\[\begin{aligned} \textrm{RC}_i (w_1, \ldots, w_N) = w_i \frac{\partial \mathcal{R} (w_1 , \ldots, w_N)}{\partial w_i}. \end{aligned}\]

This implies that if given the risk budgets $\{b_1, \ldots, b_N\}$, the risk budgeting portfolio is solved by finding the solutions to the non-linear system of equations $b_i = \textrm{RC}_i$. By generalizing the system of equations with the additional constraints of being long only and complete capital allocation, the risk budgeting portfolio develop into

\[\begin{aligned} w_i \frac{\partial \mathcal{R} (w_1 , \ldots, w_n)}{\partial w_i} = b_i \mathcal{R} (w_1 , \ldots, w_n), \\ b_i \geq 0, \\ w_i \geq 0, \\ \sum_{i=1}^N b_i = 1, \\ \sum_{i=1}^N w_i = 1. \end{aligned}\]

What is left is for the portfolio manager to set the desire risk budgets of each financial asset and then solve the system of equations above. Below a handful of risk budgets are proposed which can be used and calling them is simple. An example using equal risk contribution gives

julia> using RiskBudgeting

julia> cov = [0.1 0.3
        0.3 0.8];

julia> retval = equalriskcontribution(cov).weights;

julia> print(round.(retval; digits=4))
[0.7388, 0.2612]

Minimum variance

RiskBudgeting.minimumvarianceFunction
minimumvariance(cov, w, [max_iter], [tol], [bounds], [solver])
cov::AbstractMatrix      covariance matrix
w::AbstractVector{Float} portfolio weights
max_iter::Int=10000      number of iterations 
tol::Float=10(-4)        the minimum tolerance of the result
bounds::Bool=true        whether to run bounds checks or not
solver::Symbol=:newton   which solver to use

The risk budgets are set equal to the initial weights

\[ b_i = w_i, i \in [1, \ldots, N].\]

External links

  • Bruder, Benjamin and Roncalli, Thierry, Managing Risk Exposures Using the Risk Budgeting Approach (January 20, 2012), doi: 10.2139/ssrn.2009778

  • Thomas Raffinot, The Journal of Portfolio Management Multi-Asset Special Issue 2018, 44 (2) 89-99, doi: 10.3905/jpm.2018.44.2.089

source

Equal risk contribution

RiskBudgeting.equalriskcontributionFunction
equalriskcontribution(cov, [max_iter], [tol], [bounds], [solver])
cov::AbstractMatrix      covariance matrix
w::AbstractVector{Float} portfolio weights
max_iter::Int=10000      number of iterations 
tol::Float=10(-4)        the minimum tolerance of the result
bounds::Bool=true        whether to run bounds checks or not
solver::Symbol=:newton   which solver to use

The equal risk contribution portfolio sets the risk budget for each asset in the portfolio to the inverse of the total number of assets

\[ b_i = \frac{1}{N}, i \in [1, \ldots, N].\]

External links

  • Bruder, Benjamin and Roncalli, Thierry, Managing Risk Exposures Using the Risk Budgeting Approach (January 20, 2012), doi: 10.2139/ssrn.2009778

  • Thomas Raffinot, The Journal of Portfolio Management Multi-Asset Special Issue 2018, 44 (2) 89-99, doi: 10.3905/jpm.2018.44.2.089

source

Inverse variance

RiskBudgeting.inversevarianceFunction
inversevariance(cov, [max_iter], [tol], [bounds], [solver])
cov::AbstractMatrix      covariance matrix
max_iter::Int=10000      number of iterations 
tol::Float=10(-4)        the minimum tolerance of the result
bounds::Bool=true        whether to run bounds checks or not
solver::Symbol=:newton   which solver to use

The inverse variance portfolio is defined using the inverse variance of the financial time series

\[ b_i = \frac{\sigma_i^{-2}}{\sum_{i=1}^N \sigma_i^{-2}}, i \in [1, \ldots, N].\]

External links

  • Bruder, Benjamin and Roncalli, Thierry, Managing Risk Exposures Using the Risk Budgeting Approach (January 20, 2012), doi: 10.2139/ssrn.2009778

  • Thomas Raffinot, The Journal of Portfolio Management Multi-Asset Special Issue 2018, 44 (2) 89-99, doi: 10.3905/jpm.2018.44.2.089

source

Most diversified

RiskBudgeting.mostdiversifiedFunction
mostdiversified(cov, w, [max_iter], [tol], [bounds], [solver])
cov::AbstractMatrix      covariance matrix
w::AbstractVector{Float} portfolio weights
max_iter::Int=10000      number of iterations 
tol::Float=10(-4)        the minimum tolerance of the result
bounds::Bool=true        whether to run bounds checks or not
solver::Symbol=:newton   which solver to use

Given the weights set by the user, the most diversified portfolio risk budgets are proportional to the weights and the volatility as following

\[ b_i = \frac{w_i \sigma_i}{\sum_{i=1}^N w_i \sigma_i} , \ i \in [1, \ldots, N].\]

External links

  • Bruder, Benjamin and Roncalli, Thierry, Managing Risk Exposures Using the Risk Budgeting Approach (January 20, 2012), doi: 10.2139/ssrn.2009778

  • Thomas Raffinot, The Journal of Portfolio Management Multi-Asset Special Issue 2018, 44 (2) 89-99, doi: 10.3905/jpm.2018.44.2.089

source