Portfolio optimization.
R Example 8.1: Mean-variance portfolio, Efficient Frontier, minimum-variance portfolio, maximum return, and a graphical description of all portfolios in the efficient frontier, for five small-cap US equities monthly recorded return history between 1997 and 2001. The main package to use is fPortfolio from the suite of methods RMetrics. The equities are BKE, FCEL, GG, OII and SEB, contained in the dataset SMALLCAP.RET, which comes with the fPortfolio package.
library(fPortfolio) library(lpSolve) names(SMALLCAP) #to see the contents of the data set Data = SMALLCAP.RET #to get returns ##Extract a small sample for playing Data = Data[, c("BKE","FCEL","GG","OII","SEB")] ##Compute the sample mean of the returns of each stock ## and the sample covariance matrix. covData <- covEstimator(Data) ; covData ## Compute the unrestricted (long-short) Mean-Variance (MV) portfolio shortSpec <- portfolioSpec() setSolver(shortSpec) <- "solveRshortExact" shortFrontier <- portfolioFrontier(Data,spec=shortSpec, constraints="Short") print(shortFrontier) #report results for portfolio:1,13,25,37,50 ##Plot the Efficient Frontier Frontier <- shortFrontier frontierPlot(Frontier,frontier="both",risk="Sigma",type="l") ## Plot some portfolios minvariancePoints(Frontier,pch=19,col="red") #the MVP point ##Position of each asset in the sigma-mu plane singleAssetPoints(Frontier,risk="Sigma",pch=19,cex=1.5, col=topo.colors(6)) ## To compute the minimum variance portfolio (MVP), ## and a particular efficient portfolio for a given target return ##MVP: the minimum Variance. minvariancePortfolio(Data) ##EP(mu): an efficient portfolio for given target return mu = 0.05; Spec = portfolioSpec() setSolver(Spec) = "solveRshortExact" setTargetReturn(Spec) = mu efficientPortfolio(Data, Spec) ##To compute the global maximum return portfolio we use the ##linear programming solver lp to resolve the optimization ## problem for a vector of 5 unknown weights. ##MaxR: Global maximum return portfolio ## maximize: (w1,w2,w3,w4,w5)*covData$mu ## subject to: w1+w2+w3+w4+w5 = 1 ##Use the linear programming solver lp from lpSolve: f.obj <- covData$mu f.con <- matrix(c(1,1,1,1,1), nrow=1, byrow=TRUE) f.dir <- "=" f.rhs <- 1 lp ("max", f.obj, f.con, f.dir, f.rhs) lp ("max", f.obj, f.con, f.dir, f.rhs)$solution ##Result: a portfolio containing only FCEL ## A plot of all 50 portfolios along the Efficient Frontier for ## the given assets. The bold vertical line marks the MVP weightsPlot(Frontier) #####END