Back to Community
The efficient frontier: Markowitz portfolio optimization using cvxopt (repost; cloning of NB now enabled)

Resharing this post (original here: so that cloning is enabled.

In this post you will learn about the basic idea behind Markowitz portfolio optimization as well as how to do it in Python. We will then show how you can create a simple backtest that rebalances its portfolio in a Markowitz-optimal way. We hope you enjoy it and get a little more enlightened in the process.

Full blog post:

Loading notebook preview...
Notebook previews are currently unavailable.

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.

4 responses


I wonder whether it is possible to cap the weight of a single security within a portfolio, so as not to get portfolios that give almost 100% of the weight to 1 security.

daniel: Yes, that's quite simple to do in cvxpy. Unfortunatley the code still uses cvxopt where this is more difficult, but it shouldn't be too hard to port it (see

Many thanks for the quick reply, Thomas! One more question: Is there any reason that the mean returns are used for the frontier?

It would seem that it would be more accurate to use the following formula:
(Pt/P0)**(1/n) -1 Pt - price at the last date of the time series
P0 - price at the beginning of the time series
n - number of periods

a return series of (10%, -10%, 10%, -10%, 10%, -10%...) would have a mean of 0, but the actual return would be negative.

daniel: I see what you're getting at, but here we care about the expected future return, not historic return. As such, the mean is attempting to estimate that.