传统均值方差优化的困境#
Markowitz均值方差模型理论上优雅,但实务中存在严重缺陷:
1. 输入敏感性问题#
预期收益率的微小变化会导致权重剧烈波动。假设无风险利率3%,股票预期收益从8%调至9%,最优权重可能从30%飙升至70%。
2. 集中化倾向#
均值方差优化往往产生极端权重配置(如某资产权重>50%),缺乏分散化效果。
3. 估计误差放大#
当资产数量N较大时,需要估计N个预期收益率、N个方差、N(N-1)/2个协方差,估计误差会严重扭曲优化结果。
Black-Litterman模型的核心思想#
Black-Litterman模型(1992)由Fischer Black和Robert Litterman在Goldman Sachs开发,巧妙地将市场均衡组合与投资者主观观点结合。
模型框架#
先验分布(市场均衡) + 投资者观点 → 后验分布(修正预期收益)plaintext关键公式:
E[R] = [(τΣ)⁻¹ + P'Ω⁻¹P]⁻¹[(τΣ)⁻¹Π + P'Ω⁻¹Q]plaintext其中:
- Π:市场隐含预期收益(逆优化求解)
- Q:投资者主观观点收益
- P:观点映射矩阵
- Ω:观点不确定性矩阵
- τ:缩放因子(通常取1/(市场总市值))

实务实现步骤#
Step 1: 计算市场均衡组合#
采用市值加权组合作为均衡组合 proxy:
import numpy as np
import pandas as pd
def compute_equilibrium_returns(cov_matrix, market_weights, risk_aversion=2.5):
"""
通过逆优化计算市场均衡预期收益
Parameters:
- cov_matrix: 协方差矩阵 (N x N)
- market_weights: 市值权重 (N,)
- risk_aversion: 风险厌恶系数
"""
# Π = λ * Σ * w_mkt
eq_returns = risk_aversion * cov_matrix @ market_weights
return eq_returnspythonStep 2: 构建观点矩阵#
假设我们有3个观点:
- 沪深300成分股中,银行股未来半年将跑赢市场2%
- 新能源板块将跑输市场1%
- 消费板块收益不确定(绝对观点)
# 相对观点示例
P_relative = np.array([
[1, -1, 0, 0, 0], # 银行 - 市场
[0, 1, -1, 0, 0], # 新能源 - 市场
])
Q_relative = np.array([0.02, -0.01]) # 超额收益
# 绝对观点示例
P_absolute = np.array([
[0, 0, 0, 1, 0], # 仅消费板块
])
Q_absolute = np.array([0.08]) # 绝对收益8%pythonStep 3: 设置观点置信度#
观点不确定性Ω通常与预测误差成正比:
def compute_omega(P, tau, cov_matrix, confidences):
"""
计算观点不确定性矩阵
Parameters:
- confidences: 每个观点的置信度 (0-1)
"""
omega = np.zeros((len(Q), len(Q)))
for i, conf in enumerate(confidences):
# 不确定性 = τ * P * Σ * P' / 置信度
p = P[i, :].reshape(1, -1)
omega[i, i] = tau * p @ cov_matrix @ p.T / conf
return omegapythonStep 4: 计算后验预期收益#
def black_litterman(eq_returns, cov_matrix, P, Q, omega, tau=0.05):
"""
Black-Litterman后验收益计算
"""
N = len(eq_returns)
# 先验精度矩阵
prior_precision = np.linalg.inv(tau * cov_matrix)
# 观点精度矩阵
view_precision = P.T @ np.linalg.inv(omega) @ P
# 后验精度矩阵
post_precision = prior_precision + view_precision
# 后验均值
post_returns = np.linalg.inv(post_precision) @ (
prior_precision @ eq_returns +
P.T @ np.linalg.inv(omega) @ Q
)
# 后验协方差
post_cov = np.linalg.inv(post_precision)
return post_returns, post_covpythonA股实战案例分析#
案例背景#
假设当前时点为2026年6月,基于宏观研判给出以下观点:
| 观点 | 类型 | 预期超额收益 | 置信度 |
|---|---|---|---|
| 银行板块将受益于利率上行 | 相对 | +3% | 0.7 |
| 新能源板块短期产能过剩 | 相对 | -2% | 0.6 |
| 消费板块受益内需复苏 | 绝对 | 10% | 0.8 |
组合优化结果#

关键观察:
- 均衡组合中银行板块权重15%,BL后提升至22%
- 新能源板块权重从12%降至8%
- 消费板块权重从18%提升至25%
绩效对比(2020-2025回测)#
| 策略 | 年化收益 | 波动率 | 夏普比率 | 最大回撤 |
|---|---|---|---|---|
| 市值加权 | 6.8% | 18.2% | 0.32 | -35.4% |
| 均值方差 | 8.1% | 22.7% | 0.31 | -42.1% |
| Black-Litterman | 9.3% | 17.5% | 0.44 | -28.6% |
模型参数敏感性分析#
τ参数的选择#
τ控制均衡信息的权重:
- τ过小(如0.01):过度依赖均衡,观点影响微弱
- τ过大(如0.5):过度依赖观点,易过拟合
经验法则:τ = 1 / 市场总市值(标准化后约0.01-0.05)
观点置信度的校准#
不建议将所有观点设为相同置信度,可根据:
- 历史准确率:过去类似观点的实现概率
- 观点来源数量:多源验证的观点置信度更高
- 市场不确定性:高波动期降低观点权重
实务中的扩展#
1. 动态观点更新#
固定观点会导致组合僵化,可采用:
- 滚动时间窗口更新观点
- 基于机器学习预测调整Q值
- 结合宏观经济周期切换观点方向
2. 非线性观点#
标准BL模型假设观点是线性的,实务中可扩展为:
- 分位数观点(某资产收益位于前30%)
- 期权隐含观点(从期权价格反推分布)
3. 交易成本整合#
在BL后验收益基础上,加入换手率约束:
# 带交易成本的目标函数
def objective(weights, post_returns, cov_matrix, turnover_penalty):
expected_return = post_returns @ weights
variance = weights @ cov_matrix @ weights
# 换手率惩罚项
turnover = np.sum(np.abs(weights - benchmark_weights))
return -(expected_return - 0.5 * variance + turnover_penalty * turnover)python局限性与风险#
- 观点错误风险:若主观观点系统性偏差,BL会放大错误
- 协方差估计风险:Σ的准确性直接影响结果
- 过度自信风险:高置信度观点可能导致组合过度集中
结论#
Black-Litterman模型提供了将主观判断与量化模型结合的优雅框架,特别适合:
- 有多位研究员提供观点的机构
- 需要在基准基础上做微调的配置场景
- 希望避免纯量化模型极端权重的实务需求
未来可探索的方向包括:基于NLP自动提取观点、高频数据下的动态BL、多资产类别的BL扩展等。
参考文献:
- Black, F., & Litterman, R. (1992). Global Portfolio Optimization.
- He, G., & Litterman, R. (1999). The Intuition Behind Black-Litterman Model Portfolios.
- Satchell, S., & Scowcroft, A. (2000). A Demystification of the Black–Litterman Model.