GitHub 今日之星 | 2026年06月03日 周三
PyPortfolioOpt:Python 投资组合优化库
Python / MIT / ⭐5,761
今日推荐
如果你做量化投资,一定绕不开一个经典问题:手上有一篮子股票,怎么分配资金才能收益最高、风险最低?这就是马科维茨在 1952 年提出的现代投资组合理论。但理论归理论,真要把数学公式落地成可执行的代码,中间的坑比想象的多。PyPortfolioOpt 就是为此而生的——一个灵感来自 scikit-learn 的 Python 投资组合优化库,把经典的有效前沿、Black-Litterman 模型、层次风险平价这些方法,封装成了几行就能调用的 API。
创建者的初衷
项目作者 Robert Martin 是金融量化领域的研究者,他在 2018 年创建 PyPortfolioOpt 时,发现市面上已有的投资组合优化工具要么太学术化难以落地,要么封装太死无法灵活定制。他想做的是一个像 scikit-learn 一样模块化的库——用户可以轻松替换预期收益模型、风险模型、优化目标函数,而不需要重写整套流程。所以 PyPortfolioOpt 从第一天起就坚持"可插拔"的设计哲学,每个组件都可以单独替换。
技术架构
PyPortfolioOpt 的技术栈很简洁,核心依赖只有三个:numpy(数值计算)、pandas(数据处理)、cvxpy(凸优化求解器)。可视化部分依赖 matplotlib 和 seaborn。整个库的架构分为四层:预期收益估计(Expected Returns)、风险模型(Risk Models / Covariance)、目标函数(Objective Functions)、优化器(Optimizers)。用户可以从任意一层替换自己的实现,比如用自己的机器学习模型预测收益率,然后套用 PyPortfolioOpt 的风险模型和优化器。
核心功能
预期收益估计:提供三种方法——历史均值法(最简单直观)、指数加权法(给近期数据更高权重)、CAPM 模型(基于市场贝塔预测)。你可以按需选择,也可以传入自己算好的预期收益率。
风险模型:这是投资组合优化的重头戏。PyPortfolioOpt 提供了样本协方差、指数协方差、半协方差(只关注下行风险)、Ledoit-Wolf 收缩估计、Oracle Approximating Shrinkage 等多种方法。收缩估计尤其重要——样本协方差在高维数据中误差极大,收缩法通过将其与结构化估计器组合,显著降低错误权重的影响。
目标函数与优化器:支持最大夏普比率(默认选项)、最小波动率、有效前沿(给定目标收益最小化风险)、有效风险(给定目标风险最大化收益)、最大二次效用。约束条件方面,支持做多/做空、市场中性、个股权重上下限、L2 正则化减少零权重。这意味着你可以在十几行代码内实现一个专业的投资组合管理系统。
Black-Litterman 模型:这是 PyPortfolioOpt 最亮眼的高级功能。Black-Litterman 让你把市场隐含收益作为先验,加上你自己的主观观点,通过贝叶斯更新得到后验收益估计。这种方法比直接用历史均值靠谱得多,因为历史收益对未来收益的预测能力非常有限。
层次风险平价(HRP):用聚类算法把资产分组,然后在组内和组间进行风险分配,不需要协方差矩阵求逆,对噪声更鲁棒。这是近十年量化领域最热门的替代方案之一。
安装部署
一行命令即可安装:
pip install pyportfolioopt
如果你需要自己改源码,从 GitHub 克隆后 pip install 就行。项目内置了 20 支股票的测试数据集,安装完立刻可以跑 demo。
同类项目对比
QuantLib 是 C++ 金融库的老大哥,功能极其全面但学习曲线陡峭;QuantConnect/Lean 是一个完整的量化交易平台,更适合做回测和实盘交易;Zipline 是 Quantopian 的回测引擎,但已经停止维护;Backtrader 侧重策略回测,组合优化不是它的强项。PyPortfolioOpt 的独特定位是专注于投资组合优化这一个细分领域,API 设计得像 scikit-learn 一样简单,对量化研究员特别友好——你不需要是 C++ 高手,几行 Python 就能跑出有效前沿和最优权重。
可能带来的影响
对个人投资者来说,PyPortfolioOpt 大幅降低了投资组合优化的门槛。以前普通人想用马科维茨理论管理自己的仓位,要么用 Excel 手动算协方差矩阵(费力且容易出错),要么买昂贵的金融终端。现在一个 pip install 就能搞定。对量化团队来说,PyPortfolioOpt 模块化的设计很适合做快速原型验证——先用它跑基准结果,再用自己的私有模型替换某个组件。项目已被 Journal of Open Source Software 收录,在学术界也有一定影响力。
项目数据一览
- 开发语言:Python / Jupyter Notebook- 许可证:MIT- 当前 Stars:5,761- Forks:1,127- 创建时间:2018-05-29- 最近更新:2026-04-20- 文档:pyportfolioopt.readthedocs.io
"多元化是投资中唯一的免费午餐。"——哈里·马科维茨
如果你的投资组合还在凭感觉分配仓位,试试 PyPortfolioOpt,几行代码就能让你的资金配置从玄学变成科学。
—— 二万