Roadmap and Changelog


These are some of the things that I am thinking of adding in the near future. If you have any other feature requests, please raise them using GitHub issues

  • More objective functions, e.g risk-averse utility functions.
  • Optimising for higher moments (i.e skew and kurtosis)
  • Factor modelling: doable but not sure if it fits within the API.
  • Plotting the efficient frontier
  • Proper CVaR optimisation – remove NoisyOpt and use proper linear programming
  • Monte Carlo optimisation with custom distributions
  • Black-Litterman portfolio selection
  • Open-source backtests using either Backtrader or Zipline.
  • Further support for different risk/return models


  • Added prices_from_returns utility function and provided better docs for returns_from_prices.
  • Added cov_to_corr method to produce correlation matrices from covariance matrices.
  • Fixed readme examples.


  • Minor fix for clean_weights
  • Removed official support for python 3.4.
  • Minor improvement to semicovariance, thanks to Felipe Schneider.


  • Added CLA back in after getting permission from Dr Marcos López de Prado
  • Added more tests for different risk models.


  • Major improvements to discrete_allocation. Added functionality to allocate shorts; modified the linear programming method suggested by Dingyuan Wang; added postprocessing section to User Guide.
  • Further refactoring and docs for HRPOpt.
  • Major documentation update, e.g to support custom optimisers


Refactored shrinkage models, including single factor and constant correlation.


  • Migrated the project internally to use the poetry dependency manager. Will still keep and requirements.txt, but poetry is now the recommended way to interact with PyPortfolioOpt


  • Merged PR from TommyBark fixing a bug in the arguments of a call to portfolio_performance.


  • Merged an amazing PR from Dingyuan Wang that rearchitects the project to make it more self-consistent and extensible.
  • New algorithm: ML de Prado’s CLA
  • New algorithms for converting continuous allocation to discrete (using linear programming).
  • Merged a PR implementing Single Factor and Constant Correlation shrinkage.


  • Included python 3.7 in travis build
  • Merged PR from schneiderfelipe to fix error message.


  • Hierarchical Risk Parity optimisation
  • Semicovariance matrix
  • Exponential covariance matrix
  • CVaR optimisation
  • Better support for custom objective functions
  • Multiple bug fixes (including minimum volatility vs minimum variance)
  • Refactored so all optimisers inherit from a BaseOptimizer.


Minor bug fixes and documentation


Initial release:

  • Efficient frontier (max sharpe, min variance, target risk/return)
  • L2 regularisation
  • Discrete allocation
  • Mean historical returns, exponential mean returns
  • Sample covariance, sklearn wrappers.
  • Tests
  • Docs