Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
braverock
GitHub Repository: braverock/portfolioanalytics
Path: blob/master/demo/demo_opt_combine.R
1433 views
1
#' ---
2
#' title: "Combine Optimizations Demo"
3
#' author: Ross Bennett
4
#' date: "7/17/2014"
5
#' ---
6
7
#' This script demonstrates how to combine optimizations for analysis.
8
9
#' Load the package and data
10
library(PortfolioAnalytics)
11
library(DEoptim)
12
data(edhec)
13
R <- edhec[, 1:5]
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="leverage",
19
min_sum=0.99, max_sum=1.01)
20
init.portf <- add.constraint(portfolio=init.portf, type="long_only")
21
22
#' Construct portfolio with objective to maximize portfolio mean return per unit ES.
23
MeanES.portf <- add.objective(portfolio=init.portf, type="return", name="mean")
24
MeanES.portf <- add.objective(portfolio=MeanES.portf, type="risk", name="ES")
25
26
#' Construct portfolio with objective to maximize mean with risk budget
27
#' percent contribution limit.
28
MeanSD.portf <- add.objective(portfolio=init.portf, type="return", name="mean")
29
MeanSD.portf <- add.objective(portfolio=MeanSD.portf, type="risk_budget",
30
name="StdDev", max_prisk=0.35)
31
32
#' Construct portfolio with objective to minimize portfolio expected shortfall
33
#' with equal ES component contribution.
34
ESRB.portf <- add.objective(portfolio=init.portf, type="risk", name="ES")
35
ESRB.portf <- add.objective(portfolio=ESRB.portf, type="risk_budget",
36
name="ES", min_concentration=TRUE)
37
38
39
#' Run MeanES optimization.
40
MeanES.opt <- optimize.portfolio(R=R, portfolio=MeanES.portf,
41
optimize_method="DEoptim", search_size=2000,
42
trace=TRUE)
43
44
#' Run MeanSD optimization
45
MeanSD.opt <- optimize.portfolio(R=R, portfolio=MeanSD.portf,
46
optimize_method="DEoptim", search_size=2000,
47
trace=TRUE)
48
49
#' Run ES Risk Budget optimization
50
ESRB.opt <- optimize.portfolio(R=R, portfolio=ESRB.portf,
51
optimize_method="DEoptim", search_size=2000,
52
trace=TRUE)
53
54
#' Combine the optimizations.
55
opt <- combine.optimizations(list(MeanES=MeanES.opt, MeanSD=MeanSD.opt, ESRB=ESRB.opt))
56
57
#' Extract the objective measures from each optimize.portfolio object
58
#' evaluated at all objectives.
59
obj <- extractObjectiveMeasures(opt)
60
61
#' Extract the optimal weights from each optimize.portfolio object.
62
weights <- extractWeights(opt)
63
64
#' Chart the risk contributions for StdDev and ES.
65
chart.RiskBudget(opt, match.col="StdDev", risk.type="percentage", ylim=c(0,1), legend.loc="topright")
66
chart.RiskBudget(opt, match.col="ES", risk.type="percentage", ylim=c(-0.2,1), legend.loc="topright")
67
chart.RiskBudget(opt, match.col="ES", risk.type="percentage", plot.type="bar", ylim=c(-0.2,1), legend.loc="topright")
68
69
#' Chart the optimal weights from each optimize.portfolio object.
70
chart.Weights(opt, ylim=c(0,1))
71
chart.Weights(opt, plot.type="bar", ylim=c(0,1))
72
73
#' Chart the optimal portfolios in risk-reward space
74
chart.RiskReward(opt, main="Optimal Portfolios")
75
chart.RiskReward(opt, risk.col="StdDev", main="Optimal Portfolios")
76
77
78
79