An Open-Source Implementation of the Critical-Line Algorithm for Portfolio Optimization
David H. Bailey
Lawrence Berkeley National Laboratory; University of California, Davis
Marcos Lopez de Prado
Guggenheim Partners, LLC; Lawrence Berkeley National Laboratory; Harvard University - RCC
February 1, 2013
Algorithms, 6(1), pp.169-196, 2013
Portfolio optimization is one of the problems most frequently encountered by financial practitioners. To our knowledge, the Critical Line Algorithm (CLA) is the only algorithm specifically designed for inequality-constrained portfolio optimization problems, which guarantees that the exact solution is found after a given number of iterations. Furthermore, CLA does not only compute a single portfolio, but it derives the entire efficient frontier. In the context of portfolio optimization problems, this approach is clearly more adequate than generic-purpose quadratic programming algorithms. The main goal of this paper is to fill a gap in the literature by providing a well-documented, step-by-step open-source implementation of CLA in a scientific language. The code is implemented as a Python class object, which allows it to be imported like any other Python module, and integrated seamlessly with pre-existing code. We discuss the logic behind CLA following the algorithm’s decision flow. In addition, we have developed several utilities that facilitate the answering of recurrent practical problems. We hope that this publication will offer a better alternative to financial practitioners, many of whom are currently relying on generic-purpose optimizers which often deliver suboptimal solutions. The source code can be downloaded at the authors' websites.
Number of Pages in PDF File: 29
Keywords: portfolio selection, quadratic programming, portfolio optimization, constrained efficient frontier, turning point, Kuhn-Tucker conditions, risk aversion
JEL Classification: C02, G11, G14, D53
Date posted: January 8, 2013 ; Last revised: January 2, 2016
© 2016 Social Science Electronic Publishing, Inc. All Rights Reserved.
This page was processed by apollobot1 in 1.375 seconds