首页 > 其他分享 >CNE6因子复现系列——波动率因子Volatility

CNE6因子复现系列——波动率因子Volatility

时间:2024-07-22 22:25:03浏览次数:14  
标签:CNE6 weight hs300 因子 np close Volatility stock

1. 波动率因子Volatility

  CNE6当中,波动率因子Volatility是一个一级因子,有二级因子BETA和Residual Volatility,其下还有多个三级因子。

一级因子二级因子三级因子
VolatilityBETABETA
Residual Volatilityhistory sigma
daily standard deviation
cumulative range

2. 三级因子

2.1 BETA

  BETA因子反应了市场收益率对单只股票收益率的影响。对于单只股票收益率 r i r_i ri​和市场收益率 R R R,建立回归模型 r i = α + β R + u r_i = α + βR + u ri​=α+βR+u。系数 β β β就是因子值。
  此外,在计算当中,由于时间越近,影响越大,因此选则252个交易日的数据,并采用指数衰减法确定权重,采用63作为半衰期。对于指数衰减法,参见本人另一篇博客: 确定权重的方式——半衰期与指数衰减法。下方函数half_decay_weight也在这篇博客里定义。

import numpy as np
from sklearn.linear_model import LinearRegression
from half_decay_weight import half_decay_weight

# 导入股票数据
stock_close = np.array()  # 导入一个m * n的数组,m是行,代表日期,n是列,代表每一只股票
# 导入市场收益率,可以用某一股票指数,也可以使用单只股票加权计算市场收益率
# 这里采用沪深300指数
hs300 = np.array()

# 计算股票对数收益率
stock_r = np.log(stock_close[1:][:]) - np.log(stock_close[:-1][:])

# 计算市场收益率
hs300_r = np.log(hs300[1:]) - np.log(hs300[:-1])

# 确定权重
weight = half_decay_weight(63, 251)  # 由于计算收益率后,只剩下251个数据,所以时间窗口选251

# 单只股票对市场收益回归
facotr1 = np.zeros(stock_close.shape[1])
for i in range(stock_close.shape[1]):
    X = hs300_r.reshape(-1, 1)  # X必须是列向量,reshape方法第一个参数写-1表示自动选择维度
    Y = stock_r[:, i]
    model = LinearRegression()
    model.fit(X, Y, sample_weight=weight)
    factor1[i] = model.coef_
    
# 得到最终因子
factor_beta = factor1 

2.2 history sigma

  对于历史波动率,其实就是取刚才BETA回归中残差的波动率。

# 前面的都不变
facotr1 = np.zeros(stock_close.shape[1])
for i in range(stock_close.shape[1]):
    X = hs300_r.reshape(-1, 1)  # X必须是列向量,reshape方法第一个参数写-1表示自动选择维度
    Y = stock_r[:, i]
    model = LinearRegression()
    model.fit(X, Y, sample_weight=weight)  # 拟合模型,估计出参数
    Y_pred = model.predit(X)  # 带入X进行预测
    u = Y - Y_pred  # 得到残差
    factor1[i] = np.std(u)

factor_history_sigma = factor1

2.3 daily standard deviation

  对于日标准差,是股票超额收益率在过去252个交易日的的波动率,并依然使用指数衰减加权,半衰期为42个交易日。

import numpy as np
from sklearn.linear_model import LinearRegression
from half_decay_weight import half_decay_weight

# 导入股票数据
stock_close = np.array()  # 导入一个m * n的数组,m是行,代表日期,n是列,代表每一只股票
# 导入市场收益率,可以用某一股票指数,也可以使用单只股票加权计算市场收益率
# 这里采用沪深300指数
hs300 = np.array()

# 计算股票对数收益率
stock_r = np.log(stock_close[1:][:]) - np.log(stock_close[:-1][:])

# 计算市场收益率
hs300_r = np.log(hs300[1:]) - np.log(hs300[:-1])

# 计算超额收益率
stock_excess = stock_r - hs300_r

# 确定权重
weight = half_decay_weight(42, 251)  # 由于计算收益率后,只剩下251个数据,所以时间窗口选251

# 超额收益率加权平均
weight_average = np.average(stock_excess, axis=0, weights=weight)

# 超额收益率加权方差
variance = np.average((stock_excess - weight_average) ** 2, axis=0, weights=weight)

# 超额收益率标准差
factor = np.sqrt(variance)

2.4 cumulative range

  累积超额收益区间指的是对过去一段时间取累积超额收益,由于超额收益有正有负,所以累积的超额收益会在某一时间点达到最大,某一时间点达到最小。累积超额收益区间就是最大减最小的差。
  在CNE6中,对cumulative range的描述是过去12个月的 m a x ( r e x c e s s ) − m i n ( r e x c e s s ) max(r_{excess}) - min(r_{excess}) max(rexcess​)−min(rexcess​)。

import numpy as np
from sklearn.linear_model import LinearRegression
from half_decay_weight import half_decay_weight

# 导入股票数据
stock_close = np.array()  # 导入一个m * n的数组,m是行,代表日期,n是列,代表每一只股票
# 导入市场收益率,可以用某一股票指数,也可以使用单只股票加权计算市场收益率
# 这里采用沪深300指数
hs300 = np.array()

# 计算12个月的对数收益率
stock_r12 = np.zeros((12, stock_close.shape[1]))
hs300_r12 = np.zeros(12)
count = 0
for i in range(0, 232, 21):
    stock_r12[count][:] = np.log(stock_close[i + 20][:]) - np.log(stock_close[i][:])
    hs300_r12[count] = np.log(hs300[i + 20]) - np.log(hs300[i])
    count += 1

# 计算超额收益率
stock_excess = stock_r12 - hs300_r12.reshape(-1, 1)

