# optimalPortfolio: Optimal portfolio In RiskPortfolios: Computation of Risk-Based Portfolios

## Description

Function wich computes the optimal portfolio's weights.

## Usage

 `1` ```optimalPortfolio(Sigma, mu = NULL, semiDev = NULL, control = list()) ```

## Arguments

 `Sigma` a (N x N) covariance matrix. `mu` a (N x 1) vector of expected returns. Default: `mu = NULL`. `semiDev` a vector (N x 1) of semideviations. Default: `semiDev = NULL`. `control` control parameters (see *Details*).

## Details

The argument `control` is a list that can supply any of the following components:

• `type` method used to compute the optimal portfolio, among `'mv'`, `'minvol'`, `'invvol'`, `'erc'`, `'maxdiv'`, `'riskeff'` and `'maxdec'` where:

`'mv'` is used to compute the weights of the mean-variance portfolio. The weights are computed following this equation:

w = 1 / γ Σ^{-1} μ

.

`'minvol'` is used to compute the weights of the minimum variance portfolio.

`'invvol'` is the inverse volatility portfolio.

`'erc'` is used to compute the weights of the equal-risk-contribution portfolio. For a portfolio w, the percentage volatility risk contribution of the i-th asset in the portfolio is given by:

RC_i = w_i[Σ w]_i / (w' Σ w)

. Then we compute the optimal portfolio by solving the following optimization problem:

argmin { ∑_{i=1}^{N} (RC_i - 1/N)^2}

.

`'maxdiv'` is used to compute the weights of the maximum diversification portfolio where:

DR(w) = (w' σ)/(√(w' Σ w)) ≥ 1

is used in the optimization problem.

`'riskeff'` is used to compute the weights of the risk-efficient portfolio:

w = argmax ( w'J ξ)√(w'Σ w)

where J is a (N x 10) matrix of zeros whose (i,j)-th element is one if the semi-deviation of stock i belongs to decile j,ξ = (ξ_1,…,ξ_{10})'.

`'maxdec'` is used to compute the weights of the maximum-decorrelation portfolio:

