# riskParityPortfolio

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.

## Installation

To install the latest stable version of riskParityPortfolio, run the following commands in R:

``install.packages("riskParityPortfolio")``

To install the development version of riskParityPortfolio, 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``````

``citation("riskParityPortfolio")``

You can also get riskParityPortfolio from Docker as follows:

``docker pull mirca/riskparityportfolio``

#### Microsoft Windows

On MS Windows environments, make sure to install the most recent version of Rtools.

### Python

A Python3 implementation of the vanilla method is available in PYPI and can be installed as follows:

``pip install riskparityportfolio``

## Usage of riskParityPortfolio

### R

``````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)
#> [1] "w"                 "risk_contribution"
res\$w
#> [1] 0.32715962 0.27110678 0.14480081 0.09766356 0.15926922
res\$risk_contribution
#> [1] 0.03857039 0.03857039 0.03857039 0.03857039 0.03857039
c(res\$w * (Sigma %*% res\$w))
#> [1] 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)
#> [1] 0.40 0.40 0.10 0.05 0.05``````

### Python

``````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 ]``````

## Documentation

For more detailed information, please check the CRAN vignette and GitHub vignette.

## Citation

If you find this package useful in your research, please consider citing the following works:

## Contributing

We welcome all sorts of contributions. Please feel free to open an issue to report a bug or discuss a feature request.

Package: CRAN and GitHub.