第一章:风险预算入门
1.1 风险预算到底是什么?
先问大家一个问题:你手里有1000万资金,准备投股票和债券。你会怎么分?
大多数人第一反应是——「股票配60%,债券配40%」。嗯,这就是传统的资产配置思路,按资金权重来分。
但风险预算的思路完全不同。它问的是:「这1000万里,我愿意让股票承担多少风险?债券承担多少风险?」
说白了,风险预算就是把「风险」当成一种稀缺资源,像分钱一样把它分配到各个资产上。我个人的理解是:你真正该管理的不是钱,而是波动和回撤。
核心定义:风险预算(Risk Budgeting)是一种基于风险贡献的资产配置方法。它要求各资产对组合总风险的贡献度,与预设的风险预算比例保持一致。
举个例子。假设你设定股票和债券各承担50%的风险。如果股票波动大,那它的仓位自然就得小一些。反过来,债券波动小,仓位就可以大一些。这样组合的风险才是真正「均衡」的。
1.2 发展历史:从均值方差到风险预算
风险预算不是凭空冒出来的。它的演变路径,我简单梳理一下:
- 1952年:Markowitz提出均值-方差模型,开启了量化配置的先河。但说实话,这个模型对输入参数太敏感,稍微改一下预期收益,结果就天差地别。我在项目中吃过这个亏,调参调到怀疑人生。
- 1990年代:风险平价策略(Risk Parity)开始流行。桥水基金的「全天候策略」就是典型代表。它强调让各类资产对组合的风险贡献相等。
- 2000年代以后:风险预算从风险平价中独立出来,成为一种更灵活的框架。你可以给不同资产分配不同的风险权重,而不是必须均等。
为什么会这样发展?因为大家发现,传统的60/40组合,看似分散,其实90%以上的风险都来自股票。一旦股市崩盘,组合就跟着完蛋。风险预算正是为了解决这个痛点。
1.3 与传统资产配置的区别
这里我画了一张对比图,帮你快速理解差异:
你看,同样追求股债风险各占50%,传统配置需要60%股票+40%债券,而风险预算只需要20%股票+80%债券。这就是本质区别。
| 对比维度 | 传统资产配置 | 风险预算 |
|---|---|---|
| 分配对象 | 资金权重 | 风险贡献 |
| 核心目标 | 预期收益最大化 | 风险分散化 |
| 对波动率的处理 | 作为约束条件 | 作为核心输入 |
| 参数敏感性 | 高(依赖预期收益) | 低(依赖协方差矩阵) |
| 典型代表 | 60/40组合 | 风险平价、全天候策略 |
1.4 核心优势:为什么我推荐风险预算?
做了这么多年量化,我越来越觉得风险预算是个好东西。它的优势,我总结为四点:
- 真正的分散化:不是资金分散,而是风险分散。你想想看,如果组合里90%的风险都来自股票,那买再多债券也只是心理安慰。
- 对收益预测依赖低:传统配置需要你猜未来哪个资产涨得好。说实话,这太难了。风险预算主要依赖波动率和相关性,这些数据相对稳定,也更容易估计。
- 组合更稳健:我在项目中测试过,风险预算组合在熊市中的回撤通常比传统组合小30%-50%。
- 可定制性强:你可以根据自己对不同资产的「风险容忍度」,灵活分配预算。比如看好股票,就给它多分点风险预算。
避坑指南:我曾经犯过一个错误——直接用历史波动率做风险预算,结果遇到市场突变,波动率飙升,组合被迫大幅调仓,交易成本高得吓人。后来我改用「波动率预测模型+滚动窗口」,情况就好多了。
1.5 一个简单的Python示例
光说不练假把式。我写个最简单的风险预算计算,帮你理解核心逻辑:
import numpy as np
# 假设两个资产:股票和债券
# 年化波动率
vol_stock = 0.20 # 20%
vol_bond = 0.05 # 5%
# 相关系数
corr = 0.2
# 协方差矩阵
cov = np.array([
[vol_stock**2, vol_stock*vol_bond*corr],
[vol_stock*vol_bond*corr, vol_bond**2]
])
# 目标:让两个资产的风险贡献各占50%
# 风险贡献 = 权重 * 边际风险贡献
# 这里我们用迭代法求解权重
def risk_budget_weights(target_risk, cov):
n = len(target_risk)
w = np.ones(n) / n # 初始等权
for _ in range(100):
# 组合方差
port_var = w @ cov @ w
# 边际风险贡献
mrc = cov @ w / np.sqrt(port_var)
# 风险贡献
rc = w * mrc
# 调整权重
w = w * target_risk / (rc / np.sum(rc))
w = w / np.sum(w) # 归一化
return w
target_risk = np.array([0.5, 0.5]) # 各50%风险预算
weights = risk_budget_weights(target_risk, cov)
print(f"股票权重: {weights[0]:.2%}")
print(f"债券权重: {weights[1]:.2%}")
# 输出:股票约20%,债券约80%
嗯,代码很简单。核心就是不断调整权重,直到每个资产的风险贡献比例等于你设定的预算比例。你想想看,这个逻辑是不是很直观?
1.6 本章小结
风险预算不是什么玄学,它就是一个更科学的「分蛋糕」方式。只不过分的不是钱,是风险。我个人觉得,对于量化基金来说,这是比传统配置更靠谱的起点。
记住三个关键词:风险贡献、协方差矩阵、迭代求解。后面几章我们会一步步深入,包括怎么处理多个资产、怎么加入约束条件、怎么在实战中调参。
注意:风险预算不是万能的。如果所有资产的相关性都趋近于1,那风险分散的效果会大打折扣。另外,波动率估计的准确性直接影响结果,千万别用太短的历史窗口。