cum_rate = np.cumsum(stock_excess, axis=0)  # np.cumsum方法能够沿某一轴进行累加,并把累加值放在该位置上

factor = np.max(cum_rate, axis=0) - np.min(cum_rate, axis=0)

3. 二级因子和一级因子

  依然为了方便考虑,二级因子和一级因子都是对上一级因子等权相加。所以:

B E T A = B E T A BETA=BETA BETA=BETA

R e s i d u a l V o l a t i l i t y = 1 3 h i s t o r y s i g m a + 1 3 d a i l y s t a n d a r d d e v i a t i o n + 1 3 c u m u l a t i v e r a n g e Residual\enspace Volatility=\frac{1}{3} history\enspace sigma + \frac{1}{3} daily \enspace standard \enspace deviation + \frac{1}{3} cumulative \enspace range ResidualVolatility=31​historysigma+31​dailystandarddeviation+31​cumulativerange

V o l a t i l i t y = 1 2 B E T A + 1 2 R e s i d u a l V o l a t i l i t y Volatility = \frac{1}{2} BETA + \frac{1}{2}Residual\enspace Volatility Volatility=21​BETA+21​ResidualVolatility

标签:CNE6,weight,hs300,因子,np,close,Volatility,stock
From: https://blog.csdn.net/m0_70629983/article/details/140578839

相关文章

  • VINS-FUSION 优化-先验因子(边缘化)
    一、边缘化VINS中的边缘化策略,将滑出窗外的帧与滑窗内的帧的约束使用边缘化的形式保存为先验误差因子进行后续非线性优化,以保留约束信息。VINS-Fusion优化约束包括:a.视觉误差因子约束,b.IMU预积分约束,c.边缘化先验因子约束文章主要讲述边缘化先验因子约束如何产生。VINS-Fus......
  • VINS-FUSION 优化-IMU预积分因子(三)
    在VINS-FUSION优化-IMU预积分因子(一)中介绍了IMU预积分及其于优化变量的全部雅克比矩阵的推导,(二)中文章结合VINS-FUSION源码,完成优化-IMU预积分因子的使用。本文介绍预积分中方差的计算。一、引出​方差作为调节各残差项的权重,方差计算如下:Fk、Gk是离散时间下的状态传递方程......
  • 时间序列分析方法汇总对比及优缺点和适用情况(下)-- 11. 卡尔曼滤波 12. 广义自回归条件
    目录11.卡尔曼滤波(KalmanFilter)12.广义自回归条件异方差模型(GARCH)13.贝叶斯结构时间序列模型(BayesianStructuralTimeSeries,BSTS)14.动态因子模型(DynamicFactorModel,DFM)15.隐马尔科夫模型(HiddenMarkovModel,HMM)16.分段线性回归(PiecewiseLinearRegress......
  • Leetcode2427. 公因子的数目和Leetcode.728. 自除数
    Leetcode2427问题描述:给你两个正整数 a 和 b ,返回 a 和 b 的 公 因子的数目。如果 x 可以同时整除 a 和 b ,则认为 x 是 a 和 b 的一个 公因子 。示例1:输入:a=12,b=6输出:4解释:12和6的公因子是1、2、3、6。示例2:输入:a=25,b=30......
  • kali内存取证-volatility
    volatility2安装Volatility是一款开源内存取证框架,能够对导出的内存镜像进行分析,通过获取内核数据结构,使用插件获取内存的详细情况以及系统的运行状态。Volatility2.6需要python2,pip安装模块也需要2版本安装pip2Volatility2.6需要python2,pip安装模块也需要2版本,所以首先安装pi......
  • 【科研绘图】【多因子分组箱线图】:附Origin详细画图流程
    目录1、理解箱线图2、画图流程1、理解箱线图(1)什么是箱线图箱线图,又称箱形图、盒须图或盒式图,用于体现数据分散情况的统计图。在视觉上辅助读者直观地看到每个数据中心位置、散布范围以及异常值等信息。(2)箱线图的组成箱体:下图方框形状的位置即为箱体,箱体下侧边界......
  • 2019-2023年官方二氧化碳排放因子
    2019-2023年官方二氧化碳排放因子中华人民共和国生态环境部发布2019年度减排项目中国区域电网基准线排放因子国家应对气候变化战略研究和国际合作中心(简称国家气候战略中心)NationalCenterforClimateChangeStrategyandInternationalCooperation(NCSC)发布2020年......
  • python中缺失值处理——在因子选股中的应用
    ​在因子选股当中,如果直接对整个数据库进行操作,对于股价历史数据,经常出现由于股票退市等造成的缺失值,但是在回测时,如果只用有值的股票,会由于维度不匹配而报错。因此,经常需要把整张数据表中的非空数据取出,进行处理,再填回因子矩阵中。由于基本上每次都会用到,所以本人专门写......
  • CNE6因子复现系列——规模因子Size
    1.CNE6规模因子  对于规模因子,CNE6中给出了一级因子Size,二级因子Size和Midcap,以及三级因子LNCAP和MIDCAP。其中一级因子由二级因子合成,二级因子由三级因子合成。对于规模因子,二级和三级因子相同。一级因子二级因子三级因子SizeSizeLNCAPMidcapMIDCAP2.三级因子LNCAP......
  • R语言广义加性混合模型(GAMM)分析长沙气象因子、空气污染、PM2.5浓度、显著性检验、逐
    全文链接:https://tecdat.cn/?p=32981原文出处:拓端数据部落公众号气候变化和空气污染对现代社会产生了越来越大的影响。在这种背景下,研究气象和空气污染之间的关系以及其对PM2.5浓度的影响变得非常重要。为了更好地理解和解释这些关系,广义加性混合模型(GAMM)成为一种强大的工具。......