特质波动率python

2023-12-20 05:08
文章标签 python 波动 特质

本文主要是介绍特质波动率python,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

特质波动率

  • “特质波动率之谜”的介绍
  • 特质波动率的度量方法
  • Python代码
  • 相关文章
  • 获取代码

“特质波动率之谜”的介绍

风险与收益一直是金融学中形影不离的两个概念。经典的CAPM模型,只考虑了系统性风险,认为股票预期收益率只与市场风险溢价有关。直到1972年,Jensen,Black和Scholes对传统金融学理论提出了不同的看法,认为非系统性风险与股票收益率是存在一定的相关关系,并首次提出了特质波动率的概念。Merton曾从供需的角度来解释这两者之间的关系,认为投资者会对系统风险和非系统风险都要求进行一定的风险补偿,而这一解释也被大家广泛地接受与认可。

一般来讲,我们都认为风险与收益应该是正相关,即风险越高,收益率越高。但在2006年,Ang等人却得出了不一样的结论,他们借助Fama-French三因子模型却发现特质波动率与预期收益率之间的关系变为负相关关系。目前尚未有公认的理论可以解释这种异象,因此引起了剧烈的争论,而这一异象也被称为“特质波动率之谜”。

特质波动率的度量方法

在特质波动率的度量方面,我利用Fama-French三因子模型进行计算
有关三因子模型的介绍与代码在之前的文章有所讲解,读者们可见文末链接

首先,通过三因子模型,得到每日的残差,即ε
在这里插入图片描述
然后,计算残差的波动率,即当月残差标准差乘以当月总交易天数。
在这里插入图片描述
这样就得到我们所要的特质波动率了。

Python代码

Python实现的过程中,我们只需要使用pandas、statsmodels.formula.api两个包即可完成:

import pandas as pd
import statsmodels.formula.api as smf

首先,读取数据,我从锐思数据库中,下载了创业板中2015-2019年所有股票每日收益率、无风险收益率以及创业板每日的三因子:

Factors = pd.read_excel("F:\\公众号\\图文素材\\特质波动率\\Data.xlsx", sheetname = 0, header = 0)
Return = pd.read_excel("F:\\公众号\\图文素材\\特质波动率\\Data.xlsx", sheetname = 1, header = 0)
NoRisk = pd.read_excel("F:\\公众号\\图文素材\\特质波动率\\Data.xlsx", sheetname = 2, header = 0)

为了后续筛选日期方便,我们需要将“日期”的数据类型更改为日期型:

Factors['Date'] = pd.to_datetime(Factors['Date'])
Return['Date'] = pd.to_datetime(Return['Date'])
NoRisk['Date'] = pd.to_datetime(NoRisk['Date'])

通过pd.merge()将数据进行合并:

Data = pd.merge(pd.merge(Factors, Return, on = 'Date'), NoRisk, on = 'Date')

