Description Usage Arguments Details Value Author(s) References Examples
View source: R/optimalPortfolio.R
Function wich computes the optimal portfolio's weights.
1  | optimalPortfolio(Sigma, mu = NULL, semiDev = NULL, control = list())
 | 
Sigma | 
 a (N x N) covariance matrix.  | 
mu | 
 a (N x 1) vector of expected returns. Default:
  | 
semiDev | 
 a vector (N x 1) of semideviations.
Default:   | 
control | 
 control parameters (see *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.
A (N x 1) vector of optimal portfolio weights.
David Ardia, Kris Boudt and Jean-Philippe Gagnon Fleury.
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.
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)))
 | 
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.