In this script, I will plot the efficiency frontier for a portfolio of three stocks

Load required packages

if (!require(quadprog)) {
    install.packages("quadprog")
    require(car)
}
## Loading required package: quadprog
if (!require(ggplot2)) {
    install.packages("ggplot2")
    require(car)
}
## Loading required package: ggplot2

Create vectors and matrices required for quadratic programming

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))

Create for loop to run quadratic programming equation over values expected return values from 3.5% to 6%

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
}

Plot efficiency frontier

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