4、风险因子约束:风险因子暴露限制、因子中性化、风格因子约束
风险因子约束,说白了就是管住你的投资组合别在某个风险维度上「赌太大」。我刚开始做量化那会儿,觉得只要选股模型好就能赚钱,结果有一次因子暴露没控制好,市场风格一切换,回撤直接把我打懵了。从那以后,我再也不敢轻视这块。
这一节我们聊三个核心问题:风险因子暴露限制、因子中性化、风格因子约束。它们其实是同一个逻辑的不同应用场景。
4.1 风险因子暴露限制
什么叫风险因子暴露?简单说,就是你的组合在某个因子上的「敏感度」。比如你持仓里全是小盘股,那你在市值因子上的暴露就很高。一旦市场偏好大盘股,你就得挨打。
我个人习惯的做法是:先定义好哪些因子是「风险因子」,然后给每个因子设一个暴露上限。
组合因子暴露 = 持仓权重 × 个股因子值
约束条件:|组合因子暴露| ≤ 阈值
举个例子,假设我们限制市值因子暴露在 ±0.2 之间:
import numpy as np
import pandas as pd
# 假设我们有5只股票,市值因子值已知
factor_values = np.array([1.5, 0.8, -0.3, -1.2, 0.6])
weights = np.array([0.2, 0.2, 0.2, 0.2, 0.2])
portfolio_exposure = np.dot(weights, factor_values)
print(f"组合市值因子暴露: {portfolio_exposure:.2f}")
# 如果暴露超标,需要调整权重
if abs(portfolio_exposure) > 0.2:
print("⚠️ 暴露超标,需要重新平衡")
嗯,这里要注意:阈值怎么设?我一般用历史数据的 2 倍标准差作为参考。太严了影响收益,太松了风险失控。
4.2 因子中性化
因子中性化,说白了就是让组合对某个因子的暴露「归零」。为什么要这么做?因为你可能只想赚选股的钱,不想承担市场风格波动的风险。
我在项目中遇到过最典型的场景是:做多因子选股时,想剥离市值因子的影响。因为市值因子太强了,不中性化的话,选出来的股票全是小盘股,风险集中度很高。
因子中性化的实现方式有两种:
- 回归法:用个股收益对因子做回归,取残差作为中性化后的收益
- 权重调整法:直接约束组合的因子暴露为0
我个人更推荐回归法,因为它更灵活。看代码:
import statsmodels.api as sm
# 假设有100只股票,因子矩阵 X,收益向量 y
# X 包含市值因子、行业因子等
X = sm.add_constant(factor_matrix)
model = sm.OLS(y, X).fit()
# 残差就是中性化后的收益
neutral_returns = model.resid
print("中性化完成,残差均值:", neutral_returns.mean())
4.3 风格因子约束
风格因子约束,其实是前面两个概念的「实战版」。在真实的投资组合管理中,我们通常要同时约束多个风格因子,比如:
| 风格因子 | 约束范围 | 说明 |
|---|---|---|
| 市值 | ±0.3 | 避免过度偏向大盘或小盘 |
| 估值 | ±0.2 | 防止买得太贵或太便宜 |
| 动量 | ±0.15 | 控制追涨杀跌的风险 |
| 波动率 | ±0.1 | 限制高波动股票占比 |
你想想看,如果同时约束 5 个因子,那优化问题就变成了一个带多约束的二次规划。我常用的工具是 cvxpy:
import cvxpy as cp
# 定义变量:股票权重
w = cp.Variable(n_stocks)
# 目标函数:最大化预期收益 - 风险惩罚
objective = cp.Maximize(mu.T @ w - lambda_ * cp.quad_form(w, Sigma))
# 约束条件
constraints = [
cp.sum(w) == 1, # 满仓
w >= 0, # 不允许做空
cp.abs(factor_exposure @ w) <= 0.2 # 风格因子暴露限制
]
problem = cp.Problem(objective, constraints)
problem.solve()
print("最优权重:", w.value)
知识体系总览
下面这张图帮你理清这三个概念的关系:
说白了,这三个东西是一脉相承的:暴露限制是「设边界」,中性化是「归零」,风格约束是「多因子联合管控」。你在实际项目中,可以根据需求灵活组合使用。
我记得有一次做指数增强策略,基准是沪深300,但我的选股模型天然偏好小盘股。如果不加风格约束,组合和基准的跟踪误差会很大。后来我加了市值和估值两个因子的暴露限制,跟踪误差从 5% 降到了 1.5%,效果立竿见影。
最后提醒一句:风险因子约束不是越严格越好。太严格的约束会牺牲收益,太宽松又起不到风控作用。找到那个「甜点区间」,才是真正的功力所在。