你有没有这种感觉:手里攥着几只股票,每只都觉得不错,可一到「每只该买多少」的时候,就只能拍脑袋。买多了怕跌,买少了又嫌赚得不够。其实早在七十年代,马科维茨就用一套数学公式回答了这个问题——均值方差模型。而今天这个库,把整套理论打包成了几行 Python,让你照着抄就能算出自己的最优持仓。
项目介绍
PyPortfolioOpt 是英国开发者 Robert Martin 写的组合优化库,5700 多颗星,MIT 协议,随便用。它的目标特别朴素:把「资产该配多少」这件事,从玄学变成数学。作者说得很直白——它受 scikit-learn 启发,追求「广而可扩展」。不管你是只挑了五六只票的基本面选手,还是手里一堆策略的量化交易员,它都能帮你把这些 alpha 源组合得更抗跌、更有效。
这库在学术圈也有名分,发过 JOSS 论文,PyPI 上一键安装。核心思想不复杂:给定一堆资产的预期收益和协方差,算出给定风险下收益最高的权重,或者反过来,给定收益下风险最低的权重。听起来像教科书,但它把门槛压到了「会写 Python 就能用」。
核心功能
第一个招牌是经典均值方差优化。用 EfficientFrontier 这个类,几行代码就能画出整条有效前沿,还能直接找到夏普比率最高的那个点,也就是「性价比最高」的组合。你只要把预期收益和协方差矩阵丢进去,剩下的它算。
第二个是 Black-Litterman 模型。这是给「有观点但不敢全信」的人准备的。你可以把「我觉得这只票会跑赢大盘五个点」这种主观判断喂进去,模型会把它和市场先验融合,输出一个修正过的收益向量,再拿去优化。比纯拍脑袋靠谱,又比盲信模型稳妥。
第三个是风险模型。除了最基础的样本协方差,它还提供 Ledoit-Wolf 收缩估计、指数加权等一票更稳的估计方法。样本协方差在资产多、样本少的时候很容易失真,这些收缩方法就是来救场的,实操里能明显提升稳定性。
还有层级风险平价 HRP,这是 López de Prado 提出的方法,不依赖协方差矩阵求逆,对奇异矩阵天然免疫,实盘里特别稳。另外 CVaR 优化、非凸优化这些进阶玩法也都有。
怎么上手
装起来一行命令:pip install pyportfolioopt。
用起来更简单。拿 pandas 读进价格数据,算出预期收益和协方差矩阵,然后三行代码出结果:构造 EfficientFrontier 对象、最大化夏普比率、输出权重。官方配了 cookbook 和完整文档,从「下载数据」到「建组合」全程手把手,不会的照着抄就行,十分钟能跑通第一个例子。
二万怎么看
优点很硬:API 干净,文档扎实,装完就能用,是学组合优化绕不开的入门库,作为研究原型够用。缺点也得说:它偏「经典派」,机器学习、因子模型那一套没深度集成进来;你要的复杂约束,比如行业中性、换手率限制,得自己想办法绕。也别指望它直接接实盘风控,那超出它的定位了。
换到做期货 CTA 的视角,这库真正的价值是给你一个「权重分配」的框架:当你有好几个策略信号,不知道该按什么比例合成时,把它们的收益序列当成「资产」,跑一遍均值方差或 HRP,能得到一个比简单等权讲究得多的合成方案。期货的高杠杆特性会放大配置错误,所以这一步更值得认真做。
适合谁:想系统学资产配置的个人投资者、量化入门选手、要做多策略资金分配的交易员。推荐指数四星半,扣半星是因为约束处理不够灵活。
如果觉得有用,点个「在看」支持二万每天分享一个好用的AI工具/思路关注我,一起搞懂AI
「不要把所有的鸡蛋放在一个篮子里。」这句老话,PyPortfolioOpt 帮你算出了每个篮子该放几个。
别再把仓位交给拍脑袋了,这个 5700 星的库,三行代码就能算出你的最优持仓。
—— 二万