DataWhale—量化金融(task6-理解波动率)

📈 量化金融笔记 ------ 理解波动率

目录

  1. 波动率理论发展脉络
  2. 为什么两只收益相同的股票,体验完全不同?
  3. 什么是波动?
  4. 用收益率观察波动
  5. 波动率是什么?
  6. 波动率度量与区间预测
  7. 波动率的基础定义详解及公式推导
  8. 高级主题:方差修正与偏差校正
  9. 三股票日/年化波动率对比
  10. 10只Ticker批量波动率排名
  11. 波动率为什么会让人亏钱?
  12. 作业解答
  13. 本期学习总结与个人感悟
  14. 完整代码附录

一、波动率理论发展脉络

时间 人物 贡献
1900年 路易·巴舍利耶 《投机理论》,首次用布朗运动描述股价
1952年 马科维茨 现代投资组合理论,用方差度量风险
1973年 布莱克-斯科尔斯 BS期权定价模型,引入隐含波动率
1982年 恩格尔 ARCH模型,波动率聚类现象
1986年 泰勒 实现波动率(Realized Volatility)
1993年 摩根大通 VaR(风险价值)模型,RiskMetrics
1994年 丹斯肯-兰德 随机波动率模型(SV)
2003年 安德森-玻勒斯莱夫 实现波动率理论完善

二、为什么两只收益相同的股票,体验完全不同?

核心洞察:收益率相同 ≠ 投资体验相同

股票A 股票B
第1年:+10% 第1年:+50%
第2年:+10% 第2年:-30%
两年总收益:21% 两年总收益:+5%
年化收益:10% 年化收益:2.5%
体验:安稳睡觉 体验:心脏病发作

数学解释

  • 算术平均:A=(10+10)/2=10%,B=(50-30)/2=10%
  • 几何平均(实际收益):A=sqrt(1.11.1)-1=10%,B=sqrt(1.50.7)-1=2.5%

波动率侵蚀收益:高波动导致"复利衰减",同样的算术平均,波动越大,实际几何收益越低。


三、什么是波动?

波动= 价格变动的幅度和频率

类型 定义 例子
上行波动 价格上涨的剧烈程度 利好消息后的暴涨
下行波动 价格下跌的剧烈程度 黑天鹅事件后的暴跌
双向波动 价格上下震荡的幅度 震荡市中的反复拉锯

关键区分

  • 波动 ≠ 风险(波动是中性概念,风险是主观感受)
  • 波动 ≠ 亏损(高波动可能带来高收益)
  • 波动 = 不确定性(未来价格的不确定程度)

四、用收益率观察波动

4.1 收益率的计算

简单收益率

复制代码
R_t = (P_t - P_{t-1}) / P_{t-1} = P_t / P_{t-1} - 1

对数收益率

复制代码
r_t = ln(P_t / P_{t-1}) = ln(P_t) - ln(P_{t-1})

为什么用对数收益率?

  • 时间可加性:r_{t1,t2} = r_{t1} + r_{t2}
  • 对称性:+10%和-10%的绝对值相等
  • 近似等于简单收益率(小幅度时)

4.2 收益率序列可视化

通过观察收益率的分布,可以直观感受波动:

  • 波动大的股票:收益率分布"胖尾",极端值多
  • 波动小的股票:收益率分布"瘦尾",集中在0附近

五、波动率是什么?

5.1 波动率的定义

波动率 = 收益率的标准差

复制代码
sigma = sqrt( (1/(N-1)) * sum((R_i - R_mean)^2) )

其中:

  • R_i = 第i期的收益率
  • R_mean = 平均收益率
  • N = 样本数量

5.2 波动率的本质

波动率不是预测未来价格,而是量化"未来价格的不确定性"。

波动率 含义
10% 价格相对平稳,日波动约±0.6%
30% 价格波动剧烈,日波动约±1.9%
60% 价格极不稳定,日波动约±3.8%
100% 价格可能翻倍或腰斩

六、波动率度量与区间预测

6.1 年化波动率

日波动率 → 年化波动率

复制代码
sigma_annual = sigma_daily * sqrt(252)

(252为一年交易日数量)

为什么是sqrt(252)而不是252?

  • 波动率具有"时间平方根法则"
  • 方差(波动率的平方)具有时间可加性
  • 波动率本身不具有时间可加性

6.2 期权交易中的区间预测

在正态假设下,未来价格落在某个区间的概率:

区间 概率
±1σ 68.3%
±2σ 95.4%
±3σ 99.7%

应用:当前股价100美元,年化波动率30%,则1年后:

  • 68.3%概率:70美元 ~ 130美元
  • 95.4%概率:40美元 ~ 160美元
  • 99.7%概率:10美元 ~ 190美元

七、波动率的基础定义详解及公式推导

7.1 总体方差 vs 样本方差

总体方差(已知全部数据):

复制代码
sigma^2 = (1/N) * sum((R_i - mu)^2)

样本方差(仅知部分数据,用均值估计):

复制代码
s^2 = (1/(N-1)) * sum((R_i - R_mean)^2)

