In this script, I will plot the efficiency frontier for a portfolio of three stocks
if (!require(quadprog)) {
install.packages("quadprog")
require(car)
}
## Loading required package: quadprog
if (!require(ggplot2)) {
install.packages("ggplot2")
require(car)
}
## Loading required package: ggplot2
mu_return_vector <- c(0.05, 0.04, 0.06)
sigma <- matrix(c(0.01, 0.002, 0.005,
0.002, 0.008, 0.006,
0.005, 0.006, 0.012),
nrow=3, ncol=3)
D.Matrix <- 2*sigma
d.Vector <- rep(0, 3)
A.Equality <- matrix(c(1,1,1), ncol=1)
A.Matrix <- cbind(A.Equality, mu_return_vector,
diag(3))
exp_return <- seq(0.035,0.06,length.out = 50)
index <- 1:50
risk_appetite <- 1:50
for (i in index) {
b.Vector <- c(1, exp_return[i], rep(0, 3))
out <- solve.QP(Dmat=D.Matrix, dvec=d.Vector,
Amat=A.Matrix, bvec=b.Vector,
meq=1)
risk_appetite[i] <- out$value
}
df <- data.frame(risk_appetite, exp_return)
efficiency_frontier <- ggplot(data = df, aes(x = risk_appetite, y = exp_return)) + geom_line(color = 'red') +
xlab('Risk appetite') +
ylab('Expected return') +
ylim(0.035,0.06)
efficiency_frontier