社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

量化团队私藏Python库分享,让你3分钟学会机构级股票组合优化

老余捞鱼 • 3 周前 • 35 次点击  
图片
 点击上方蓝字 | 关注更多好文
写在前面的话


和大家分享一个量化团队经常会用的投资组合优化库,他们会用这个库结合AI量化技术,用来跑机构级最优组合。接下来我让我用几分钟,让你轻松掌握风险与收益的平衡,学会风险调优。
为什么要做股票组合优化?


 What is it ?
01

传统炒股就闭眼扔飞镖,而量化股票投资组合就是给飞镖装瞄准器。

举个例子:2023年美股"科技七巨头"平均涨105%,但如果你全仓英伟达,今年1月回调时你可能哭晕在厕所——这就是不懂风险分散的代价。

买股票不只是凭感觉,还要看“回报/风险”比。

而股票投资组合有很多种策略,今天我们重点讲一讲基于Python PyPortfolioOpt库的AI量化智能优化模式。

实战解析原理:等权vs优化


How to use ?
02

相比简单的等权配置,优化后组合往往能在相同风险水平下获取更高回报,且通过量化框架降低主观判断失误。接下来我给大家做 等权 vs 优化 的具体分析。

2.1


"雨露均沾"派:等权均分

心玩法每只股票都分到同样的钱,就像给每个孩子发相同数量的糖果。

优势

  • 操作简单,手机1分钟搞定;
  • 避免被某只暴雷股坑惨(比如去年某大药厂两天跌60%)。

缺点

可能错过超级牛股(2017年你平均买BAT,腾讯的涨幅会被另外两家拖累)。

2.2


"精准打击"派:智能优化

在现代投资中,组合优化通过 均值—方差理论(MPT)和有效前沿方法,帮助投资者在“预期收益”与“承担风险”之间找到最优平衡。

黑科技原理

  • 通过"智能天平"算法(原MPT理论);
  • 自动筛选"赚钱能力/波动风险"比最高的股票;
  • 重点配置2-3只强势股形成赚钱突击队。
2.3


实战效果对比

以2023年美股七巨头为例:

指标
平均分配派
AI优化派
变化趋势
年化收益
63.05%
105.56%
↑🚀42.51%
波动率
23.98%
37.05%
↑💣13.07%
性价比指标
2.63
2.85
↑🔼8.4%

重点解析

  • 收益暴涨密码:AI给英伟达(NVDA)配了28%仓位,元宇宙(META)给了22%;
  • 代价:遇到板块回调时(如24年1月AI股大跌),组合波动堪比坐过山车;
  • 适合人群:能承受20%以上波动的激进投资者。

具体表现差异

组合
预期年化收益
年化波动率
夏普比
等权重
63.05%
23.98%
2.63
优化(Max Sharpe)
105.56%
37.05%
2.85
  • 收益提升:+42.51 百分点,源于优化对 NVDA、META 的重度配置;

  • 风险放大:波动率增加 13.07 百分点,因资产选择更集中;

  • 风险调整后表现:夏普比提升 ~8.4%,证明每单位风险带来更多超额收益。

2.4


原理小结
  • 风险–收益权衡高回报标的往往伴随高波动,优化在收益提升的同时,也需承受波动增加;

  • 分散 vs 集中优化组合将放弃部分分散优势以赢取更高回报;

  • 模型假设局限输入(收益、协方差)估计误差会影响结果,需稳健性检验与约束管理。

手把手教你


Solution Details
03

下面分三步,为大家逐一剖析如何在用 Python 搭建一个完整的“抓数据→算指标→调模型”流程。

3.1


数据获取与清洗
  • 工具选型:采用 yfinance,支持多只股票一次性拉取历史数据。

  • 关键思路:拉取 调整后收盘价(考虑分红拆股),并使用前向填充 fillna 处理偶发缺失。

