Skip to content

cathyLiu0629/Volatility_Strategy

Repository files navigation

剔除跨期截面相关性的纯真波动率因子

刘翼 学号:221040012

本策略的实现主要来源于《寻找特质波动率中的纯真信息——剔除跨期截面相关性的纯真波动率因子》,核心内容主要有以下三点:

  • 数据预处理及因子计算 :获取2007-2021年全部上市A股收盘价、市值、市盈率、指数价格,用Fama-French三因子模型进行回归,获得传统特质动率因子
  • 传统因子改进 :学术研究表明,金融资产收益的时间序列数据,通常表现出波动率聚集现象。该现象存在于个股层面, 就导致股票的波动率因子具有较强的跨期截面相关性。在利用传统波动率因子进行每月选股时,由于这种相关性而被重复利用的过往因子信息,会给我们带来干扰,削弱当期因子的选股效果。因为这里我们用时间序列自回归模型对特制波动率因子进行回归,剔除聚集现象的影响。
  • 分组收益及IC值计算 :策略的核心是控制投资组合在更多的风险因子上的暴露与基准指数一致,以期获得更小的跟踪误差。该策略需要通过求解二次优化或非线性优化问题来构建最优组合。

项目各个模块代码功能说明

配置文件及配置文件读取

config.ini

配置文件,存储了聚宽和tushare账户的用户名密码/token,用于读取数据

config_operate.py

实现对上述配置文件读取

原始数据的获取

functional.py

包含了所有获取数据的功能函数,获取的数据为了方便下次读取,以csv格式存储于~\data\文件夹下:

  1. query_PB 获取指定股票池指定时间段的市盈率数据,用于三因子模型回归,保存在‘PB.csv’中 二维:证券,日期
  2. query_mkt_cap 获取从起始日期到终止日期的市值数据,用于三因子模型回归以及HML/SMB的计算,保存在‘MktCap.csv’中 二维:证券,日期
  3. query_close_price 获取指定股票池指定时间段的收盘价数据,用于三因子模型回归,保存在‘Close.csv’中 二维:证券,日期
  4. query_mkt_close_price 获取指定时间段的全A指数收盘价数据,用于三因子模型回归,保存在‘MktClose.csv’中 二维:证券,日期
  5. query_pct_change 获取指定股票池指定时间段的收益率数据,用于三因子模型回归,保存在‘Pct_Chg.csv’中 二维

数据预处理

data_preprocess.py

这部分共有四个函数:factors_null_process、extreme_process_MAD、data_scale_Z_score、neutralization,对因子数据进行了缺失值、去极值、标准化、市值和行业中性化处理。

模型建立

Regression.py

这个模块用于计算因子模型的各个因子值,以及回归模型的类。 1.get_SMB:读取Pct_Chg.csv、MktCap.csv的数据,输出以日期为index的SMB的Series格式数据 2.get_HML:读取Pct_Chg.csv、MktCap.csv、PB.csv的数据,输出以日期为index的HML的Series格式数据 3.get_MKT:读取MktClose.csv的数据,输出以日期为index的市场指数收益率的Series格式数据 4. FF_Regression:专门用于传统三因子模型的回归 初始化列表:factor_list:一个包含每个因子的Series的list;return_data:被回归的收益率数据 regression_residual:回归模型,获取传统收益率因子并以日期序列为index存入csv中

pure_iv.py

用时间序列自回归模型对特制波动率因子进行回归,剔除聚集现象的影响。从iv.csv中获取传统波动率因子的时间序列数据,然后取6期进行自回归,得到纯真波动率因子

策略生成主代码文件

main.py

import 上述各个模块中的功能函数,依次运行

回测

backtest.py

回测模块使用了backtrader的第三方模块 策略为每月底调仓,调仓目标权重由main.py生成的trade_info.csv文件(时间、股票、权重三个维度)输入 策略的data feed由functional.py中的get_price_info获取指定回测区间的行情数据 构建一个完整的回测object运行即可

策略构造相关参数

交易标的及周期选取

股票池:沪深300指数 周期:2007/1/5 - 2021/6/31

因子表

类别 因子名称 因子code 因子计算方式
规模 市值 market_cap 总市值
估值 账面市值比 book_to_price_ratio 净资产/总市值

因子处理过程用到的重要公式

取极值

