#' ---1#' title: "Maximizing Sharpe Ratio Demo"2#' author: Ross Bennett3#' date: "7/17/2014"4#' ---56#' This script demonstrates how to solve a constrained7#' portfolio optimization problem to maximize Sharpe Ratio.89#' Load the package and data10library(PortfolioAnalytics)11data(edhec)12R <- edhec[, 1:8]13funds <- colnames(R)1415#' Construct initial portfolio with basic constraints.16init.portf <- portfolio.spec(assets=funds)17init.portf <- add.constraint(portfolio=init.portf, type="full_investment")18init.portf <- add.constraint(portfolio=init.portf, type="long_only")19init.portf <- add.objective(portfolio=init.portf, type="return", name="mean")20init.portf <- add.objective(portfolio=init.portf, type="risk", name="StdDev")21init.portf2223#' Maximizing Sharpe Ratio can be formulated as a quadratic programming24#' problem and solved very quickly using optimize_method="ROI". Although "StdDev"25#' was specified as an objective, the quadratic programming problem uses the26#' variance-covariance matrix in the objective function.2728#' The default action if "mean" and "StdDev" are specified as objectives with29#' optimize_method="ROI" is to maximize quadratic utility. If we want to maximize30#' Sharpe Ratio, we need to pass in maxSR=TRUE to optimize.portfolio.3132maxSR.lo.ROI <- optimize.portfolio(R=R, portfolio=init.portf,33optimize_method="ROI",34maxSR=TRUE, trace=TRUE)35maxSR.lo.ROI3637#' Although the maximum Sharpe Ratio objective can be solved quickly and accurately38#' with optimize_method="ROI", it is also possible to solve this optimization39#' problem using other solvers such as random portfolios or DEoptim. These40#' solvers have the added flexibility of using different methods to calculate41#' the Sharpe Ratio (e.g. we could specify annualized measures of risk and return).4243#' For random portfolios and DEoptim, the leverage constraints should be44#' relaxed slightly.45init.portf$constraints[[1]]$min_sum=0.9946init.portf$constraints[[1]]$max_sum=1.014748# Use random portfolios to run the optimization.49maxSR.lo.RP <- optimize.portfolio(R=R, portfolio=init.portf,50optimize_method="random",51search_size=2000,52trace=TRUE)53maxSR.lo.RP54chart.RiskReward(maxSR.lo.RP, risk.col="StdDev", return.col="mean")5556# Use DEoptim to run the optimization.57maxSR.lo.DE <- optimize.portfolio(R=R, portfolio=init.portf,58optimize_method="DEoptim",59search_size=2000,60trace=TRUE)61maxSR.lo.DE62chart.RiskReward(maxSR.lo.DE, risk.col="StdDev", return.col="mean")63646566