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.minimumvariance
— Functionminimumvariance(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
Equal risk contribution
RiskBudgeting.equalriskcontribution
— Functionequalriskcontribution(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
Inverse variance
RiskBudgeting.inversevariance
— Functioninversevariance(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
Most diversified
RiskBudgeting.mostdiversified
— Functionmostdiversified(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