import yfinance as yf
tickers = ["AAPL","MSFT","AMZN","GOOGL","META","NVDA"]data = yf.download(    tickers,    start="2023-01-01",    end="2024-12-31",    auto_adjust=True     # 自动调整价格)["Close"].fillna(method="ffill")

auto_adjust=True 可自动将拆股、分红体现到价格中,避免后期手动调整。

3.2


计算预期收益与风险
  • 预期收益:用历史日收益的年化平均估算,等同于 期望收益 = 日收益率均值 × 252

  • 协方差矩阵:样本协方差刻画各股之间的联动性,风险模型可选基础样本、指数加权或收缩等方法。

from pypfopt import expected_returns, risk_models
# 历史均值法:年化期望收益mu = expected_returns.mean_historical_return(data)
# 样本协方差:计算日收益协方差后年化S  = risk_models.sample_cov(data)
3.3


构建模型并生成最优组合
  • 有效前沿框架:基于均值—方差目标,调用 EfficientFrontier 类自动求解最优组合。

  • 最大化夏普比:即在剔除无风险收益后,使“超额收益/波动”最大。

from pypfopt import EfficientFrontier
ef = EfficientFrontier(mu, S)raw_weights = ef.max_sharpe()      # 最大夏普比clean_weights = ef.clean_weights() # 清除微小权重
3.4


优化驱动内因

在本案例中,算法给 NVDA 配置了 56.78%、给 META 配置了 36.02%,而基本忽略了 AAPL、AMZN、GOOGL、MSFT。

均值—方差权重转移
均值—方差优化会自动将资金往“回报/风险”比更高的资产倾斜。

集中度与分散度的取舍

  • 好处:高度集中在优质股票上能带来更高收益。

  • 风险:集中度高意味着如果某只重仓股大幅下跌,组合也会受到较大冲击。传统的分散投资可以平滑单一股票的极端波动。

3.5


优化性能对比
  • 预期年化收益率提升:优化后组合的预期收益由 63.05% 提升至 105.56%,增加了 42.51 个百分点。这主要得益于将更高预期回报的股票(如 NVDA、META)加大权重。

  • 波动率增加:年化波动率从 23.98% 上升到 37.05%,说明优化组合风险也同步放大,因为权重集中在波动性更高的资产上。

  • 夏普比率提高:风险调整后收益(夏普比)从 2.63 提高到 2.85,表明新增收益完全补偿了额外承担的风险,风险调整效率更高。

3.6


权衡与后续建议

1. 集中风险

  • 优势:充分挖掘最具alpha潜力的个股。

  • 劣势:缺乏其他资产的“缓冲”,单只股票波动主导全盘表现。

2. 可行对策

  • 添加约束:例如对每只股票设置最高 30% 的权重上限,或对低权重股票设置下限,以防止权重过度集中。

  • 扩大标的范围:加入其他行业、债券或国际市场等资产,以降低组合整体波动。

3. 定期再平衡与稳健性检验

  • 再平衡:定期调整至目标权重,防止权重漂移。

  • 稳健性测试:改变估计窗口、风险厌恶参数或协方差模型,检验结果稳定性。

优化后的组合在风险调整后收益方面取得了明显提升(夏普比提高约 8%),实现了均值—方差优化的预期目标。但前提是你能接受更高的波动率。如果想进一步降低集中风险,可以在优化过程中加入行业/单只股票权重约束扩充投资标的,然后再次优化。

④观点总结


 Summary of Views
04

AI 智能配仓让你比盲目买买买更有底气。用简单的Python库,几十行代码就能算出最适合自己的“牛股狂欢”组合,再通过对比验证效果。想玩得更稳,就给组合加点“护栏”——行业、权重上限或多样化,就能在追求收益的路上既爽又安全。

  • 预处理、估算、优化、回测:四步走;
  • 优化组合提升夏普比,但要注意集中风险;
  • 约束、再平衡、多模型:稳健优化的三大法宝;
  • 欢迎动手实操,改换股票池,创造属于你的最优配置!
⑤源码下载


Code Download
05

本文相关代码已在 Google Colab 实测通过,下载即用。祝大家都能在股海里把“风险”当鱼饵,“收益”当鱼获!

如觉得对您有所帮助,请我喝杯咖啡。

下载地址如下:

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/182118
 
35 次点击