Quantopian's community platform is shutting down. Please read this post for more information and download your code.
Back to Community
Global Minimum Variance Portfolio Using Exponential Smoothing

http://en.wikipedia.org/wiki/Exponential_smoothing

When estimating parameters from time series data, it can often be a challenge to determine what data points are relevant and which are not. Exponential smoothing assigns exponentially decreasing weights over time, so more recent data points are weighted more heavily when a parameter is being estimated. We use exponential smoothing in our estimation of the covariances between assets. As covariances have been shown to be time-varying, we can improve our empirical analysis by smoothing.

The algorithm builds on the following Global Minimum Variance portfolio algorithm: https://www.quantopian.com/posts/global-minimum-variance-portfolio, achieving a lower beta, volatility, and maximum drawdown.

Ryan

Disclaimer

The material on this website is provided for informational purposes only and does not constitute an offer to sell, a solicitation to buy, or a recommendation or endorsement for any security or strategy, nor does it constitute an offer to provide investment advisory services by Quantopian. In addition, the material offers no opinion with respect to the suitability of any security or specific investment. No information contained herein should be regarded as a suggestion to engage in or refrain from any investment-related course of action as none of Quantopian nor any of its affiliates is undertaking to provide investment advice, act as an adviser to any plan or entity subject to the Employee Retirement Income Security Act of 1974, as amended, individual retirement account or individual retirement annuity, or give advice in a fiduciary capacity with respect to the materials presented herein. If you are an individual retirement or other investor, contact your financial advisor or other fiduciary unrelated to Quantopian about whether any given investment idea, strategy, product or service described herein may be appropriate for your circumstances. All investments involve risk, including loss of principal. Quantopian makes no guarantees as to the accuracy or completeness of the views expressed in the website. The views are subject to change, and may have become unreliable for various reasons, including changes in market conditions or economic circumstances.

7 responses

Is there something in numpy for finding the nearest correlation matrix, in the case that the smoothed covariance matrix is not positive semidefinite?

statsmodels cov_nearest looks like what I was thinking of.

Hey Simon,

Glad you found a library routine that works. Do you know which algorithm cov_nearest uses? There have been a few approaches developed to "correct" for a matrix that has negative eigenvalues. Take a look at these papers.

http://www.quarchome.org/correlationmatrix.pdf
http://eprints.ma.man.ac.uk/232/01/covered/MIMS_ep2006_70.pdf

Best,
Ryan

One of the problems I'd like to tackle next month is how to use the Yang-Zhang OHLC variance estimator to estimate a full covariance matrix from daily bar data. I am not sure, but strongly suspect, that I will run into problems with the matrices it produces. We'll see, though I doubt I'll be working in python to start.

Please the the attached backtest. The algorithm handles cases in which the covariance matrix is not positive semidefinite (i.e. has negative eigenvalues) and replaces the covariance matrix with a valid correlation matrix that is then given to the optimization. Source code from the statsmodels library is included. Two different algorithms for finding the 'nearest' positive semidefinite correlation matrix are given.

The attached backtest (see log files) demonstrates the covariance matrix correction algorithms. We generate a 5x5 random matrix on each iteration. If the covariance matrix of the random data is not positive semidefinite, we apply one of the algorithms to find the nearest positive semidefinite correlation matrix.

I was wondering,
when calculating the EWCM, shouldn't it make sense to apply the same weights in obtaining the means?