为什么样本方差分母是N-1?

  • 因为用样本均值R_mean代替了总体均值mu
  • 样本均值已经"拟合"了数据,导致偏差
  • 自由度修正:N个数据,估计了1个均值,剩余N-1个自由变化

7.2 价格序列调整

除息调整

复制代码
P_adj = P_close - D

其中D为每股分红金额。分红后价格自然下跌,需调整避免虚假波动。

拆股调整

复制代码
P_adj = P_close * (1/S)

其中S为拆股比例(如1拆2,S=2)。拆股后价格减半,需回溯调整历史价格。


八、高级主题:方差修正与偏差校正

8.1 由样本推断总体方差:自由度修正

当用样本方差s^2

估计总体方差sigma^2时:

复制代码
E[s^2] = sigma^2 * (N-1)/N

无偏估计

复制代码
s^2_unbiased = (N/(N-1)) * s^2 = (1/(N-1)) * sum((R_i - R_mean)^2)

8.2 詹森不等式与波动率偏差校正

詹森不等式:对于凸函数f,有Ef(X) >= f(EX)

波动率是标准差(方差的平方根),平方根是凹函数:

复制代码
E[sqrt(s^2)] <= sqrt(E[s^2]) = sigma

结论 :样本标准差s是总体标准差sigma的有偏低估估计量。

校正方法

  • 小样本:用c_4系数校正 s_corrected = s / c_4
  • 大样本(N>30):偏差可忽略

8.3 正态假设下的样本标准差分布

若收益率服从正态分布,则:

复制代码
((N-1)*s^2) / sigma^2 ~ chi^2_{N-1}

即样本方差服从自由度为N-1的卡方分布。


九、三股票日/年化波动率对比

9.1 数据来源与计算

基于2024年7月至2026年7月的2年历史数据:

股票 市场 行业 日波动率 年化波动率
美光 (MU) 美股 存储芯片 3.61% 57.3%
SK海力士 (000660.KS) 韩股 存储芯片 3.89% 61.7%
兆易创新 (603986) A股 存储芯片 5.68% 90.2%

9.2 波动率对比柱状图

关键发现

  • 三只同为存储芯片股,波动率差异巨大
  • 兆易创新波动率最高(90.2%),A股特性+小市值
  • SK海力士次之(61.7%),韩股波动较大
  • 美光相对最低(57.3%),美股大盘蓝筹特性

十、10只Ticker批量波动率排名

10.1 计算结果

排名 Ticker 公司 市场 年化波动率
1 AMD 超微 美股 80.1%
2 TSLA 特斯拉 美股 76.8%
3 NVDA 英伟达 美股 66.7%
4 BABA 阿里巴巴 港股 62.0%
5 META Meta 美股 51.7%
6 TCEHY 腾讯 港股 49.4%
7 AMZN 亚马逊 美股 44.0%
8 GOOGL 谷歌 美股 40.8%
9 AAPL 苹果 美股 34.9%
10 MSFT 微软 美股 30.2%

10.2 波动率排名图

关键发现

  • AMD波动率最高(80.1%),半导体行业高弹性
  • 微软波动率最低(30.2%),大型蓝筹稳定性
  • 芯片股(AMD/NVDA)波动率显著高于软件股(MSFT/AAPL)

十一、波动率为什么会让人亏钱?

11.1 波动率侵蚀收益的数学原理

算术平均 vs 几何平均

复制代码
几何平均 ≈ 算术平均 - (sigma^2)/2

波动率税(Volatility Tax):高波动直接降低复利收益。

算术平均收益 波动率 几何平均收益 "波动税"
10% 10% 9.5% -0.5%
10% 30% 5.5% -4.5%
10% 50% -2.5% -12.5%
10% 80% -22% -32%

11.2 行为金融学视角

心理效应 表现
损失厌恶 下跌1%的痛苦 > 上涨1%的快乐
追涨杀跌 高波动触发情绪化交易
锚定效应 以买入价为锚,忽视波动本质
过度自信 误将波动视为"机会",频繁交易

11.3 杠杆与波动

杠杆放大波动的影响:

  • 2倍杠杆:波动率翻倍,"波动税"翻4倍
  • 高波动+高杠杆 = 爆仓的温床

十二、作业解答

作业1:微软(MSFT)年化波动率计算

数据:MSFT 2024年7月-2026年7月

指标 数值
日波动率 1.90%
年化波动率 30.2%

加入四票对比

排名 股票 年化波动率 市场
1 兆易创新 90.2% A股
2 SK海力士 61.7% 韩股
3 美光(MU) 57.3% 美股
4 微软(MSFT) 30.2% 美股

结论:微软波动率最低,仅为兆易创新的1/3,体现了大型科技股的稳定性。

作业2:Histogram + 正态对比收益率分布图

上图:四只股票收益率分布直方图 + 正态分布曲线叠加

关键发现

  • 所有股票收益率分布均呈现"尖峰厚尾"(Leptokurtic)
  • 极端收益频率高于正态分布预测
  • 兆易创新尾部最厚,极端波动最多
  • 微软最接近正态,但仍存在厚尾

作业3:近1年波动率最高的股票