采用MAD(Median Absolute Deviation 绝对中位数法)去极值,对于极值部分将其均匀插值到 3-3.5 倍绝对中位数范围内。具体操作如下,首先计算当期所有股票在因子f上的中位数 𝑚𝑓 ,然后计算绝对中位数 𝑀𝐴𝐷=𝑚𝑒𝑑𝑖𝑎𝑛(|𝑓−𝑚𝑓|) 采用与 3𝜎 法等价的方法,保留 [𝑚𝑓−3∙1.483∙𝑀𝐴𝐷,𝑚𝑓+3∙1.483∙𝑀𝐴𝐷] 之间股票 的因子值不变,取值大于 𝑚𝑓 + 3 ∙ 1.483 ∙ 𝑀𝐴𝐷 的所有股票的因子取值按排序均匀压缩到 [𝑚𝑓+3∙1.483∙𝑀𝐴𝐷,𝑚𝑓+3.5∙1.483∙𝑀𝐴𝐷] 之间,取值低于 𝑚𝑓 − 3 ∙ 1.483 ∙ 𝑀𝐴𝐷 的所 有股票的因子取值按排序均匀压缩到 [𝑚𝑓−3.5∙1.483∙𝑀𝐴𝐷,𝑚𝑓−3∙1.483∙𝑀𝐴𝐷] 之间,这样去除了极值同时也在极值的股票之间保序。

标准化

为了使得构造复合因子时各因子间量纲统一,我们对每个因子进行标准化处理,采用 Z-Score 方法来对因子取值标准化,使得因子的均值为 0,标准差为 1,即 𝑓′=𝑓−𝑚𝑒𝑎𝑛(𝑓)𝑠𝑡𝑑(𝑓)

市值和行业中性化

由于因子可能受到市值以及行业的影响较大,因此需要对市值和 行业进行中性化处理,即对下式做回归取残差:

𝑓𝑖=𝛽𝑀𝑉𝑀𝑉𝑖+Σ𝛽ind𝑗𝑋𝑖𝑗+𝜖

其中 𝑀𝑉𝑖 为股票𝑖的对数总市值,也进行了去极值、标准化的处理, 𝑋𝑖𝑗 为股票 𝑖 对于行业 𝑗 的0-1哑变量,对回归后得到的残差 𝜖 继续做去极值、标准化处理得到中性化后的因子取值。

因子构建过程

个股的投机最后必然会表现在股票的交易层面,我们通过波动率高低、个股收益能否被市场风格解释、股价能否及时反应市场公共信息、以及股票的换手程度等四个维度来刻画个股的投机性程度。我们认为被过度投机的股票一般具有下述特征: 高波动性:被投机的股票一般多空分歧较大,多空博弈的结果导致大的波动。由于个股的某些波动是由市场风格变动引起的,所以我们用剔除市场风格波动后的特质波动率来衡量个股的波动程度。 风格独立:一般而言,被过度投机的个股在交易时多依赖于其自身的私有信息,无视市场的涨跌或风格,以此投机性强的股票与市场风格关联性差,市场风格对其收益的解释程度弱。我们构建了特异度指标用来度量个股收益中不能被市场风格解释的成分占比。 价格时滞:正常情况下个股的股价能够及时的反应市场公共信息(市场指数),但是当个股被过度投机时可能会过度关注个股层面的信息,导致市场层面的消息可能反应不足。我们通过价格时滞因子度量个股是否及时反应了市场公共信息。 高换手:换手率是交易员常用的用来甄别投机性股票的指标,投资者投机股票时一般追求的短期收益,成交频繁,博取短期收益,因此股票投机性强时自然伴随着较高的换手率。考虑到市值和换手的相关性,我们用市值调整后的换手率来度量个股的换手特征。 (1)每月月底,回溯所有股票过去20个交易日的数据每只股票都根据Fama-French三因子模型进行回归,得到每日的特质收益率 ,即 image (2) 计算每只股票20个特质收益率的标准差 ,即为股票剔除 Fama-French三因子后的特质波动率ID_Vol (3) 暂取滞后阶数 N=6 每月月底将本月因子值对过去6个月的因子值做多元线性回归,即 image (4)取残差向量 𝜇𝑖,𝑡<\sub>,即为该月所有股票剔除截面相关性之后的波动率因子值为纯真波动率因子ID_Vol_deCorr

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages