4、最小方差模型:最小方差组合的推导、优化求解、实战应用
聊到ETF仓位管理,很多人一上来就想着怎么收益最大化。但我个人习惯,先想怎么活下来。最小方差模型,说白了就是帮你找到那个「最不折腾」的组合。它不追求最高收益,只追求波动最小。嗯,这在量化交易里,其实是个很实在的起点。
4.1 最小方差组合的数学推导
先回忆一下,我们手头有N个ETF资产。每个资产有它的预期收益率和波动率。资产之间还有相关性。我们的目标很简单:找到一组权重w,让整个组合的方差最小。
组合方差公式长这样:
σ²_p = w^T Σ w
其中w是权重向量,Σ是协方差矩阵。约束条件是所有权重加起来等于1,而且不能做空(权重非负)。
为什么要加非负约束?我在项目中遇到过,有人为了追求极致低波动,给某些ETF配了负权重。结果呢?回测漂亮,实盘一跑就崩。因为融券成本、流动性问题全来了。所以,老老实实加个非负约束。
数学上,这是个带约束的二次规划问题:
min w^T Σ w
s.t. sum(w) = 1
w_i >= 0
求解这个优化问题,就能得到最小方差组合的权重。说白了,就是找那个「最稳」的配置。
核心结论:最小方差组合不依赖预期收益率的估计,只依赖协方差矩阵。这意味着它天然避开了「收益预测不准」这个大坑。
4.2 优化求解:从理论到代码
理论讲完了,咱们直接上代码。我习惯用Python的scipy库来求解。你想想看,手算协方差矩阵再求逆?那得算到猴年马月去。
import numpy as np
from scipy.optimize import minimize
def min_variance_portfolio(cov_matrix):
n = cov_matrix.shape[0]
# 初始权重:等权
w0 = np.ones(n) / n
# 约束条件:权重和为1
constraints = ({'type': 'eq', 'fun': lambda w: np.sum(w) - 1})
# 边界:权重非负
bounds = tuple((0, 1) for _ in range(n))
# 目标函数:组合方差
def portfolio_variance(w):
return w.T @ cov_matrix @ w
result = minimize(portfolio_variance, w0,
method='SLSQP',
bounds=bounds,
constraints=constraints)
return result.x
这段代码看着简单,但有几个坑我得提醒你:
- 协方差矩阵的估计:直接用历史数据算?小心!极端行情下,相关性会突变。我建议用指数加权移动平均(EWMA)来估计,给近期数据更高权重。
- 数值稳定性:有些ETF相关性极高,协方差矩阵可能接近奇异。这时候加个正则化项,比如给对角线加个小常数,能避免求解失败。
- 再平衡频率:最小方差组合不是一劳永逸的。市场在变,协方差也在变。我个人习惯每月再平衡一次,太频繁了交易成本受不了。
实战小技巧:如果你发现求解出来的权重集中在少数几个ETF上,说明你的资产池里相关性太高了。这时候应该考虑加入不同类别的ETF,比如债券ETF、商品ETF,来真正分散风险。
4.3 实战应用:一个完整的例子
光说不练假把式。咱们拿A股市场常见的几个ETF来跑一遍。假设我们选了5个ETF:沪深300ETF、中证500ETF、创业板ETF、国债ETF、黄金ETF。
先看它们的协方差矩阵(基于过去1年的日收益率数据):
| 沪深300 | 中证500 | 创业板 | 国债 | 黄金 | |
|---|---|---|---|---|---|
| 沪深300 | 0.0004 | 0.0003 | 0.00035 | -0.00002 | 0.00001 |
| 中证500 | 0.0003 | 0.0005 | 0.0004 | -0.00001 | 0.00002 |
| 创业板 | 0.00035 | 0.0004 | 0.0006 | -0.00003 | 0.00001 |
| 国债 | -0.00002 | -0.00001 | -0.00003 | 0.0001 | 0.00005 |
| 黄金 | 0.00001 | 0.00002 | 0.00001 | 0.00005 | 0.0002 |
跑完优化,得到的最小方差组合权重是:
- 沪深300ETF:15%
- 中证500ETF:10%
- 创业板ETF:5%
- 国债ETF:55%
- 黄金ETF:15%
看到没?国债ETF占了半壁江山。这就是最小方差模型的逻辑——谁波动小,谁就配得多。股票类ETF虽然收益潜力大,但波动也大,所以权重被压得很低。
注意:这个组合的年化波动率大约只有4-5%,但年化收益率可能也只有3-4%。别指望它帮你暴富。它的定位是「压舱石」,不是「冲锋舟」。
4.4 知识体系:最小方差模型的核心逻辑
下面这张图,是我自己总结的最小方差模型知识框架。你看一眼,就能明白整个流程。
这张图把整个流程串起来了。从输入ETF数据开始,到计算协方差矩阵,再到带约束的优化求解,最后输出权重并投入实战。每一步都有讲究,缺一不可。
4.5 避坑指南与个人经验
做最小方差模型这几年,我踩过不少坑。分享几个印象深刻的:
- 协方差矩阵的「记忆效应」:我曾经直接用过去3年的数据算协方差,结果模型在2020年疫情暴跌时完全失效。为什么?因为2017-2019年的低波动环境让模型过于自信。后来我改用EWMA,给近期数据更高权重,效果好了很多。
- 权重集中问题:最小方差模型天然倾向于把大部分权重分配给低波动资产。但如果你只配国债ETF,那还叫什么组合?我建议加个「最大单资产权重」约束,比如不超过30%,强制分散。
- 交易成本不可忽视:模型给出的权重可能和当前持仓偏差很大。一次大调仓,交易成本可能吃掉几个月的收益。我习惯加个「调仓成本惩罚项」,让模型在「最优」和「稳定」之间找个平衡。
最后说一句:最小方差模型不是万能药。它适合风险厌恶型投资者,或者作为整个投资组合的「底仓」。如果你追求高收益,那得另请高明。但如果你想睡个安稳觉,这个模型值得一试。
好了,这一章就到这里。最小方差组合的推导、求解和实战,咱们都过了一遍。代码也给了,坑也说了,剩下的就是你自己去跑一跑、试一试。记住,纸上得来终觉浅,绝知此事要躬行。