Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
braverock
GitHub Repository: braverock/portfolioanalytics
Path: blob/master/demo/demo_max_quadratic_utility.R
1433 views
1
#' ---
2
#' title: "Maximizing Quadratic Utility Demo"
3
#' author: Ross Bennett
4
#' date: "7/17/2014"
5
#' ---
6
7
#' This script demonstrates how to solve a constrained maximimum quadratic
8
#' utility portfolio optimization problem.
9
10
#' Load the package and data
11
library(PortfolioAnalytics)
12
data(edhec)
13
R <- edhec[, 1:10]
14
funds <- colnames(R)
15
16
#' Construct initial portfolio with basic constraints
17
init.portf <- portfolio.spec(assets=funds)
18
init.portf <- add.constraint(portfolio=init.portf, type="full_investment")
19
init.portf <- add.constraint(portfolio=init.portf, type="long_only")
20
init.portf <- add.objective(portfolio=init.portf, type="return", name="mean")
21
#' Here we can set the risk_aversion parameter to control how much risk
22
#' is penalized.
23
init.portf <- add.objective(portfolio=init.portf, type="risk", name="StdDev",
24
risk_aversion=4)
25
init.portf
26
27
#' Maximizing quadratic utility can be formulated as a quardratic programming
28
#' problem and solved very quickly using optimize_method="ROI". Although "StdDev"
29
#' was specified as an objective, the quadratic programming problem uses the
30
#' variance-covariance matrix in the objective function.
31
maxQU.lo.ROI <- optimize.portfolio(R=R, portfolio=init.portf,
32
optimize_method="ROI", trace=TRUE)
33
maxQU.lo.ROI
34
35
plot(maxQU.lo.ROI, risk.col="StdDev",
36
main=expression("Long Only Max Quadratic Utility" ~ lambda ~"=0.25"))
37
38
#' A risk aversion parameter that is very small, will effectively make the term
39
#' that penalizes risk zero and approximates the maximum return. Note that the
40
#' risk_aversion parameter must be non-zero.
41
init.portf$objectives[[2]]$risk_aversion <- 1e-6
42
43
maxQU.maxret.ROI <- optimize.portfolio(R=R, portfolio=init.portf,
44
optimize_method="ROI", trace=TRUE)
45
maxQU.maxret.ROI
46
47
plot(maxQU.maxret.ROI, risk.col="StdDev",
48
main=expression("Long Only Max Quadratic Utility" ~ lambda ~"= 1e-6"))
49
50
#' A risk aversion parameter that is very large will heavily penalize the risk
51
#' term in the objective function and approximates the minimum variance portfolio.
52
init.portf$objectives[[2]]$risk_aversion <- 1e6
53
54
maxQU.minvol.ROI <- optimize.portfolio(R=R, portfolio=init.portf,
55
optimize_method="ROI", trace=TRUE)
56
maxQU.minvol.ROI
57
58
plot(maxQU.minvol.ROI, risk.col="StdDev",
59
main=expression("Long Only Max Quadratic Utility" ~ lambda ~"= 1e6"))
60
61
62