I'd like to do a portfolio optimization of a set of ETF's but want to avoid traditional problems with normality assumptions in returns etc.

Are there techniques that let me sample 'draws' from the emprirical distribution and apply those to a monte-carlo style optimization?

I reviewed the question on monte carlo sampling from predicive distributions - this question is different -- I don't have a predictive distribution, and don't want to assume a gaussian.


5 Answers 5


You can use empirical distribution and use Mean-CVaR as a target function. CVar ("Expected shortfall") is considered a better risk metrics than VaR if we depart from the light-tailed normal distribution.

The code below is in R and is taken from the book "Portfolio Optimization with R/Rmetrics" By Diethelm Wuertz, Yohan Chalabi, William Chen, Andrew Ellis. It does Mean-CVaR optimization without any assumptions on distribution using open source Rmetrics package.


#use indicies LPP2005 see http://www.pictet.com/en/home/lpp_indices.html
lppData  <-  100*LPP2005.RET[,1:6]

#create a portfolio description
frontierSpec  <- portfolioSpec();

#optimization type - CVaR
setType(frontierSpec)  <- "CVAR"

#optimization solver
setSolver(frontierSpec)  <- "solveRglpk"

#confidence level for CVaR
setAlpha(frontierSpec)  <- 0.05

#number of portfolios in efficient frontier
setNFrontierPoints(frontierSpec)  <- 25

#optimize with long only constraints
frontier <- portfolioFrontier(data = lppData, spec = frontierSpec, constraints="LongOnly");

#plot the graphs
tailoredFrontierPlot(object=frontier,mText="Mean-CVaR Frontier (Long only)",risk="CVaR");

I'm sure if it's good idea to sample from your empirical distribution. By doing this you probably end up with an analogue of resampling technique for classical MV. This may improve the stability the optimization and provide smooth transition between portfolios for different risk levels.


The Portfolio Analytics package of R is an excellent package that can perform non-parametric portfolio optimization:



You can use Michaud's Resampled Efficient Frontier as a technique, or Atillio Meucci's Entropy Pooling.

In Michaud's approach you can sample returns with replacement for each of your assets. Based on these draws you can calculate the expectations, variances, and covariances for each simulation. You can then construct, say, a 1,000 efficient frontiers and use an averaging process to combine them. In my view there are some theoretical flaws with this technique although it tends to work in practice.

Meucci has several case-studies where he implements Entropy Pooling. Under this approach, I would create, say, a 1,000 expected return estimates for your various assets. Each of these can be represented with a view. The probability of each view being correct is 1/1000. You can then blend those views and construct a portfolio using a utility function of your choice (mean-variance, VaR, c-VaR).

Doug Martin has also published exciting work on tail-risk budgeting. If you want to take a portfolio construction approach to handling non-normality his slides are worth taking a look at.

Some interesting related literature for you would be Meucci's Robust Bayesian Allocation which will help you develop a robust optimization solution which I think is your ultimate objective.

How to implement these ideas are discussed elsewhere on the site: - Entropy Pooling


The method described in Brandt & Santa-Clara (2006) is somewhat different then that of the current answers and requires a bit more work but might be of interest nonetheless. Their ideas are further developed in a number of other papers.


approach relies on sample moments of the long-horizon returns of the expanded set of assets

in a Markowitz context.


Monte Carlo generates random walk which is z ~N(0,1) which you dont want to use so that is out of the way .

If you are looking at portfolio optimization where returns are non normal I also suggest that you have a look at this paper.

if you want to look at CVar then you can look at this one

  • $\begingroup$ Since when does Monte Carlo only do that? $\endgroup$
    – John
    Nov 21, 2012 at 4:21
  • $\begingroup$ maybe "only" was not right word. $\endgroup$
    – ash
    Nov 21, 2012 at 12:31

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.