排名 股票 近1年波动率
1 AMD 80.1%
2 TSLA 76.8%
3 NVDA 66.7%
4 BABA 62.0%
5 META 51.7%

近1年波动率最高:AMD(80.1%)

作业4:自选5-10个ticker批量计算

十三、总结

13.1 核心内容回顾

主题 关键收获
波动率定义 收益率的标准差,量化不确定性
年化处理 sigma_annual = sigma_daily * sqrt(252)
方差修正 样本方差用N-1,标准差有偏需校正
詹森不等式 波动率是凹函数,样本估计有偏低估
波动率税 高波动直接侵蚀复利收益
三票对比 同板块不同市场,波动率差异巨大
MSFT波动率 30.2%,远低于芯片股,体现蓝筹稳定性

13.2 个人感悟

  1. 波动率是量化投资的"元概念"。理解波动率,才能理解风险、定价、对冲的一切。

  2. 同样的收益,不同的体验。两只股票算术收益相同,几何收益可能天差地别。波动率就是隐形的"收益税"。

  3. A股波动率显著高于美股。兆易创新90% vs 美光57%,这不仅是个股差异,更是市场结构和投资者结构的差异。

  4. 正态假设是危险的。所有股票都呈现"尖峰厚尾",黑天鹅比正态分布预测的更频繁。这就是为什么期权市场存在"波动率微笑"。

  5. 波动率本身可以成为交易标的。VIX指数、波动率互换、方差互换------理解波动率,就打开了衍生品世界的大门。


十四、代码附录

14.1 波动率计算函数

python 复制代码
import numpy as np
import pandas as pd

def calculate_volatility(prices, period='daily'):
    # 计算对数收益率
    log_returns = np.log(prices / prices.shift(1)).dropna()

    # 计算日波动率 (样本标准差,无偏估计)
    daily_vol = log_returns.std(ddof=1)

    # 年化
    if period == 'daily':
        return daily_vol
    elif period == 'annual':
        return daily_vol * np.sqrt(252)
    else:
        raise ValueError("period must be 'daily' or 'annual'")

14.2 批量计算多股票波动率

python 复制代码
def batch_volatility(tickers_data):
    results = []
    for ticker, prices in tickers_data.items():
        log_returns = np.log(prices / prices.shift(1)).dropna()

        results.append({
            'ticker': ticker,
            'daily_vol': log_returns.std(ddof=1),
            'annual_vol': log_returns.std(ddof=1) * np.sqrt(252),
            'mean_return': log_returns.mean(),
            'skewness': log_returns.skew(),
            'kurtosis': log_returns.kurtosis(),
            'max_daily_gain': log_returns.max(),
            'max_daily_loss': log_returns.min()
        })

    return pd.DataFrame(results)

14.3 收益率分布可视化

python 复制代码
import matplotlib.pyplot as plt
from scipy import stats

def plot_return_distribution(returns, ticker, ax=None):
    if ax is None:
        fig, ax = plt.subplots(figsize=(10, 6))

    # 直方图
    ax.hist(returns, bins=50, density=True, alpha=0.6, 
            color='steelblue', label='实际分布')

    # 正态分布拟合
    mu, sigma = returns.mean(), returns.std()
    x = np.linspace(returns.min(), returns.max(), 100)
    normal_pdf = stats.norm.pdf(x, mu, sigma)
    ax.plot(x, normal_pdf, 'r-', linewidth=2, label='正态分布')

    ax.set_title(f'{ticker} 收益率分布 vs 正态分布')
    ax.set_xlabel('对数收益率')
    ax.set_ylabel('概率密度')
    ax.legend()

    return ax
相关推荐
leisoo80976 小时前
100GBA股股票数据怎么存ClickHouseRedisMySQLJSON完整对比
大数据·linux·服务器·开发语言·python
WangYan20227 小时前
基于XGBoost与AI的生态—地学多源数据建模:植被与土地利用识别、土壤碳氮空间预测、生物多样性驱动机制、土壤微生物功能预测、生态退化与风险识别
python·机器学习·xgboost
金銀銅鐵9 小时前
[Python] 借助 turtle 逐字展示唐诗《金缕衣》
python
Python大数据分析@11 小时前
使用大模型MCP采集数据,爬虫已经无门槛
python·网络爬虫
quantdash_cc11 小时前
告别自建 Requests/BS4 网页爬虫:基于 QuantDash 搭建零维保的高性能量化行情流水线
开发语言·爬虫·python·pandas·量化·quantdash
65岁退休Coder12 小时前
LangChain v1.3.4 笔记 - 07 补充:链式调用 LCEL
后端·python·langchain
卷无止境12 小时前
FastAPI 部署在 Nginx 后面到底该怎么配
后端·python
半亩码田12 小时前
C#转Python第3.1篇:Python 的 class 没有访问修饰符?面向对象的另一条路
开发语言·python·c#
Wzx19801213 小时前
python沙箱和docker沙箱你选对了吗?
开发语言·python·docker
Python私教13 小时前
签名 URL 刷新导致审批失效?别急着删掉所有 query
python·安全