2. 风险预算入门:什么是风险预算?如何为不同行业设定风险预算?

2.1 风险预算到底是什么?

说白了,风险预算就是把「风险」当成一种稀缺资源来分配。

我刚开始做量化那会儿,总觉得风险预算是个高大上的概念。后来踩过几次坑才明白——它本质上就是回答三个问题:

  • 你能承受多大的回撤?
  • 这些回撤应该由哪些行业来「背锅」?
  • 每个行业最多能「花掉」多少风险额度?

举个例子。你手里有1000万资金,最大能接受15%的回撤。那你的总风险预算就是150万。接下来你要把这150万分配到不同的行业里。有的行业波动大,比如半导体,你可能只给它10%的风险预算;有的行业波动小,比如公用事业,你可以给它20%。

嗯,这里要注意:风险预算不是资金分配。资金分配是「每个行业投多少钱」,风险预算是「每个行业允许亏多少钱」。两者有本质区别。

核心公式:

风险预算 = 目标波动率 × 置信区间 × 投资期限

或者更直白一点:
行业风险预算 = 总风险预算 × 行业风险权重

2.2 为什么不能平均分配?

我见过不少新手,上来就把风险预算平均分给10个行业,每个行业10%。结果呢?

结果就是波动大的行业先爆仓,波动小的行业还在那慢慢悠悠。你想想看,半导体一天的波动可能抵得上公用事业一个月的波动。你把同样的风险预算给它们,半导体两天就用完了,公用事业一年都用不完。

所以,风险预算的分配必须考虑行业的固有波动率相关性

我个人习惯用「等风险贡献」的思路。什么意思?就是让每个行业对组合总风险的贡献度大致相等。这样不会出现某个行业「一家独大」的情况。

一个小技巧:

如果你刚开始做风险预算,可以从「等风险权重」起步。先让每个行业的风险贡献相等,再根据你的判断微调。这比拍脑袋分配靠谱得多。

2.3 如何为不同行业设定风险预算?

这里我分享一套我自己在项目中用过的流程,一共四步:

  1. 计算行业的历史波动率——用过去1-3年的日收益率数据,算出年化波动率。
  2. 设定行业风险乘数——根据你对行业的判断,给一个0.5到2之间的系数。比如你看好新能源,可以给1.2;觉得地产风险高,给0.8。
  3. 计算调整后的风险权重——用波动率的倒数乘以风险乘数,再归一化。
  4. 乘以总风险预算——得到每个行业的具体风险预算。

举个例子,假设总风险预算是100万,有三个行业:

行业 年化波动率 风险乘数 调整后权重 风险预算(万)
科技 35% 1.2 0.28 28
消费 20% 1.0 0.40 40
能源 40% 0.8 0.32 32

你看,科技波动率高,但乘数高,所以预算不算低;消费波动率低,乘数中性,预算反而最高。这就是风险预算的魅力——它不只看波动,还看你的主观判断。

2.4 避坑指南:我曾经犯过的错

我曾经在设定风险预算时,完全依赖历史波动率,忽略了行业的基本面变化。结果呢?

2020年疫情刚爆发那会儿,旅游行业的波动率突然飙升。按照历史数据,我应该给它更低的预算。但实际情况是,旅游行业已经跌到谷底,反而是抄底的好时机。如果按历史波动率给预算,就会错过机会。

所以,我的建议是:

  • 历史数据是参考,不是圣旨。要结合当前的市场环境和行业周期。
  • 定期调整风险预算。我一般每季度重新算一次,遇到重大事件随时调整。
  • 不要超过总风险预算。这是底线。一旦某个行业超了,必须减仓或者对冲。

重要提醒:

风险预算不是一成不变的。市场在变,行业在变,你的预算也要跟着变。我见过最惨的案例,就是有人设好了预算就不管了,结果市场风格切换,一个行业直接爆仓。

2.5 一张图看懂风险预算流程

下面这张图是我自己画的,把整个风险预算的流程串起来了。你可以保存下来,做配置的时候对照着看。

风险预算分配流程图 1. 确定总风险预算 最大回撤 × 资金规模 2. 计算行业波动率 历史数据 + 基本面调整 3. 设定风险乘数 主观判断 × 行业前景 4. 分配 归一化 输出:各行业风险预算 科技: 28万 | 消费: 40万 | 能源: 32万 定期回顾 & 动态调整

2.6 代码实现:一个简单的风险预算分配器

光说不练假把式。下面是我写的一个Python函数,可以直接算出每个行业的风险预算。你拿去改改就能用。

import numpy as np

def risk_budget_allocation(total_budget, volatilities, multipliers):
    """
    计算各行业风险预算
    
    参数:
        total_budget: float, 总风险预算(万元)
        volatilities: list, 各行业年化波动率
        multipliers: list, 各行业风险乘数
    
    返回:
        dict, 行业名称 -> 风险预算
    """
    # 计算调整后的权重
    raw_weights = [1/v * m for v, m in zip(volatilities, multipliers)]
    total_raw = sum(raw_weights)
    normalized_weights = [w / total_raw for w in raw_weights]
    
    # 分配预算
    budgets = [total_budget * w for w in normalized_weights]
    
    return budgets

# 示例
total = 100  # 总风险预算100万
vols = [0.35, 0.20, 0.40]  # 科技、消费、能源的波动率
mults = [1.2, 1.0, 0.8]  # 风险乘数

result = risk_budget_allocation(total, vols, mults)
print(f"科技: {result[0]:.1f}万")
print(f"消费: {result[1]:.1f}万")
print(f"能源: {result[2]:.1f}万")

输出结果:

科技: 28.0万
消费: 40.0万
能源: 32.0万

跟前面表格里的数据完全一致。你可以把volatilities和multipliers换成你自己的数据,跑一下就知道了。

我的习惯:

每次跑完这个函数,我都会把结果跟实际持仓对比一下。如果某个行业的风险预算远低于实际风险暴露,那就说明我该减仓了。这个对比动作,我每周做一次。

2.7 小结

风险预算这件事,说白了就是「量入为出」。你先知道自己能亏多少,再决定每个行业能亏多少。别贪,别赌,别想着一个行业翻盘。

我做了这么多年量化,见过太多人死在「重仓一个行业」上。风险预算就是你的安全带,系好了再上路。


公众号:蓝海资料掘金营,微信deep3321