library(PortfolioAnalytics)
data(edhec)
R <- edhec[,1:5]
funds <- colnames(R)
init.portf <- portfolio.spec(assets=funds)
init.portf <- add.constraint(portfolio=init.portf, type="weight_sum",
min_sum=0.99, max_sum=1.01)
init.portf <- add.constraint(portfolio=init.portf, type="box",
min=0.05, max=0.5)
init.portf <- add.objective(portfolio=init.portf, type="risk", name="StdDev")
init.portf <- add.objective(portfolio=init.portf, type="return", name="mean", multiplier=0)
p <- rep(1 / nrow(R), nrow(R))
V1 <- coredata(R[,1] - R[,2])
b1 <- mean(V1) - 2 * sd(V1)
V2 <- coredata(R[,5] - R[,4])
b2 <- mean(V2) - 1 * sd(V2)
Aeq <- matrix(1, ncol=nrow(R))
beq <- 1
p1 <- EntropyProg(p, t(V1), b1, Aeq, beq)$p_
p2 <- EntropyProg(p, t(V2), b2, Aeq, beq)$p_
p_ <- cbind(p, p1, p2) %*% c(0.35 , 0.25 , 0.4)
rp <- random_portfolios(init.portf, 10000)
opt.meucci <- optimize.portfolio(R,
init.portf,
optimize_method="random",
rp=rp,
trace=TRUE,
method="meucci",
posterior_p=p_)
opt.sample <- optimize.portfolio(R,
init.portf,
optimize_method="random",
rp=rp,
trace=TRUE)
stats.meucci <- extractStats(opt.meucci)
stats.sample <- extractStats(opt.sample)
chart.Weights(combine.optimizations(list(meucci=opt.meucci, sample=opt.sample)))
xrange <- range(c(stats.meucci[,"StdDev"], stats.sample[,"StdDev"]))
yrange <- range(c(stats.meucci[,"mean"], stats.sample[,"mean"]))
layout(matrix(c(1,2)), widths=1, heights=1)
par(mar=c(0, 4, 4, 4) + 0.1)
plot(x=stats.meucci[,"StdDev"], stats.meucci[,"mean"], xlab="", ylab="mean",
xlim=xrange, ylim=yrange, xaxt="n", yaxt="n")
axis(2, pretty(yrange), cex.axis=0.8)
legend("topright", legend="Meucci", bty="n")
par(mar=c(5, 4, 0, 4) + 0.1)
plot(x=stats.sample[,"StdDev"], stats.sample[,"mean"], xlab="StdDev", ylab="",
xlim=xrange, ylim=yrange, yaxt="n", cex.axis=0.8)
axis(4, pretty(yrange), cex.axis=0.8)
legend("topright", legend="Sample", bty="n")
par(mar=c(5, 4, 4, 2) + 0.1)
layout(matrix(1), widths=1, heights=1)