Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
braverock
GitHub Repository: braverock/portfolioanalytics
Path: blob/master/sandbox/opt_parallel.R
1433 views
1
library(PortfolioAnalytics)
2
3
data(edhec)
4
R <- edhec[, 1:5]
5
funds <- colnames(R)
6
7
# Construct initial portfolio
8
init.portf <- portfolio.spec(assets=funds)
9
init.portf <- add.constraint(portfolio=init.portf, type="weight_sum",
10
min_sum=0.99, max_sum=1.01)
11
init.portf <- add.constraint(portfolio=init.portf, type="long_only")
12
init.portf <- add.objective(portfolio=init.portf, type="risk", name="StdDev")
13
14
# Run optimization with DEoptim
15
minStdDev.DE <- optimize.portfolio(R=R, portfolio=init.portf,
16
optimize_method="DEoptim",
17
search_size=2000,
18
traceDE=0,
19
trace=TRUE)
20
xtract.DE <- extractStats(minStdDev.DE)
21
22
# Here we extract the objective value returned from the optimizer of each
23
# iteration. I'm not sure how useful this information is.
24
obj.DE <- xtract.DE[,"out"]
25
hist(obj.DE)
26
rug(obj.DE)
27
plot(density(obj.DE))
28
qqnorm(obj.DE)
29
boxplot(obj.DE)
30
31
# Run optimization with random portfolios
32
minStdDev.RP <- optimize.portfolio(R=R, portfolio=init.portf,
33
optimize_method="random",
34
search_size=2000,
35
trace=TRUE)
36
xtract.RP <- extractStats(minStdDev.RP)
37
obj.RP <- xtract.RP[,"out"]
38
hist(obj.RP)
39
rug(obj.RP)
40
plot(density(obj.RP))
41
qqnorm(obj.RP)
42
boxplot(obj.RP)
43
44
# I think the best way is to do a sort of bootstrap by running several
45
# hundred or thousand (depending on your resources) optimizations and
46
# analyze the objective value from each optimal portfolio
47
opt <- optimize.portfolio.parallel(R=R,
48
nodes=50,
49
portfolio=init.portf,
50
optimize_method="random",
51
search_size=2000,
52
trace=TRUE)
53
opt
54
xx <- summary(opt)
55
obj_val <- xx$obj_val
56
57
# estimate of the objective measures, objective value, and weights from the
58
# optimal portfolio of each optimization
59
apply(xx$stats, 2, mean)
60
61
# plot the objective values from each optimization
62
hist(obj_val)
63
rug(obj_val)
64
plot(density(obj_val))
65
qqnorm(obj_val)
66
qqline(obj_val)
67
boxplot(obj_val)
68
69
# These should match the print method
70
# estimated objective value
71
mean(obj_val)
72
# percentile confidence interval estimate
73
quantile(obj_val, probs = c(0.025, 0.975))
74
75
76