在这里插入图片描述
参数说明:
pd.merge(left, right, how=‘inner’, on=None, left_on=None, right_on=None,
left_index=False, right_index=False, sort=True,
suffixes=(’_x’, ‘_y’), copy=True, indicator=False,
validate=None)
1、left: 拼接的左侧DataFrame对象
2、right: 拼接的右侧DataFrame对象
3、on: 要加入的列或索引级别名称。 必须在左侧和右侧DataFrame对象中找到。 如果未传递且left_index和right_index为False,则DataFrame中的列的交集将被推断为连接键。
4、left_on:左侧DataFrame中的列或索引级别用作键。 可以是列名,索引级名称,也可以是长度等于DataFrame长度的数组。
5、right_on: 左侧DataFrame中的列或索引级别用作键。 可以是列名,索引级名称,也可以是长度等于DataFrame长度的数组。
6、left_index: 如果为True,则使用左侧DataFrame中的索引(行标签)作为其连接键。 对于具有MultiIndex(分层)的DataFrame,级别数必须与右侧DataFrame中的连接键数相匹配。
7、right_index: 与left_index功能相似。
8、how: One of ‘left’, ‘right’, ‘outer’, ‘inner’. 默认inner。inner是取交集,outer取并集。比如left:[‘A’,‘B’,‘C’];right[’'A,‘C’,‘D’];inner取交集的话,left中出现的A会和right中出现的买一个A进行匹配拼接,如果没有是B,在right中没有匹配到,则会丢失。'outer’取并集,出现的A会进行一一匹配,没有同时出现的会将缺失的部分添加缺失值。
9、sort: 按字典顺序通过连接键对结果DataFrame进行排序。 默认为True,设置为False将在很多情况下显着提高性能。
10、suffixes: 用于重叠列的字符串后缀元组。 默认为(‘x’,’ y’)。
11、copy: 始终从传递的DataFrame对象复制数据(默认为True),即使不需要重建索引也是如此。
12、indicator: 将一列添加到名为_merge的输出DataFrame,其中包含有关每行源的信息。 _merge是分类类型,并且对于其合并键仅出现在“左”DataFrame中的观察值,取得值为left_only,对于其合并键仅出现在“右”DataFrame中的观察值为right_only,并且如果在两者中都找到观察点的合并键,则为left_only。

然后从日期中提取年份和月份:
Data[‘Year’] = Data[‘Date’].dt.year
Data[‘Month’] = Data[‘Date’].dt.month
在这里插入图片描述
我们创建一个函数,用于提取某只股票某月下的数据:

def get_month_data(data, code, year, month):month_data = data[(data.Stkcd == code) & (data.Year == year) & (data.Month == month)]
return month_data

接下来,我们计算一下300001这只股票在2019年12月份的特质波动率。
首先,我们获得这只股票当月的数据:

example = get_month_data(Data, 300001, 2019, 12)

在这里插入图片描述
统计当月交易总天数:

N = len(example)

在这里插入图片描述
建立回归模型,并计算残差:

model = smf.ols('Dretnd - Nrrdaydt ~ RiskPremium + SMB + HML', data = example).fit()
predict = model.params['Intercept'] + model.params['RiskPremium']*example['RiskPremium'] + model.params['SMB']*example['SMB'] + model.params['HML']*example['HML']
residual = example['Dretnd'] – predict

在这里插入图片描述
接着,计算得出特质波动率:

IV = residual.std(ddof=1) * N

在这里插入图片描述
参数说明:
pd.std(ddof = 1)
该函数是pandas所带的标准差计算方法,默认按照无偏估计进行计算,即ddof = 1,即n-ddof。

最后,我们可以用循环语句进行遍历计算,并创建一个DataFrame进行储存和导出:
在这里插入图片描述

这篇关于特质波动率python的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/514852

相关文章

Python实现图片分割的多种方法总结

《Python实现图片分割的多种方法总结》图片分割是图像处理中的一个重要任务,它的目标是将图像划分为多个区域或者对象,本文为大家整理了一些常用的分割方法,大家可以根据需求自行选择... 目录1. 基于传统图像处理的分割方法(1) 使用固定阈值分割图片(2) 自适应阈值分割(3) 使用图像边缘检测分割(4)

一文带你搞懂Python中__init__.py到底是什么

《一文带你搞懂Python中__init__.py到底是什么》朋友们,今天我们来聊聊Python里一个低调却至关重要的文件——__init__.py,有些人可能听说过它是“包的标志”,也有人觉得它“没... 目录先搞懂 python 模块(module)Python 包(package)是啥?那么 __in

使用Python实现图像LBP特征提取的操作方法

《使用Python实现图像LBP特征提取的操作方法》LBP特征叫做局部二值模式,常用于纹理特征提取,并在纹理分类中具有较强的区分能力,本文给大家介绍了如何使用Python实现图像LBP特征提取的操作方... 目录一、LBP特征介绍二、LBP特征描述三、一些改进版本的LBP1.圆形LBP算子2.旋转不变的LB

Python中__init__方法使用的深度解析

《Python中__init__方法使用的深度解析》在Python的面向对象编程(OOP)体系中,__init__方法如同建造房屋时的奠基仪式——它定义了对象诞生时的初始状态,下面我们就来深入了解下_... 目录一、__init__的基因图谱二、初始化过程的魔法时刻继承链中的初始化顺序self参数的奥秘默认

Python实现特殊字符判断并去掉非字母和数字的特殊字符

《Python实现特殊字符判断并去掉非字母和数字的特殊字符》在Python中,可以通过多种方法来判断字符串中是否包含非字母、数字的特殊字符,并将这些特殊字符去掉,本文为大家整理了一些常用的,希望对大家... 目录1. 使用正则表达式判断字符串中是否包含特殊字符去掉字符串中的特殊字符2. 使用 str.isa

python中各种常见文件的读写操作与类型转换详细指南

《python中各种常见文件的读写操作与类型转换详细指南》这篇文章主要为大家详细介绍了python中各种常见文件(txt,xls,csv,sql,二进制文件)的读写操作与类型转换,感兴趣的小伙伴可以跟... 目录1.文件txt读写标准用法1.1写入文件1.2读取文件2. 二进制文件读取3. 大文件读取3.1

使用Python实现一个优雅的异步定时器

《使用Python实现一个优雅的异步定时器》在Python中实现定时器功能是一个常见需求,尤其是在需要周期性执行任务的场景下,本文给大家介绍了基于asyncio和threading模块,可扩展的异步定... 目录需求背景代码1. 单例事件循环的实现2. 事件循环的运行与关闭3. 定时器核心逻辑4. 启动与停

基于Python实现读取嵌套压缩包下文件的方法

《基于Python实现读取嵌套压缩包下文件的方法》工作中遇到的问题,需要用Python实现嵌套压缩包下文件读取,本文给大家介绍了详细的解决方法,并有相关的代码示例供大家参考,需要的朋友可以参考下... 目录思路完整代码代码优化思路打开外层zip压缩包并遍历文件:使用with zipfile.ZipFil

Python处理函数调用超时的四种方法

《Python处理函数调用超时的四种方法》在实际开发过程中,我们可能会遇到一些场景,需要对函数的执行时间进行限制,例如,当一个函数执行时间过长时,可能会导致程序卡顿、资源占用过高,因此,在某些情况下,... 目录前言func-timeout1. 安装 func-timeout2. 基本用法自定义进程subp

Python实现word文档内容智能提取以及合成

《Python实现word文档内容智能提取以及合成》这篇文章主要为大家详细介绍了如何使用Python实现从10个左右的docx文档中抽取内容,再调整语言风格后生成新的文档,感兴趣的小伙伴可以了解一下... 目录核心思路技术路径实现步骤阶段一:准备工作阶段二:内容提取 (python 脚本)阶段三:语言风格调