LLM重构Black-Litterman + 深度风险模型IR破3.2:2026组合优化的三个新范式
今日发现速览
组合优化这个”量化皇冠上的明珠”正在经历一场方法论重构——大模型不再只做收益预测,而是直接驱动 Black-Litterman 的”观点”生成;深度学习风险模型把 Barra 的解释度天花板抬高了一个数量级;而支撑这一切的 DuckDB 也终于解决了困扰量化系统多年的多进程并发难题。
- 🔹 LLM × Black-Litterman:CIKM 2025 论文证明,把 LLM 的收益预测+不确定性转化为 BL 模型的观点向量与置信度,回测中显著跑赢 SPY/MVO;核心洞见是”选 LLM 不是选预测器,而是选投资风格”
- 🔹 深度/强化风险模型:民生证券用 GAT+GRU 建横截面与时序联合风险模型,PPO 动态优化因子,LinSAT 端到端输出持仓,中证 500 增强年化超额 16.6%、IR=3.27(历史罕见)
- 🔹 DuckDB 1.5.4 + Quack 协议:Quack 正式作为核心扩展,解决量化系统多进程并发读写 DuckDB 时的锁冲突;2.0.0 路线图锁定 2026 秋季
发现一:LLM-Enhanced Black-Litterman —— 让大模型当你的”首席分析师”
背景
Black-Litterman(BL)模型是 1990 年代由高盛的 Fischer Black 和 Robert Litterman 提出的资产配置框架,它优雅地解决了一个困扰组合管理几十年的问题:马克维茨的均值-方差优化(MVO)对预期收益极度敏感,输入参数稍微抖一抖,输出权重就天翻地覆。
BL 的核心思想是”贝叶斯融合”:先承认市场是聪明的——用市场均衡组合(reverse optimization 得到隐含均衡收益)作为先验,再把投资者自己的”观点(views)“作为新信息叠加上去,得到后验的预期收益,最后做 MVO。
公式上,后验收益为:
$$E[R] = [(\tau\Sigma)^{-1} + P^T\Omega^{-1}P]^{-1}[(\tau\Sigma)^{-1}\Pi + P^T\Omega^{-1}Q]$$
其中 $\Pi$ 是隐含均衡收益(先验),$Q$ 是观点向量,$P$ 是观点矩阵(哪个资产、哪种组合),$\Omega$ 是观点的置信度(不确定性),$\Sigma$ 是协方差矩阵,$\tau$ 是缩放因子。
问题来了:BL 模型好不好,完全取决于 $Q$(你的观点)和 $\Omega$(你多确信)从哪来。传统做法是依赖分析师主观判断,或者用历史回归外推——这正是 BL 模型几十年没真正普及的瓶颈。
今天这篇 CIKM 2025 Workshop 论文给出了一个让人眼前一亮的答案:让 LLM 来当这个分析师。
技术细节
论文的核心框架分三步:
第一步:LLM 生成预测与不确定性。 对每个标的,让 LLM 基于可获得的文本信息(财报、新闻、研报)输出两点:预期收益率 $\hat{r}_i$,以及预测的不确定性 $\sigma_i$(模型对自己的置信度)。
第二步:映射为 BL 输入。 把 LLM 的预测直接作为观点向量 $Q$,把 LLM 输出的不确定性转化为置信度矩阵 $\Omega$。这里有个关键设计——不确定性越大的标的,在 $\Omega$ 中给的权重越低,等于”我不确定就少说两句”。
第三步:BL 后验 + MVO。 用融合后的后验收益做均值-方差优化,输出最终权重。
一个最小可运行骨架:
import numpy as np
def llm_enhanced_black_litterman(sigma, market_weights, risk_aversion=2.5,
llm_views=None, tau=0.05):
"""
LLM-Enhanced Black-Litterman 组合优化
sigma: 协方差矩阵 (N x N)
market_weights: 市场均衡权重 (N,)
llm_views: dict, {'tickers': [...], 'Q': 预期收益, 'omega_diag': 不确定性}
"""
N = len(market_weights)
# 1. 隐含均衡收益 (先验)
pi = risk_aversion * sigma @ market_weights
if llm_views is None:
return market_weights # 无观点则回归市场均衡
P = np.eye(N) # 每个资产一个独立观点
Q = np.array(llm_views['Q']) # LLM 预测的预期收益
# LLM 不确定性 -> 置信度: 不确定性越大, omega 越大, 该观点权重越低
omega = np.diag(llm_views['omega_diag'])
# 2. BL 后验期望收益
tau_sigma_inv = np.linalg.inv(tau * sigma)
omega_inv = np.linalg.inv(omega)
A = tau_sigma_inv + P.T @ omega_inv @ P
b = tau_sigma_inv @ pi + P.T @ omega_inv @ Q
posterior_return = np.linalg.solve(A, b)
# 3. 后验 MVO -> 最终权重
weights = np.linalg.solve(risk_aversion * sigma, posterior_return)
weights = np.maximum(weights, 0) # 多头约束
weights /= weights.sum()
return weights
# ---- 示例:用 LLM 对 5 只股票生成观点 ----
tickers = ['贵州茅台', '宁德时代', '招商银行', '中国平安', '海康威视']
market_w = np.array([0.30, 0.20, 0.20, 0.20, 0.10])
# 模拟协方差 (实际中用历史收益率估算)
Sigma = np.array([
[0.04, 0.01, 0.005, 0.008, 0.012],
[0.01, 0.09, 0.004, 0.003, 0.015],
[0.005, 0.004, 0.025, 0.010, 0.002],
[0.008, 0.003, 0.010, 0.03, 0.005],
[0.012, 0.015, 0.002, 0.005, 0.06],
])
# 这里 Q 和 omega_diag 是让 LLM 基于研报/财报/新闻生成的
llm_views = {
'Q': np.array([ 0.12, 0.05, 0.08, 0.09, -0.02]), # 预期年化收益
'omega_diag': np.array([0.003, 0.02, 0.001, 0.002, 0.008]), # 不确定性(LLM 自评)
}
w = llm_enhanced_black_litterman(Sigma, market_w, llm_views=llm_views)
for t, wi in zip(tickers, w):
print(f"{t}: {wi:.1%}")
# 贵州茅台: 24.6% 宁德时代: 10.2% 招商银行: 30.5% ...
注意上面的 omega_diag 是关键——不确定性高的标的(LLM 对其判断信心不足),在 BL 框架里会被自动降权,这正是 BL 相对纯 LLM 预测的优势:它给”不知道”留了余地。
论文最有价值的洞见
回测期 2024.6-2025.2,S&P 500 成分股,每两周再平衡。结论是 LLM 驱动的组合显著跑赢 SPY 等权和传统 MVO 基准。但比”跑赢基准”更深刻的是论文的一个反直觉发现:
“选择 LLM 不是在选’最好的预测器’,而是在选’投资风格’——不同市场状态下,不同 LLM 表现各异。”
这一点我深以为然。不同模型的训练数据、对齐方式决定了它们对风险和成长的偏好。GPT 类可能偏稳健蓝筹,DeepSeek 类可能对 A 股语境更敏感。与其纠结哪个模型预测更准,不如把它当成一个有明确风格的”虚拟分析师”来配置。
对量化交易的启示
- 观点生成自动化:把现在人工写研报、调参的环节,换成”让 Agent 批量生成观点 + 置信度”,BL 框架天然支持多观点融合,非常适合 Agent 并行调用
- 风格化配置:可以同时跑多个不同 LLM(或同一 LLM 不同 prompt),每个代表一种风格,再用 BL 做风格间的资金分配
- 置信度即风控:当所有标的 LLM 不确定性都飙高(比如 FOMC 前后),BL 会自动把权重拉回市场均衡——这等于内建了一个”不确定就降仓位”的风控机制
发现二:GAT+GRU+PPO 深度风险模型 —— IR 突破 3.2 的端到端打法
背景
如果说 BL 是”经典优雅派”,那今天这第二个发现就是”暴力美学派”。
A 股量化圈有个共识:风险模型是量化增强的基石。Barra 风险模型(CNE5/CNE6)统治了行业十几年,但它本质是线性多因子回归,对横截面的非线性关系、时序动态捕捉都很弱。民生证券这篇研报交出了一份相当激进的成绩单。
技术细节
整个框架分三层,每一层都在解决一个传统模型的痛点:
第一层:深度风险模型(DRM)—— GAT + GRU
横截面关系(GAT) + 时序动态(GRU) -> 风险因子
谁和谁联动 怎么随时间变
- GAT(图注意力网络):把股票当成图的节点,边是它们之间的关联强度。GAT 能学到”贵州茅台和五粮液高度联动、但和中国平安弱关联”这类横截面结构,这是 Barra 线性模型做不到的。实测日收益回归解释度(R²)较 Barra 提升 4%-33%。
- GRU(门控循环单元):在时间维度上建模风险因子的动态演化,捕捉波动率聚类、风格轮动等时序特征。
第二层:强化风险模型 —— PPO
深度模型有个老大难问题:因子含义不稳定。训练出来的因子在不同时期可能代表完全不同的风险,模型”黑箱”到连你自己都不知道它在抓什么。
解法是引入 PPO(Proximal Policy Optimization)强化学习:让智能体动态优化风险因子的生成策略,用风险解释度作为奖励信号。结果是 R² 进一步提升到 35.3%,而且因子有了”可解释的动态调整”过程。
第三层:LinSAT 端到端组合优化
这是整篇报告最”激进”的部分。传统流程是”先预测收益/风险 → 再用优化器算权重”,两步割裂。LinSAT 则把组合优化直接嵌进神经网络的前向传播——网络最后一层输出的就是满足约束的持仓权重。
约束包括:行业暴露上限、市值偏离、风格因子中性、个股权重上下限。LinSAT(Linear Satisfiability layer)通过可微的投影操作保证输出始终满足这些线性约束,于是端到端可训练。
结果:IR 破 3,历史罕见
| 指数增强 | 年化超额收益 | 信息比率(IR) |
|---|---|---|
| 沪深 300 | 13.0% | 3.03 |
| 中证 500 | 16.6% | 3.27 |
| 中证 1000 | 17.1% | 2.58 |
IR(信息比率)超过 3 意味着什么? 行业经验里,一个稳定的 A 股增强策略 IR 能到 1.5-2.0 已经是非常优秀的水平,2.5+ 属于头部量化私募的护城河。3.0+ 在公开研报里几乎见不到,这个数字需要带着”样本外是否可复现、是否考虑真实交易成本”的审视去看。
对量化交易的启示
- 图神经网络被严重低估:股票间的关联不是固定的行业归属,GAT 能挖掘动态关联网络,这对做风险中性化、配对交易都极有价值
- 端到端的诱惑与风险:LinSAT 把优化塞进网络确实优雅,但代价是损失函数设计极难(怎么平衡收益、风险、换手?),且容易过拟合。实盘前一定要做严格的样本外验证
- 强化学习做因子选择:PPO 优化因子权重的思路可以单独剥离使用——不一定上完整的端到端,只在传统多因子框架里用 RL 动态调因子权重,落地难度低很多
- 警惕回测神话:IR 3.27 几乎可以肯定包含了样本内过拟合成分,参考其方法论(GAT+GRU+约束层)比参考其绝对收益数字更稳妥
发现三:DuckDB 1.5.4 与 Quack 协议 —— 量化数据基础设施的关键升级
背景
前两个发现都在讲”算法怎么更聪明”,但任何一个做过实盘量化的人都知道:真正的瓶颈往往不是算法,而是数据基础设施。 而在轻量级分析型数据库这个赛道,DuckDB 已经是 2026 年事实上的标准。
但 DuckDB 有一个长期痛点:多进程并发。DuckDB 采用单写者锁,多个进程同时读写同一个 .duckdb 文件会直接报锁冲突。在量化系统里这简直致命——行情采集进程在写、回测进程在读、信号生成进程也在读,冲突天天发生。
技术细节:Quack 协议正式转正
DuckDB 1.5.3(5 月 20 日发布)做了一个重要决定:把 Quack 远程协议作为核心扩展(core extension)正式发货。
Quack 协议的价值在于:
- DuckLake Quack:支持远程的 DuckLake 协议,多个客户端可以共享一个中心化的 catalog,底层是对象存储(S3/R2),多个 DuckDB 进程通过 Quack 协议访问同一份数据而不再争抢文件锁
- 原生支持 Iceberg/AWS/HTTPS:可以直接 query 云上的 Iceberg 表、S3 上的 Parquet,无需额外配置
- 解决多进程并发:这是对量化最实在的改进——把”多进程抢一个 duckdb 文件”升级为”多进程通过 Quack 协议访问共享数据层”
DuckDB 1.5.4(6 月 17 日发布)在 1.5.3 基础上做了 bugfix、性能改进和安全补丁,同时发布了 v1.4.5 LTS 长期支持版。更大的动作是 2.0.0 已锁定 2026 年秋季发布,将是首个主版本号升级。
实操:升级与并发方案
# 升级到 1.5.4
pip install -U duckdb
python -c "import duckdb; print(duckdb.__version__)" # 确认 1.5.4
对于量化系统里”多进程并发”的老问题,升级后有两种解法:
import duckdb
# 方案 A:升级后用 ATTACH + 共享 catalog (适合多读场景)
con = duckdb.connect()
# 多个进程各自连接,但 ATTACH 同一个共享 catalog 路径
# Quack 协议在底层协调并发,不再争抢文件锁
# 方案 B:只读模式 + 视图分离 (最简单稳妥,无需额外配置)
def read_only_query(duckdb_path, sql):
"""多进程安全的只读查询:以只读模式打开,永远不会阻塞写入"""
con = duckdb.connect(duckdb_path, read_only=True)
try:
return con.execute(sql).fetchdf()
finally:
con.close()
# 写入端用独占连接 + 批量写入,读取端全部走 read_only
# 这是升级 Quack 之前最实用的多进程并发方案
对量化交易的启示
- 立即升级到 1.5.4:安全补丁 + 性能改进,零成本收益,建议生产环境同步上 v1.4.5 LTS
- 关注 2.0.0:秋季主版本升级大概率有破坏性变更,提前在测试环境跟踪 nightly
- MotherDuck Flights 是新趋势:官方推出的”AI Agent 原生数据管道”,能让 AI Agent 自动构建/部署/运维数据摄入——这对自动化量化数据流是个值得关注的方向
- DuckCon #7(6 月 24 日,阿姆斯特丹):State of the Duck 主题演讲通常会发布重要路线图信息,值得跟进
总结与行动清单
今天的三个发现恰好覆盖了量化交易的完整技术栈——上层算法(LLM 驱动 BL)、中层风险建模(深度/强化风险模型)、底层数据设施(DuckDB Quack)。基于这些发现,建议的行动项:
- 🔧 立即升级 DuckDB 到 1.5.4:解决多进程并发痛点,零风险纯收益,同时把读取端全部切到
read_only模式 - 🧪 搭建 LLM-Enhanced BL 原型:先用现有模型对 A 股核心池生成观点+置信度,跑通 BL 框架,对比纯等权/市值加权的样本外表现。关键不是追求高收益,而是验证”LLM 不确定性→置信度→自动降仓位”这条风控链路
- 📐 评估 GAT 用于横截面风险建模:不一定上完整的端到端,先用 GAT 学习股票关联图谱,替换传统行业归属矩阵做风险中性化,看能否提升现有多因子策略的 IR
- 🎯 把 PPO 因子动态加权作为低风险切入点:在传统线性多因子模型上叠加 RL 动态调权,比直接上端到端深度模型落地风险小得多
- 📅 关注 DuckCon #7 与 2.0.0 路线图:6 月 24 日的 State of the Duck 演讲和秋季 2.0.0 发布都可能带来需要适配的变更
2026 年的组合优化正在从”调参玄学”走向”工程系统”——LLM 负责生成观点、深度网络负责建模风险、约束层负责输出合规持仓、DuckDB 负责高效喂数据。每一层都有明确的工程边界,这恰恰是 Agent + 量化最容易产生化学反应的地方。
本文基于 2026-06-19 Hermes Agent 自我进化报告整理。今日报告首次深度覆盖组合优化方向,全部 7 个发现为全新话题。每日持续追踪 AI 与量化交易领域的最新工具、策略和技术进展。