行业波动率度量:如何计算行业波动率
做低波动策略,第一步就是搞清楚——到底哪个行业更“稳”。
你可能觉得,看K线图,哪个上蹿下跳少,哪个就稳。嗯,直觉没错,但不够量化。我个人的习惯是,先拿数据说话。今天咱们就把行业波动率这件事,从计算到指标,掰开揉碎了讲清楚。
一、波动率到底怎么算?
说白了,波动率就是衡量价格“乱动”的程度。数学上,我们通常用收益率的标准差来表示。
具体步骤很简单:
- 拿到行业指数的每日收盘价
- 计算每日对数收益率:
ln(P_t / P_{t-1}) - 计算这些收益率的标准差
- 年化处理(乘以根号252)
我贴一段Python代码,你直接跑就行:
import numpy as np
import pandas as pd
# 假设df是行业指数日度数据,列名为'close'
df['return'] = np.log(df['close'] / df['close'].shift(1))
daily_vol = df['return'].std()
annual_vol = daily_vol * np.sqrt(252)
print(f"年化波动率: {annual_vol:.2%}")
我的小习惯: 我一般用过去252个交易日(约一年)的数据来算。太短了噪音大,太长了反应迟钝。你试试看,效果不错。
二、三个核心指标,一个都不能少
光看标准差还不够。我在项目中遇到过好几次,两个行业标准差差不多,但实际风险感受完全不同。为什么?因为波动来源不一样。
所以,我建议你同时看这三个指标:
| 指标 | 含义 | 我的用法 |
|---|---|---|
| 标准差 | 行业自身波动的绝对大小 | 快速筛选,剔除波动过大的行业 |
| Beta | 行业相对于大盘的敏感度 | 判断行业是“跟风涨跌”还是“特立独行” |
| 最大回撤 | 历史最惨跌幅 | 心理承受力测试,尤其适合做风控 |
三、Beta:别被大盘带偏了
Beta怎么算?其实就是行业收益率对大盘收益率的线性回归斜率。
import statsmodels.api as sm
# 假设market_return是大盘指数收益率
X = sm.add_constant(market_return)
model = sm.OLS(industry_return, X).fit()
beta = model.params[1]
print(f"行业Beta: {beta:.2f}")
Beta=1,说明行业和大盘同涨同跌。Beta=0.5,说明行业只有大盘一半的波动。Beta=1.5,那就是“放大器”,涨得猛跌得也狠。
重点来了: 低波动策略选行业,我一般偏好Beta在0.6-0.9之间的。太低了(比如公用事业)虽然稳,但涨不动;太高了(比如科技)回撤太大,拿不住。
四、最大回撤:最真实的“痛感”指标
标准差告诉你波动有多大,但最大回撤告诉你——最惨的时候你亏多少。
计算方式:从历史高点跌到低点的最大幅度。
def max_drawdown(price_series):
peak = price_series.expanding().max()
drawdown = (price_series - peak) / peak
return drawdown.min()
mdd = max_drawdown(df['close'])
print(f"最大回撤: {mdd:.2%}")
我曾经踩过一个坑:某个行业标准差很低,Beta也才0.7,看起来稳得很。结果一算最大回撤,-35%!为什么?因为它在某次危机中连续阴跌,虽然每天跌得不多,但跌了整整半年。嗯,这种“温水煮青蛙”式的波动,标准差根本反映不出来。
避坑指南: 千万不要只看标准差。我建议你把最大回撤作为“一票否决”指标——超过-30%的行业,直接排除。不管它其他指标多好看。
五、一张图看懂行业波动率度量体系
下面这张图,是我自己整理的知识框架。你一看就明白:
六、实战中我怎么做?
给你一个我自己的操作流程:
- 第一步: 用标准差筛掉波动率排名前30%的行业。这些行业太野,不适合低波动策略。
- 第二步: 看Beta,剔除Beta>1.2的行业。我不希望策略被大盘绑架。
- 第三步: 算最大回撤,排除历史回撤超过-25%的行业。这是风控底线。
- 第四步: 剩下的行业,再结合估值、股息率等基本面指标做最终选择。
一个小技巧: 我习惯把这三个指标做成一个“综合波动评分”,加权打分。标准差权重40%,Beta权重30%,最大回撤权重30%。分数越低,行业越稳。你试试看,比单看一个指标靠谱得多。
好了,行业波动率度量就讲到这里。记住一句话:波动率不是越小越好,而是要“可控”。下一章,咱们聊聊怎么用这些指标构建低波动组合。