📑 查看全课大纲(第 25 / 59 节)
- 1.量化投资必备基础知识
- 2.趋势型策略及模型原理
- 3.均值回复型策略及模型原理
- 4.配对交易策略及模型原理
- 5.量化策略研发流程与基本技能
- 6.常用的量化平台概述及如何选择
- 7.如何量化一个主观策略思路
- 8.常用技术指标及指标计算过程
- 9.如何编写指标代码
- 10.指标的物理意义
- 11.技术指标的应用技巧
- 12.更多的交易决策
- 13.编写程序去量化一个趋势型技术指标
- 14.编写趋势型技术指标的性能评价
- 15.策略对交易成本和持仓周期的影响
- 16.股票池策略的原理及基本框架
- 17.基于多因子分析的股票池设计与实现
- 18.股票池的性能评估
- 19.使用定制化财务因子构建股票池
- 20.趋势型策略原理及股票池机制的设计
- 21.趋势型择时信号的设计方法与编程实现
- 22.趋势型策略的回测与性能评估
- 23.优化趋势型策略的思路及方法
- 24.量化体系中的风险控制思想
- 25.风险的度量-波动率
- 26.常用的风险控制方法
- 27.实现止盈止损模块以提高策略性能
- 28.策略性能的评估与优化
- 29.探讨波动率与风险的关系
- 30.量化策略中的经典资金管理模型
- 31.用python编程实现资金管理模块
- 32.构建一个完善的量化交易策略
- 33.趋势型量化策略必备的期货知识
- 34.期货量化工具介绍
- 35.商品期货趋势型策略原理
- 36.用TB编写商品期货趋势型策略(上)
- 37.用TB编写商品期货趋势型策略(下)
- 38.分析优化商品期货趋势型策略的方法思路
- 39.期货交易策略的注意事项
- 40.均值回复型策略的原理
- 41.A股市场有没有稳定的均值回复效应?
- 42.编写一个均值回复型股票量化策略
- 43.编写多空组合策略进行策略改进
- 44.在策略中实现头寸管理进行策略优化
- 45.套利策略原理及常见套利类型
- 46.用MC开发一个跨品种套利交易策略(上)
- 47.用MC开发一个跨品种套利交易策略(下)
- 48.统计套利之股票配对交易策略
- 49.实盘中的细节问题:加减仓
- 50.关于高频交易
- 51.如何评价实盘量化策略的性能
- 52.量化系统的工作过程及研发流程
- 53.运气or实力
- 54.量化实盘交易需要满足什么条件
- 55.未来函数的坑
- 56.实盘数据接口异常的自动报警
- 57.交易系统的压力测试
- 58.自动运行的交易策略,什么时候需要人工干预
- 59.预案准备和实盘心理建设
风险的度量-波动率
约 16 分钟
📺 正在播放小象官方高清录播(支持倍速与清晰度调节)
风险的度量-波动率
小象实战讲义 · 进阶量化交易实战:迭代式的量化策略研发 本讲义仅用于编程与量化方法教学,不构成任何投资建议。
波动率是金融资产价格最核心的二阶矩特征。在量化体系中,波动率既是风险的直接代名词,也是期权定价与动态头寸管理的核心输入变量。本节系统剖析历史波动率(HV)、帕金森极值波动率(Parkinson)与 EWMA 指数加权移动平均波动率模型。
💡 核心导读
- 三大经典波动率度量模型与适用场景:
- 标准历史波动率(Close-to-Close HV):仅基于收盘价对数收益率标准差,计算简单但丢失日内最高最低价信息;
- 帕金森高低价极值波动率(Parkinson Volatility):基于日内 High 和 Low 极值差,效率是传统收盘价波动率的 5 倍;
- EWMA 动态衰减波动率(Exponentially Weighted):赋予近期波动更高权重,敏锐捕捉波动率聚集(Volatility Clustering)效应。
┌─────────────────────────────────────────────────────────────┐
│ 多维波动率量化度量拓扑图 │
└──────────────────────────────┬──────────────────────────────┘
│
┌─────────────────────────────┼─────────────────────────────┐
▼ ▼ ▼
┌─────────────────────────┐ ┌─────────────────────────┐ ┌─────────────────────────┐
│ 收盘价历史波动率 (HV) │ │ 帕金森极值波动率 (Park) │ │ EWMA 动态加权波动率 │
├─────────────────────────┤ ├─────────────────────────┤ ├─────────────────────────┤
│ • <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>σ</mi><mo>=</mo><mtext>std</mtext><mo stretchy="false">(</mo><mi>ln</mi><mo></mo><mo stretchy="false">(</mo><msub><mi>P</mi><mi>t</mi></msub><mi mathvariant="normal">/</mi><msub><mi>P</mi><mrow><mi>t</mi><mo>−</mo><mn>1</mn></mrow></msub><mo stretchy="false">)</mo><mo stretchy="false">)</mo><mo>×</mo><msqrt><mn>252</mn></msqrt></mrow><annotation encoding="application/x-tex">\sigma = \text{std}(\ln(P_t/P_{t-1})) \times \sqrt{252}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:0.4306em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">σ</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord text"><span class="mord">std</span></span><span class="mopen">(</span><span class="mop">ln</span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.1389em;">P</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.2806em;"><span style="top:-2.55em;margin-left:-0.1389em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">t</span></span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mord">/</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.1389em;">P</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:-0.1389em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">t</span><span class="mbin mtight">−</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height:0.2083em;"><span></span></span></span></span></span></span><span class="mclose">))</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">×</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:1.04em;vertical-align:-0.1328em;"></span><span class="mord sqrt"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.9072em;"><span class="svg-align" style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span class="mord" style="padding-left:0.833em;"><span class="mord">252</span></span></span><span style="top:-2.8672em;"><span class="pstrut" style="height:3em;"></span><span class="hide-tail" style="min-width:0.853em;height:1.08em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="1.08em" viewBox="0 0 400000 1080" preserveAspectRatio="xMinYMin slice"><path d="M95,702
c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14
c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54
c44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10
s173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429
c69,-144,104.5,-217.7,106.5,-221
l0 -0
c5.3,-9.3,12,-14,20,-14
H400000v40H845.2724
s-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7
c-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47z
M834 80h400000v40h-400000z"/></svg></span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height:0.1328em;"><span></span></span></span></span></span></span></span></span>│ │ • 基于 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>ln</mi><mo></mo><mo stretchy="false">(</mo><msub><mi>H</mi><mi>t</mi></msub><mi mathvariant="normal">/</mi><msub><mi>L</mi><mi>t</mi></msub><msup><mo stretchy="false">)</mo><mn>2</mn></msup></mrow><annotation encoding="application/x-tex">\ln(H_t/L_t)^2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:1.0641em;vertical-align:-0.25em;"></span><span class="mop">ln</span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0813em;">H</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.2806em;"><span style="top:-2.55em;margin-left:-0.0813em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">t</span></span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mord">/</span><span class="mord"><span class="mord mathnormal">L</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.2806em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">t</span></span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mclose"><span class="mclose">)</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span></span> │ │ • <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msubsup><mi>σ</mi><mi>t</mi><mn>2</mn></msubsup><mo>=</mo><mi>λ</mi><msubsup><mi>σ</mi><mrow><mi>t</mi><mo>−</mo><mn>1</mn></mrow><mn>2</mn></msubsup><mo>+</mo><mo stretchy="false">(</mo><mn>1</mn><mo>−</mo><mi>λ</mi><mo stretchy="false">)</mo><msubsup><mi>r</mi><mi>t</mi><mn>2</mn></msubsup></mrow><annotation encoding="application/x-tex">\sigma_t^2 = \lambda \sigma_{t-1}^2 + (1-\lambda)r_t^2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:1.0611em;vertical-align:-0.247em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0359em;">σ</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-2.453em;margin-left:-0.0359em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">t</span></span></span><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height:0.247em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:1.1205em;vertical-align:-0.3064em;"></span><span class="mord mathnormal">λ</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0359em;">σ</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-2.4519em;margin-left:-0.0359em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">t</span><span class="mbin mtight">−</span><span class="mord mtight">1</span></span></span></span><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height:0.3064em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord">1</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:1.0641em;vertical-align:-0.25em;"></span><span class="mord mathnormal">λ</span><span class="mclose">)</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0278em;">r</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-2.453em;margin-left:-0.0278em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">t</span></span></span><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height:0.247em;"><span></span></span></span></span></span></span></span></span></span>│
│ • 基准常用,但时滞较长 │ │ • 充分捕获日内宽幅震荡 │ │ • 快速捕捉波动率暴增 │
└─────────────────────────┘ └─────────────────────────┘ └─────────────────────────┘一、帕金森(Parkinson)极值波动率数学推导
假设资产价格在连续时间内遵循几何布朗运动。帕金森证明利用日内最高价 与最低价 可以构建更无偏、更高效的波动率估计量:
相较于仅用收盘价,帕金森波动率能够在样本量较小时快速收敛至真实波动率。
import pandas as pd
import numpy as np
def calculate_parkinson_volatility(df: pd.DataFrame, window: int = 20) -> pd.Series:
"""
计算帕金森高低价极值年化波动率
"""
hl_ratio = np.log(df['high'] / df['low'])
park_var = (hl_ratio ** 2).rolling(window).mean() / (4.0 * np.log(2.0))
park_vol = np.sqrt(park_var * 252.0)
return park_vol二、EWMA 波动率聚集模型与风险衰减因子
金融资产收益率具有显著的“波动率聚集(Volatility Clustering)”特征,即大波动后往往伴随大波动。RiskMetrics 提出 EWMA 模型,衰减因子通常取 :
def calculate_ewma_volatility(returns: pd.Series, decay: float = 0.94) -> pd.Series:
"""
计算 EWMA 动态指数衰减年化波动率
"""
var = np.zeros(len(returns))
var[0] = returns.var()
for i in range(1, len(returns)):
var[i] = decay * var[i-1] + (1.0 - decay) * (returns.iloc[i] ** 2)
return pd.Series(np.sqrt(var * 252.0), index=returns.index)📝 动手练一练
编写 Python 脚本对比收盘价 HV、帕金森极值与 EWMA 波动率在突发黑天鹅事件中的响应速度:
import pandas as pd
import numpy as np
def run_volatility_measurement_test():
np.random.seed(42)
n = 100
# 前 80 天低波动,后 20 天波动率激增 3 倍
rets1 = np.random.normal(0, 0.01, 80)
rets2 = np.random.normal(0, 0.03, 20)
rets = np.concatenate([rets1, rets2])
sigmas = np.concatenate([np.full(80, 0.01), np.full(20, 0.03)])
prices = 100.0 * np.cumprod(1.0 + rets)
# high/low 日内振幅按状态 σ 同步缩放(与波动率状态切换保持一致)
df = pd.DataFrame({
'high': prices * (1.0 + np.abs(np.random.normal(0, 0.8, n)) * sigmas),
'low': prices * (1.0 - np.abs(np.random.normal(0, 0.8, n)) * sigmas),
'close': prices
})
df['HV_20'] = df['close'].pct_change().rolling(20).std() * np.sqrt(252)
df['Park_20'] = calculate_parkinson_volatility(df, window=20)
df['EWMA'] = calculate_ewma_volatility(df['close'].pct_change().fillna(0))
print("================ 多维波动率度量响应对比 ================")
print(f"突发波动后 Close-to-Close HV: {df['HV_20'].iloc[-1]*100:.2f}%")
print(f"突发波动后 Parkinson 极值 HV : {df['Park_20'].iloc[-1]*100:.2f}%")
print(f"突发波动后 EWMA 动态波动率 : {df['EWMA'].iloc[-1]*100:.2f}%")
assert df['EWMA'].iloc[-1] > df['EWMA'].iloc[70], "EWMA 波动率未能灵敏响应突发风险!"
print("✅ 波动率量化度量与模型对比测试 PASS")
print("======================================================")
if __name__ == '__main__':
run_volatility_measurement_test()运行结果输出:
================ 多维波动率度量响应对比 ================
突发波动后 Close-to-Close HV: 32.90%
突发波动后 Parkinson 极值 HV : 35.69%
突发波动后 EWMA 动态波动率 : 27.51%
✅ 波动率量化度量与模型对比测试 PASS
======================================================本章小结
- 根据场景选择波动率模型:长期资产配置选用标准历史波动率,日内与高频风控优先选用帕金森极值与 EWMA。
- 捕捉波动率聚集现象:EWMA 模型通过指数衰减权重实现对突发市场剧震的秒级敏锐捕捉。
- 波动率是仓位规模的核心输入:基于波动率倒数进行动态头寸分配(Volatility Targeting),平滑组合净值波动。
📋 行动清单 (Action Checklist)
- 运行波动率对比代码,调整 EWMA 衰减因子 (0.90 vs 0.97)观察响应敏感度;
- 编写 Garman-Klass 波动率模型(结合开盘、收盘与高低价);
- 预习下一节,掌握止损止盈模块与动态跟踪止损带的设计。
— 小象教研组
配套学习资源与课件
- 第5章课件:量化体系中的风险控制(PDF · 1.2MB)下载
🎁 免费学习资源
领取《小象 11GB VIP 课件资料包与大厂真题手册》
包含全套实战 Jupyter 源码、清洗后数据集、大厂高频面试真题与专属学员答疑交流群。
- ✔完整 Python / 数据分析 Jupyter 实战源码
- ✔大厂真实业务数据集与练习题
- ✔微信扫码添加课程顾问,免费获取网盘下载链接
微信扫码添加顾问