Compare risk measures - rhochreiter/scenportopt GitHub Wiki
Scenario-based portfolio optimization
Compare Markowitz, MAD and Expected Shortfall (CVaR) asset allocations
# 1. Load library and use demo data (DJIA, 2012, weekly returns)
library("scenportopt")
data(djia2012w)
# 2. Calculate optimal portfolios with different risk measures
# 2a. Markowitz
markowitz <- model <- optimal.portfolio(data)
# 2b. Expected Shortfall/CVaR with alpha=95% and alpha=90%
cvar95 <- optimal.portfolio(objective(model, "expected.shortfall"))
cvar90 <- optimal.portfolio(alpha(model, 0.1))
# 2c. Mean Absolute Deviation (MAD)
mad <- optimal.portfolio(objective(model, "mad"))
# 3. Plot Comparison
compare <- matrix(c(x(markowitz), x(mad), x(cvar95), x(cvar90)), nrow=nasset(model), byrow=FALSE)
barplot(t(compare), beside=TRUE, col=rainbow(4), las=3, names.arg=names(data), legend=c("Markowitz", "MAD", "CVaR (95%)", "CVaR (90%)"))
# 4. Add upper bounds (0.15) and repeat optimizations
markowitz <- model <- optimal.portfolio(upper.bound(portfolio.model(data), 0.15))
cvar95 <- optimal.portfolio(objective(model, "expected.shortfall"))
cvar90 <- optimal.portfolio(alpha(model, 0.1))
mad <- optimal.portfolio(objective(model, "mad"))
compare <- matrix(c(x(markowitz), x(mad), x(cvar95), x(cvar90)), nrow=nasset(model), byrow=FALSE)
barplot(t(compare), beside=TRUE, col=rainbow(4), las=3, names.arg=names(data), legend=c("Markowitz", "MAD", "CVaR (95%)", "CVaR (90%)"))