riskParityPortfolio provides tools to design risk parity portfolios. In its simplest form, we consider the convex formulation with a unique solution proposed by Spinu (2013) and use a cyclical method inspired by Griveau-Billion (2013). For more general formulations, which are usually nonconvex, we implement the successive convex approximation method proposed by Feng & Palomar (2015).
The latest stable version of riskParityPortfolio is available at https://CRAN.R-project.org/package=riskParityPortfolio.
The latest development version of riskParityPortfolio is available at https://github.com/dppalomar/riskParityPortfolio.
Check out the documentation here: https://mirca.github.io/riskParityPortfolio.
To install the latest stable version of riskParityPortfolio from CRAN, run the following commands in R:
To install the development version of riskParityPortfolio from GitHub, run the following commands in R:
> install.packages("devtools") > devtools::install_github("dppalomar/riskParityPortfolio")
To get help:
> library(riskParityPortfolio) > help(package = "riskParityPortfolio") > package?riskParityPortfolio > ?riskParityPortfolio
Please cite riskParityPortfolio in publications:
You can also get riskParityPortfolio from Docker as follows:
$ docker pull mirca/riskparityportfolio
On MS Windows environments, make sure to install the most recent version of Rtools.
A Python3 implementation of the vanilla method is available in PYPI and can be installed as follows:
$ pip install riskparityportfolio
Alternatively, the development version can be installed as
$ git clone https://github.com/dppalomar/riskParityPortfolio $ cd python $ pip install -e .
Usage of riskParityPortfolio
library(riskParityPortfolio) set.seed(42) # create covariance matrix N <- 5 V <- matrix(rnorm(N^2), ncol = N) Sigma <- cov(V) # risk parity portfolio res <- riskParityPortfolio(Sigma) names(res) #>  "w" "risk_contribution" res$w #>  0.32715962 0.27110678 0.14480081 0.09766356 0.15926922 res$risk_contribution #>  0.03857039 0.03857039 0.03857039 0.03857039 0.03857039 c(res$w * (Sigma %*% res$w)) #>  0.03857039 0.03857039 0.03857039 0.03857039 0.03857039 # risk budggeting portfolio res <- riskParityPortfolio(Sigma, b = c(0.4, 0.4, 0.1, 0.05, 0.05)) res$risk_contribution/sum(res$risk_contribution) #>  0.40 0.40 0.10 0.05 0.05
import numpy as np import riskparityportfolio as rpp np.random.seed(42) # creates a correlation matrix from time-series of five assets x = np.random.normal(size=1000).reshape((5, -1)) corr = x @ x.T # create the desired risk budgeting vector b = np.ones(len(corr)) / len(corr) # design the portfolio w = rpp.design(corr, b) print(w) # compute the risk budgeting #> [0.21075375 0.21402865 0.20205399 0.16994639 0.20321721] rc = w @ (corr * w) print(rc / np.sum(rc)) # let's try a different budget #> [0.2 0.2 0.2 0.2 0.2] b = np.array([0.01, 0.09, .1, .1, .7]) w = rpp.design(corr, b) print(w) #> [0.06178354 0.19655744 0.16217134 0.12808275 0.45140493] rc = w @ (corr * w) print(rc / np.sum(rc)) #> [0.01 0.09 0.1 0.1 0.7 ]
For more detailed information, please check the vignette.
If you find this package useful in your research, please consider citing the following works:
- J. V. de M. Cardoso and D. P. Palomar (2019). riskParityPortfolio: Design of Risk Parity Portfolios. R package version 0.1.2. https://CRAN.R-project.org/package=riskParityPortfolio
- Y. Feng, and D. P. Palomar (2015). SCRIP: Successive Convex Optimization Methods for Risk Parity Portfolio Design. IEEE Trans. on Signal Processing, vol. 63, no. 19, pp. 5285-5300. https://doi.org/10.1109/TSP.2015.2452219
- F. Spinu (2013). An Algorithm for Computing Risk Parity Weights. https://dx.doi.org/10.2139/ssrn.2297383
- T. Griveau-Billion, J. Richard, and T. Roncalli (2013). A fast algorithm for computing High-dimensional risk parity portfolios. https://arxiv.org/pdf/1311.4057.pdf
We welcome all sorts of contributions. Please feel free to open an issue to report a bug or discuss a feature request.
The information, software, and any additional resources contained in this repository are not intended as, and shall not be understood or construed as, financial advice. Past performance is not a reliable indicator of future results and investors may not recover the full amount invested. The authors of this repository accept no liability whatsoever for any loss or damage you may incur. Any opinions expressed in this repository are from the personal research and experience of the authors and are intended as educational material.