Portfolio Optimization

• Markowitz’s Portfolio Optimization (1952) minimizes the portfolio variance for a given level of expected return, i.e., $\min_{\omega}\omega^T\Sigma\omega$ such that $\omega^T\mu=\mu_0,$ where $$\mu_0$$ is the expected level of return.

• Note that you need to provide $$\Sigma$$.

• However, in reality we do not know what is true $$\Sigma$$.

• So we should estimate the $$\Sigma$$.

• The popular estimator for $$\Sigma$$ is $S=\frac{1}{n-1}\sum_{i=1}^n(r_i-\bar{r})(r_i-\bar{r})^T.$

• You can use other estimators (like Bayes estimator) of $$\Sigma$$. This will provide a different frontier.

• You can do it easily using portfolio.optim in tseries package.

• Suppose you are considering the global portfolio with passive investment strategy, where you want to invest in the ETF of FTSE, DAX, SMI and CAC.

• Your annualized expected return is 12.5%.

• Consider annualized risk-free rate of return as 3%.

Index_Value<-as.matrix(EuStockMarkets)

## log-return in percentage terms
r<-diff(log(Index_Value))*100

## expected return
expected_return <- 12.5/252

## portfolio covariance
Sigma<-cov(r)

library(tseries)

port_optim<-portfolio.optim(r
,pm=expected_return
,covmat=Sigma
,rf=3/252)

## optimized portfolio weights

weight<-port_optim$pw*100 names(weight)<-colnames(EuStockMarkets) weight ## DAX SMI CAC FTSE ## 0.000000 16.560381 2.717417 80.722202 ## expected return port_optim$pm
## [1] 0.04960317
## volatility at optimized weights
port_optim$ps ## [1] 0.7633583 ### Plot the efficient frontier er<-seq(0.045,0.075,0.001) frontier<-matrix(NA,nrow=length(er),ncol=2) for(i in 1:length(er)){ port_optim<-portfolio.optim(r ,pm=er[i] ,covmat=Sigma ,rf=3/252) frontier[i,]<-c(port_optim$ps,port_optim\$pm)
}
plot(frontier,col="red",type = "l"
,xlab="volatility"
,ylab = "expected return")