#Read data for 10 stocks: a1 <- read.table("AMZN.csv", sep=",", header=TRUE) a2 <- read.table("COST.csv", sep=",", header=TRUE) a3 <- read.table("CVX.csv", sep=",", header=TRUE) a4 <- read.table("DIS.csv", sep=",", header=TRUE) a5 <- read.table("GILD.csv", sep=",", header=TRUE) a6 <- read.table("GS.csv", sep=",", header=TRUE) a7 <- read.table("LMT.csv", sep=",", header=TRUE) a8 <- read.table("MMM.csv", sep=",", header=TRUE) a9 <- read.table("PG.csv", sep=",", header=TRUE) a10 <- read.table("TSLA.csv", sep=",", header=TRUE) a11 <- read.table("^GSPC.csv", sep=",", header=TRUE) cov_matrix <- cov(a) #Convert adjusted close proces into returns: r1 <- (a1$Adj.Close[-1]-a1$Adj.Close[-nrow(a1)])/a1$Adj.Close[-nrow(a1)] r2 <- (a2$Adj.Close[-1]-a2$Adj.Close[-nrow(a2)])/a2$Adj.Close[-nrow(a2)] r3 <- (a3$Adj.Close[-1]-a3$Adj.Close[-nrow(a3)])/a3$Adj.Close[-nrow(a3)] r4 <- (a4$Adj.Close[-1]-a4$Adj.Close[-nrow(a4)])/a4$Adj.Close[-nrow(a4)] r5 <- (a5$Adj.Close[-1]-a5$Adj.Close[-nrow(a5)])/a5$Adj.Close[-nrow(a5)] r6 <- (a6$Adj.Close[-1]-a6$Adj.Close[-nrow(a6)])/a6$Adj.Close[-nrow(a6)] r7 <- (a7$Adj.Close[-1]-a7$Adj.Close[-nrow(a7)])/a7$Adj.Close[-nrow(a7)] r8 <- (a8$Adj.Close[-1]-a8$Adj.Close[-nrow(a8)])/a8$Adj.Close[-nrow(a8)] r9 <- (a9$Adj.Close[-1]-a9$Adj.Close[-nrow(a9)])/a9$Adj.Close[-nrow(a9)] r10 <- (a10$Adj.Close[-1]-a10$Adj.Close[-nrow(a10)])/a10$Adj.Close[-nrow(a10)] r <- (a11$Adj.Close[-1]-a11$Adj.Close[-nrow(a11)])/a11$Adj.Close[-nrow(a11)] rr <- as.data.frame(cbind(r1,r2,r3,r4,r5,r6,r7,r8,r9,r10)) #Compute the variance covariance matrixL: cov_matrix <- cov(rr) #Risk free asset: rf <- 0.001 #Compute the mean returns for each stock: means <- colMeans(rr) #Compute R vector: R <- means - rf #Compute z vector: z <- solve(cov_matrix) %*% R #Finally compute the portfolio weights (point of tangency): x <- z/sum(z)