期权定价模型系列【13】标的资产波动率估计

期权定价的核心主要在于资产价格波动率。资产价格波动率的计算方法较多,本文将简要介绍几种主要的基本算法与garch模型算法。

历史波动率

➢ 过去一段时间,标的波动的程度

• 确定基于的价格,如每日收盘价

• 计算每日价格收益率

• 计算一段时间内收益率标准差

• 标准差进行年化

Parkinson波动率

➢ 极差构造波动率

➢ 更快的收敛于真实波动率

• 模拟几何布朗运动,基于极差的估计量方差/收盘价-收盘价估计量的方差 ≥ 5


优点: • 引入日内极差的计算方式,提供更全面的信息

 缺点: • 只适用于几何布朗运动的波动率估计,不能处理趋势和跳空 

Garman-Klass波动率

极差 + 收盘价

➢ 更快收敛于真实波动率 • 模拟几何布朗运动,基于极差的估计量方差/收盘价-收盘价估计量的方差 ≈ 8

优点: • 相比于基于收盘价的算法,收敛效率提高 • 充分利用可获取的价格信息

缺点: • 有时偏差比Parkinson算法更大


Roger-Satchell波动率

➢ 极值+收盘价、开盘价

➢ 放宽限制条件,引入存在非零均值参数

优点:允许趋势的存在

缺点:同样无法处理价格的跳空

Garman-Klass-Yang-Zhang波动率

 Garman-Klass的基础上,允许开盘跳空
 

优点:弥补Garman-Klass无法处理开盘跳空的情况

缺点:当资产收益率均不为零时,会高估波动率

Yang-Zhang波动率

➢ 适用于开盘价格跳空 ➢ 收盘价-开盘价 + 开盘价-收盘价 + Rogers-Satchel的加权平均

➢ 收敛效率:基于极差的估计量方差/收盘价-收盘价估计量的方差 ≈ 14

• 与开盘跳空所导致的波动率/整体波动率,高度相关

优点: • 通常情况,拥有最小估计误差 • 能够处理漂移项和价格跳空 • 在可用数据的使用上最为有效

缺点: • 如果价格过程由跳空主导,效果会降低到与收盘价与收盘价的方式差不多


EWMA波动率

➢ 指数加权移动平均模型

➢ 基本思想:不同时间的数据以不同的权重,权重随着时间以指数速度衰减

约束条件𝜆通常取0.94,𝜆越大,权重之间的差别越小

缺点:忽略连续回报率之间可能的相关性、波动率均值回归的特性

GARCH波动率

➢ GARCH(广义自回归条件异方差)

• ARCH误差序列,低阶自相关的拟合

• 日频数据,ARCH中的滞后阶数m很大,应用难度增加

➢ GARCH用少量𝜎t的滞后值替代许多𝑎𝑡的滞后值

➢ 构成:波动率估计值+相关性因素+均值回归因素

➢ GARCH(1,1)

python实践

if __name__=='__main__':
    ori_df=pd.read_excel('ori_df.xlsx')
    val=volatility(ori_df,20,245,yearly=True)
    df=pd.DataFrame()
    df['date']=ori_df['date']
    df['hv_sigma']=val.history_volatility().values
    df['parkinson_sigma']=val.Parkinson()
    df['Garman_Klass_sigma']=val.high_low_close_valitility()
    df['Garman_Klass_YZ_sigma']=val.Garman_Klass_YZ()
    df['Yang_Zhang_sigma']=val.Yang_Zhang()
    df['Roger_Satchell_sigma']=val.Roger_Satchell()
    df['ema_sigma']=val.ewma_volatility(alpha_=0.94)
    df['garch_sigma']=val.garch_volatility()
    
    plt.figure(figsize=(15,4))
    x=pd.to_datetime(df['date'])
    plt.plot(x,df['hv_sigma'],label='hv_sigma')
    plt.plot(x,df['parkinson_sigma'],label='parkinson_sigma')
    plt.plot(x,df['Garman_Klass_sigma'],label='Garman_Klass_sigma')
    plt.plot(x,df['Garman_Klass_YZ_sigma'],label='Garman_Klass_YZ_sigma')
    plt.plot(x,df['Yang_Zhang_sigma'],label='Yang_Zhang_sigma')
    plt.plot(x,df['Roger_Satchell_sigma'],label='Roger_Satchell_sigma')
    plt.plot(x,df['ema_sigma'],label='ema_sigma')
    plt.plot(x,df['garch_sigma'],label='garch_sigma')
    plt.legend()
    plt.show()

最近更新

  1. TCP协议是安全的吗?

    2024-02-06 02:44:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-02-06 02:44:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-02-06 02:44:02       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-02-06 02:44:02       20 阅读

热门阅读

  1. Flink-1.18.1环境搭建

    2024-02-06 02:44:02       35 阅读
  2. element-plus 更换主题色

    2024-02-06 02:44:02       28 阅读
  3. C Primer Plus(第六版)15.9 编程练习 第6题

    2024-02-06 02:44:02       31 阅读
  4. ES6-let

    ES6-let

    2024-02-06 02:44:02      22 阅读
  5. 记一次Mysql加字段加不上问题排查过程

    2024-02-06 02:44:02       33 阅读
  6. NCCL 源码详解总目录

    2024-02-06 02:44:02       33 阅读
  7. 多线程与socket编程

    2024-02-06 02:44:02       35 阅读
  8. nginx负载均衡

    2024-02-06 02:44:02       34 阅读
  9. Blender 的重拓扑功能中的参数,

    2024-02-06 02:44:02       29 阅读
  10. salesforce flow 如何保存多选列表选中的值

    2024-02-06 02:44:02       28 阅读