w = argmax {1- √(w' R w)}

where R is the correlation matrix.

Default: `type = 'mv'`.

These portfolios are summarized in Ardia and Boudt (2015) and Ardia et al. (2017). Below we list the various references.

• `constraint` constraint used for the optimization, among `'none'`, `'lo'`, `'gross'` and `'user'`, where: `'none'` is used to compute the unconstraint portfolio, `'lo'` is the long-only constraints (non-negative weighted), `'gross'` is the gross exposure constraint, and `'user'` is the set of user constraints (typically lower and upper boundaries. Default: `constraint = 'none'`. Note that the summability constraint is always imposed.

• `LB` lower boundary for the weights. Default: `LB = NULL`.

• `UB` lower boundary for the weights. Default: `UB = NULL`.

• `w0` starting value for the optimizer. Default: `w0 = NULL` takes the equally-weighted portfolio as a starting value. When `LB` and `UB` are provided, it is set to mid-point of the bounds.

• `gross.c` gross exposure constraint. Default: `gross.c = 1.6`.

• `gamma` risk aversion parameter. Default: `gamma = 0.89`.

• `ctr.slsqp` list with control parameters for slsqp function.

## Value

A (N x 1) vector of optimal portfolio weights.

## Author(s)

David Ardia, Kris Boudt and Jean-Philippe Gagnon Fleury.

## References

Amenc, N., Goltz, F., Martellini, L., Retowsky, P. (2011). Efficient indexation: An alternatice to cap-weightes indices. Journal of Investment Management 9(4), pp.1-23.

Ardia, D., Boudt, K. (2015). Implied expected returns and the choice of a mean-variance efficient portfolio proxy. Journal of Portfolio Management 41(4), pp.66-81. doi: 10.3905/jpm.2015.41.4.068

Ardia, D., Bolliger, G., Boudt, K., Gagnon-Fleury, J.-P. (2017). The Impact of covariance misspecification in risk-based portfolios. Annals of Operations Research 254(1-2), pp.1-16. doi: 10.1007/s10479-017-2474-7

Choueifaty, Y., Coignard, Y. (2008). Toward maximum diversification. Journal of Portfolio Management 35(1), pp.40-51.

Choueifaty, Y., Froidure, T., Reynier, J. (2013). Properties of the most diversified portfolio. Journal of Investment Strategies 2(2), pp.49-70.

Das, S., Markowitz, H., Scheid, J., Statman, M. (2010). Portfolio optimization with mental accounts. Journal of Financial and Quantitative Analysis 45(2), pp.311-334.

DeMiguel, V., Garlappi, L., Uppal, R. (2009). Optimal versus naive diversification: How inefficient is the 1/n portfolio strategy. Review of Financial Studies 22(5), pp.1915-1953.

Fan, J., Zhang, J., Yu, K. (2012). Vast portfolio selection with gross-exposure constraints. Journal of the American Statistical Association 107(498), pp.592-606.

Maillard, S., Roncalli, T., Teiletche, J. (2010). The properties of equally weighted risk contribution portfolios. Journal of Portfolio Management 36(4), pp.60-70.

Martellini, L. (2008). Towards the design of better equity benchmarks. Journal of Portfolio Management 34(4), Summer,pp.34-41.

## Examples

 ``` 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119``` ```# Load returns of assets or portfolios data("Industry_10") rets = Industry_10 # Mean estimation mu = meanEstimation(rets) # Covariance estimation Sigma = covEstimation(rets) # Semi-deviation estimation semiDev = semidevEstimation(rets) # Mean-variance portfolio without constraint and gamma = 0.89 optimalPortfolio(mu = mu, Sigma = Sigma) # Mean-variance portfolio without constraint and gamma = 1 optimalPortfolio(mu = mu, Sigma = Sigma, control = list(gamma = 1)) # Mean-variance portfolio without constraint and gamma = 0.89 optimalPortfolio(mu = mu, Sigma = Sigma, control = list(type = 'mv')) # Mean-variance portfolio without constraint and gamma = 0.89 optimalPortfolio(mu = mu, Sigma = Sigma, control = list(type = 'mv', constraint = 'none')) # Mean-variance portfolio with the long-only constraint and gamma = 0.89 optimalPortfolio(mu = mu, Sigma = Sigma, control = list(type = 'mv', constraint = 'lo')) # Mean-variance portfolio with LB and UB constraints optimalPortfolio(mu = mu, Sigma = Sigma, control = list(type = 'mv', constraint = 'user', LB = rep(0.02, 10), UB = rep(0.8, 10))) # Mean-variance portfolio with the gross constraint, # gross constraint parameter = 1.6 and gamma = 0.89 optimalPortfolio(mu = mu, Sigma = Sigma, control = list(type = 'mv', constraint = 'gross')) # Mean-variance portfolio with the gross constraint, # gross constraint parameter = 1.2 and gamma = 0.89 optimalPortfolio(mu = mu, Sigma = Sigma, control = list(type = 'mv', constraint = 'gross', gross.c = 1.2)) # Minimum volatility portfolio without constraint optimalPortfolio(Sigma = Sigma, control = list(type = 'minvol')) # Minimum volatility portfolio without constraint optimalPortfolio(Sigma = Sigma, control = list(type = 'minvol', constraint = 'none')) # Minimim volatility portfolio with the long-only constraint optimalPortfolio(Sigma = Sigma, control = list(type = 'minvol', constraint = 'lo')) # Minimim volatility portfolio with LB and UB constraints optimalPortfolio(Sigma = Sigma, control = list(type = 'minvol', constraint = 'user', LB = rep(0.02, 10), UB = rep(0.8, 10))) # Minimum volatility portfolio with the gross constraint # and the gross constraint parameter = 1.6 optimalPortfolio(Sigma = Sigma, control = list(type = 'minvol', constraint = 'gross')) # Minimum volatility portfolio with the gross constraint # and the gross parameter = 1.2 optimalPortfolio(Sigma = Sigma, control = list(type = 'minvol', constraint = 'gross', gross.c = 1.2)) # Inverse volatility portfolio optimalPortfolio(Sigma = Sigma, control = list(type = 'invvol')) # Equal-risk-contribution portfolio with the long-only constraint optimalPortfolio(Sigma = Sigma, control = list(type = 'erc', constraint = 'lo')) # Equal-risk-contribution portfolio with LB and UB constraints optimalPortfolio(Sigma = Sigma, control = list(type = 'erc', constraint = 'user', LB = rep(0.02, 10), UB = rep(0.8, 10))) # Maximum diversification portfolio without constraint optimalPortfolio(Sigma = Sigma, control = list(type = 'maxdiv')) # Maximum diversification portoflio with the long-only constraint optimalPortfolio(Sigma = Sigma, control = list(type = 'maxdiv', constraint = 'lo')) # Maximum diversification portoflio with LB and UB constraints optimalPortfolio(Sigma = Sigma, control = list(type = 'maxdiv', constraint = 'user', LB = rep(0.02, 10), UB = rep(0.8, 10))) # Risk-efficient portfolio without constraint optimalPortfolio(Sigma = Sigma, semiDev = semiDev, control = list(type = 'riskeff')) # Risk-efficient portfolio with the long-only constraint optimalPortfolio(Sigma = Sigma, semiDev = semiDev, control = list(type = 'riskeff', constraint = 'lo')) # Risk-efficient portfolio with LB and UB constraints optimalPortfolio(Sigma = Sigma, semiDev = semiDev, control = list(type = 'riskeff', constraint = 'user', LB = rep(0.02, 10), UB = rep(0.8, 10))) # Maximum decorrelation portfolio without constraint optimalPortfolio(Sigma = Sigma, control = list(type = 'maxdec')) # Maximum decorrelation portoflio with the long-only constraint optimalPortfolio(Sigma = Sigma, control = list(type = 'maxdec', constraint = 'lo')) # Maximum decorrelation portoflio with LB and UB constraints optimalPortfolio(Sigma = Sigma, control = list(type = 'maxdec', constraint = 'user', LB = rep(0.02, 10), UB = rep(0.8, 10))) ```

### Example output

```      NoDur       Durbl       Manuf       Enrgy       HiTec       Telcm
0.26695643 -0.08924691 -0.63735698 -0.69270501  0.89989319 -0.82742959
Shops        Hlth       Utils       Other
0.14848186  0.49988613  1.20518357  0.22633732
NoDur       Durbl       Manuf       Enrgy       HiTec       Telcm
0.26695643 -0.08924691 -0.63735698 -0.69270501  0.89989319 -0.82742959
Shops        Hlth       Utils       Other
0.14848186  0.49988613  1.20518357  0.22633732
NoDur       Durbl       Manuf       Enrgy       HiTec       Telcm
0.26695643 -0.08924691 -0.63735698 -0.69270501  0.89989319 -0.82742959
Shops        Hlth       Utils       Other
0.14848186  0.49988613  1.20518357  0.22633732
NoDur       Durbl       Manuf       Enrgy       HiTec       Telcm
0.26695643 -0.08924691 -0.63735698 -0.69270501  0.89989319 -0.82742959
Shops        Hlth       Utils       Other
0.14848186  0.49988613  1.20518357  0.22633732
 4.564416e-01 2.260724e-17 0.000000e+00 3.311876e-17 0.000000e+00
 0.000000e+00 1.660164e-01 2.351749e-02 3.540246e-01 0.000000e+00
 0.4278002 0.0200000 0.0200000 0.0200000 0.0200000 0.0200000 0.0923945
 0.0200000 0.3398053 0.0200000
For consistency with the rest of the package the inequality sign may be switched from >= to <= in a future nloptr version.
  4.536944e-01 -1.741167e-01  7.271734e-07 -1.258798e-01  9.431759e-02
  9.039492e-03  2.830105e-01  5.425086e-02  4.056865e-01 -3.556898e-06
For consistency with the rest of the package the inequality sign may be switched from >= to <= in a future nloptr version.
  4.667712e-01 -5.484142e-03  1.901907e-06 -9.451550e-02  1.894288e-07
  5.635764e-06  1.945999e-01  4.178636e-02  3.968320e-01  2.464799e-06
NoDur        Durbl        Manuf        Enrgy        HiTec        Telcm
0.497615869 -0.213681819  0.162570800 -0.009689487 -0.047806452  0.194800211
Shops         Hlth        Utils        Other
0.337721859 -0.032518014  0.232414214 -0.121427181
NoDur        Durbl        Manuf        Enrgy        HiTec        Telcm
0.497615869 -0.213681819  0.162570800 -0.009689487 -0.047806452  0.194800211
Shops         Hlth        Utils        Other
0.337721859 -0.032518014  0.232414214 -0.121427181
 5.138280e-01 2.258232e-17 2.605669e-17 0.000000e+00 0.000000e+00
 1.008340e-01 1.297253e-01 0.000000e+00 2.556126e-01 9.694292e-17
 0.49740150 0.02000000 0.02000000 0.02000000 0.02000000 0.06154041
 0.07421558 0.02000000 0.24684252 0.02000000
For consistency with the rest of the package the inequality sign may be switched from >= to <= in a future nloptr version.
  5.048999e-01 -1.985812e-01  6.610667e-02 -1.945711e-06 -2.261382e-02
  1.808213e-01  3.083723e-01 -3.107834e-02  2.397998e-01 -4.772474e-02
For consistency with the rest of the package the inequality sign may be switched from >= to <= in a future nloptr version.
  5.081238e-01 -9.999722e-02  2.732414e-06 -1.035909e-07 -6.660731e-07
  1.342550e-01  2.069553e-01 -2.010851e-06  2.506631e-01  7.920099e-08
NoDur      Durbl      Manuf      Enrgy      HiTec      Telcm      Shops
0.13124351 0.07929370 0.10728283 0.06813935 0.09474918 0.11002180 0.11397215
Hlth      Utils      Other
0.08632901 0.10657287 0.10239559
 0.12802268 0.07593893 0.09388514 0.08008504 0.08771300 0.10761739
 0.10883223 0.08887073 0.13724700 0.09178788
 0.12802268 0.07593893 0.09388514 0.08008504 0.08771300 0.10761739
 0.10883223 0.08887073 0.13724700 0.09178788
  0.19953375  0.21260437 -0.91227860  0.32927277  0.09342081  0.19319866
  0.21367985  0.22326864  0.35040255  0.09689721
 1.596802e-03 4.426586e-02 0.000000e+00 1.829356e-01 5.535334e-18
 1.092012e-01 1.528876e-01 1.821066e-01 3.270063e-01 0.000000e+00
 0.02000000 0.03300903 0.02000000 0.17686650 0.02000000 0.09165413
 0.12623377 0.16992510 0.32231147 0.02000000
 0.05000000 0.05000000 0.05000000 0.20000000 0.05000000 0.16008348
 0.11292109 0.07699543 0.20000000 0.05000000
 5.431118e-02 3.091289e-02 4.159338e-17 2.000000e-01 0.000000e+00
 2.000000e-01 2.000000e-01 1.147759e-01 2.000000e-01 0.000000e+00
 0.02000000 0.02000000 0.02000000 0.21833697 0.02000000 0.16001791
 0.16107948 0.08907247 0.27149318 0.02000000
NoDur        Durbl        Manuf        Enrgy        HiTec        Telcm
0.497615869 -0.213681819  0.162570800 -0.009689487 -0.047806452  0.194800211
Shops         Hlth        Utils        Other
0.337721859 -0.032518014  0.232414214 -0.121427181
 1.130001e-03 5.184858e-02 2.565072e-17 2.493486e-01 0.000000e+00
 9.218392e-02 1.245892e-01 1.959186e-01 2.849811e-01 0.000000e+00
 0.02000000 0.03587518 0.02000000 0.24082550 0.02000000 0.07715694
 0.10209835 0.18173042 0.28231361 0.02000000
```

RiskPortfolios documentation built on May 17, 2021, 1:10 a.m.