Path: blob/master/demo/demo_max_quadratic_utility.R
1433 views
#' ---1#' title: "Maximizing Quadratic Utility Demo"2#' author: Ross Bennett3#' date: "7/17/2014"4#' ---56#' This script demonstrates how to solve a constrained maximimum quadratic7#' utility portfolio optimization problem.89#' Load the package and data10library(PortfolioAnalytics)11data(edhec)12R <- edhec[, 1:10]13funds <- colnames(R)1415#' Construct initial portfolio with basic constraints16init.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")20#' Here we can set the risk_aversion parameter to control how much risk21#' is penalized.22init.portf <- add.objective(portfolio=init.portf, type="risk", name="StdDev",23risk_aversion=4)24init.portf2526#' Maximizing quadratic utility can be formulated as a quardratic programming27#' problem and solved very quickly using optimize_method="ROI". Although "StdDev"28#' was specified as an objective, the quadratic programming problem uses the29#' variance-covariance matrix in the objective function.30maxQU.lo.ROI <- optimize.portfolio(R=R, portfolio=init.portf,31optimize_method="ROI", trace=TRUE)32maxQU.lo.ROI3334plot(maxQU.lo.ROI, risk.col="StdDev",35main=expression("Long Only Max Quadratic Utility" ~ lambda ~"=0.25"))3637#' A risk aversion parameter that is very small, will effectively make the term38#' that penalizes risk zero and approximates the maximum return. Note that the39#' risk_aversion parameter must be non-zero.40init.portf$objectives[[2]]$risk_aversion <- 1e-64142maxQU.maxret.ROI <- optimize.portfolio(R=R, portfolio=init.portf,43optimize_method="ROI", trace=TRUE)44maxQU.maxret.ROI4546plot(maxQU.maxret.ROI, risk.col="StdDev",47main=expression("Long Only Max Quadratic Utility" ~ lambda ~"= 1e-6"))4849#' A risk aversion parameter that is very large will heavily penalize the risk50#' term in the objective function and approximates the minimum variance portfolio.51init.portf$objectives[[2]]$risk_aversion <- 1e65253maxQU.minvol.ROI <- optimize.portfolio(R=R, portfolio=init.portf,54optimize_method="ROI", trace=TRUE)55maxQU.minvol.ROI5657plot(maxQU.minvol.ROI, risk.col="StdDev",58main=expression("Long Only Max Quadratic Utility" ~ lambda ~"= 1e6"))59606162