【案例分析】基于高频数据的已实现波动率模型研究

1  研究目的

关于股票波动特征的描绘以及基于已有数据的有效预测,一直都是研究金融市场重要的方向,对交易员与监管部门而言都有非常重要的理论与现实价值。目前针对波动率描述方法可以分为三种:历史波动率、隐含波动率与已实现波动率。基于高频数据的模型应用日益兴盛,且使用已实现波动率方法让计算更为便捷,可以较好地刻画日内真实潜在波动率过程,并能通过递推较好地实现未来已实现波动率预测。

本文旨在研究已实现波动率对潜在真实市场波动率进行代替估计效果,尤其是其表现的特征对预测之后波动率的作用,以及相关数据经机器学习后的预测有效性进行探究。目前已有GARCH、SV模型等帮助解释波动,及其附加已实现波动率进行拓展的GARCH-RV等模型,也有近年提出的ARFIMA等模型助于刻画长记忆时间序列的动力学特征。为了探索基于高频数据的已实现波动率模型,本文采用Optiver公司发布的数据来分析该现象。

2  数据介绍

        2.1  数据来源与文档介绍

本文使用高频数据下载自Optiver公司发布的比赛,属于银行金融领域。因为最终模型目标是,探索性挖掘高频数据特点与已实现波动率特征,并对高频数据的已实现波动率进行预测。

给定数据共四大类,具体有train、test两个CSV文件用于作为模型训练集和测试集,共四个parquet文件夹包含给定10分钟内所有买卖盘与交易数据的训练集与测试集:book_train、book_test、trade_train、trade_test。

其中“book”代指“Order Book”即为买卖盘,表示市场某一时刻的需求/供应(出价/要价)情况。“trade”代指“Market Trade”,只当市场中有相同价格的买家和和卖家时才能达成交易。二者的统计数据可以反映部分市场流动性和股票估值等数据,也能帮助进行波动率计算及其预测

根据给定数据,可以制定策略:选定stock_id后,取其中不同time_id探索,相当于以30min作为取样周期,研究不同时间段上同一只股票的波动状态。而针对每一个30min时间段,其中的0-10min用以训练模型样本,中间10-20min用以已实现波动率的计算,剩下的最后20-30min则不做使用。

2.2  数据各变量的含义

数据共包含428932(train)+917553(book_train)+123443(trade_train)=1469928条(训练集)数据,一共12个属性特征,其中每个属性特征的含义以及数据类型如下表。

序号

属性名称

解释

包含于某文件

1

stock_id

股票ID代码

book_[train/test]、

trade_[train/test]、

train.csv、

test.csv

2

time_id

时间段ID代码

book_[train/test]、

trade_[train/test]、

train.csv、

test.csv

3

row_id

通过字符串“_”连接stock_id和time_id

test.csv、

输出结果

4

seconds_in_bucket

从0开始,时间段秒数

book_[train/test]、

trade_[train/test]

5

bid_price[1/2]

最具竞争力/第二最具竞争力的买入标准化价格

book_[train/test]

6

ask_price[1/2]

最具竞争力/第二最具竞争力的卖出标准化价格

book_[train/test]

7

bid_size[1/2]

最具竞争力/第二最具竞争力的买入股票数量

book_[train/test]

8

bid_size[1/2]

最具竞争力/第二最具竞争力的卖出股票数量

book_[train/test]

9

price

某一秒交易数据的标准划加权平均价格

trade_[train/test]

10

size

某一秒交易总规模(支)

trade_[train/test]

11

order_count

某一秒交易进行总数量(次)

trade_[train/test]

12

target

相同股票和时间段在十分钟内的已实现波动率

train.csv、

输出结果

其中仅stock_id会以不同格式存放(在parquet文件中以categories分类类型,在csv文件中以int整型类型),其余均使用int整型类型。time_id在不同文件中均表示时间段标识符,但其并不总是连续,比如time_id=2不一定发生在time_id=1之后。second_in_bucket在买卖盘book中始终从0开始计数,而在交易trade中相对买卖盘而言数据不够丰富,因此不一定从0开始。

3  数据预处理与分析探索

3.1  数据特点

文件train.csv是各股票各时间段10分钟内的已实现波动率,训练集中包含两种属性:“stock_id”、“time_id”。经过统计,数据共有112支不同的股票id,3830个不同的时间段id,因此从两个角度探索性分析。

可以先分析10分钟内的波动率统计量,而后和已实现波动率比对。

        3.1.1 按股票id分析target

表 1 已实现波动率统计量

  

       图 1已实现波动率均值                                         图 2 已实现波动率累计叠加

已实现波动率均值为0.004,整体数值都较为接近于0。而已实现波动率的叠加平均值(按time_id叠加)为14.8,但也有的数值超过了30。但整体数据在10分钟内,需要结合更多市场情况、数据特征才能做出好的判断,并全面整体市场波动程度,但也能反映部分股票的较强起伏情况。

        3.1.2 按时间段id分析target

我们随机选取到股票id 为0,且随机选取其时间段id为5的买卖盘数据(线),叠加上具体交易数据(蓝点),观察其各个变量的变化情况。

图 3 stock_id=0,time_id=5的买卖盘、交易数据图

可以明显看出买卖盘整体波动幅度较小,出/要价都在0.003范围内起伏,但是波动频率较为频繁。也表现出其特点是bid(出价)价格都会低于ask(要价)价格,且当整体出价和要价均值较为接近时,更易于产生交易(即蓝点),较少发生在线中间。

为更清晰说明已实现波动率能表现10分钟市场的微观表现,我们抽取已实现波动率最小最大的时间段。

图 4 stock_id=0已实现波动率最小的买卖盘、交易数据图(time_id=24253)

图 5 stock_id=0已实现波动率最大的买卖盘、交易数据图(time_id=19725)

通过计算得到在time_id=24253时,该时间段的已实现波动率最大,有target=0.000593833,在time_id=19725时已实现波动率最小,有target=0.036311154。

图 6 最大波动率与最小波动率的交易数据散点图

因为交易价格数据可以反映市场在某时刻对该股票的估值,以及间接说明出价/要价的大致位置,用同一股票的交易价格散点图很容易看出,已实现波动率小的时间段内交易价格稳定在1.00周围,而已实现波动率大的时间段,即使只有10分钟的抽样频率,交易价格也非常不稳定。

3.2  特征数据

在股票交易市场上,不同的股票交易水平也会有所差异,本文通过最佳要价与最佳出价的比值表示买卖价差,其公式为:

给定股票的价格变化往往会使用已实现波动率作为统计衡量,而计算价格变化需要得到相邻时间段的股票价值,因此需要先对时间轴上所有相同时间间隔点进行股票估值。

本文使用WAP来计算股票在这些时间点上的加权价格,也就是股票在此刻的估值,由于Book数据文件中给出了最具/第二具竞争力的买卖价格与买卖规模数据,因此此处我们以WAP1指代“最具”条件下的加权均价,并以之为例做出以下定义:

为计算前后相邻时间间隔的收益率,且往往在金融领域进行取对数做修饰,对数收益率可以因此被定义为:

第一行返回值会是空值,因为在第一个数据之前的WAP是未知的,而后返回值为空的数据点会被删除,最终我们也会定义十分钟的对数收益率为:

而对于之后的模型构造来说,股票对数收益率的标准差更有研究意义。我们将计算所有连续订单簿的对数收益率,我们将已实现波动性定义为对数收益率平方和的平方根:

可以看出使用了WAP作为股票价格基本单位,为使得定义尽可能的简单明了,就没有按年计算波动率并假设对数收益的均值为0。

常用预测有效性指标是MSE等,本文选用均方根百分比误差目标函数:

但对于简单模型而言,这个会等效于对RMSE加权:

因此优化成相对误差后,RMSPE权重代码:

RMSPE和RMSE非常相似。它们之间的唯一区别是,误差除以实际值。更接近实际值的预测产生的误差更接近于0,因此除以实际值对更大的误差很敏感。此外,在对误差进行平均之前,还需要对其进行平方,这使得该指标对更大的误差更加敏感。

3.3  特征工程

        3.3.1 数据预处理

首先对所有数据进行由分析,发现所有在买卖盘Book的time_id均可以于交易数据Trade一一对应,且没有丢失的数据。

所有的数据文件均没有出现数据丢失,但部分数据有零值为正常情况。

图 7 核密度与概率分布图

target(已实现波动率)的分布高度右偏,存在极端异常值,代表会一些股票波动很大,具体异常值可以在概率图上找出,但异常值也在研究范围内,是市场的正常波动无需进行删除处理。

        3.3.2 数据特征相关性

10分钟的已实现波动率是从WAP1和WAP2中提取的,同样也可以对其他统计量进行聚合,如均值、标准差、最小值、最大值、target也可以用于特征工程。本文创建了简单特征bid_ask_price_ratio(例如:bid_price1 / ask_price1),和WAP1、WAP2均遍历了买卖盘数据并对所有统计量进行计算聚合。

图 8 三者与target聚合

发现并非所有统计量有较好聚合效果(其余见附录6.1.1),如上图一的bid_ask_price_ratio上的聚合要么是极端左偏,要么是极端右偏,因为很多值都聚集在0或1附近。然而,target和bid_ask_price_ratio聚合间有一定关系。WAP的均值、最小值和最大值也不能提供信息(其余见附录6.1.2与6.1.3),但WAP1和WAP2的已实现波动率分布与target的分布非常相似,表明它们与未来10分钟窗口的已实现波动率存在相关性。

图 9 target和特征的相关性热力图

而后我们进行热力图分析,发现与target相关性最大的特征是WAP1、WAP2和bid_ask_price_ratio的已实现波动率,与target相关性次之的特征是WAP1、WAP2和bid_ask_price_ratio的标准差,其余均不相关

        3.3.3 股票K-means聚类

数据给定的112只股票可能分布在不同的行业,我们便尝试通过已实现波动率进行聚类。股票关系特征也会对已实现波动率研究有帮助。

图 10 股票聚类

采用K-means算法进行聚类,将已实现波动率的基本集合作为特征,并将聚类投影到二维空间中进行可视化,用不同颜色标记不同类别股票。

4  构造模型

4.1  朴素预测

由于波动率经常是自相关的,本文便利用这个特性来构造朴素模型,利用train.csv给定的10分钟已实现波动率,来预测未来已实现波动率。

给定数据是通过股票id进行划分,我们可以通过逐个股票id来预测已实现波动率最终再合并到一起。读取买卖盘数据,计算出需要的WAP等特征,通过上述已实现波动率定义进行计算,后续以此对个股进行预测,并通过RMSPE和R2两个指标,来评价朴素预测效果。

得到R2得分为0.628,RMSPE为0.341,因此朴素模型表现一般。

4.2  针对GARCH改进并对照于HAR-RV

        4.2.1 GARCH模型分析

广义自回归条件异方差模型GARCH可以用作对历史波动率的研究,而我们也可以加以拓展,通过加入(对数)已实现波动率作为附加变量,可以刻画其波动率和进行一定的已实现波动率预测,即为GARCH-(ln)RV模型

首先我们使用随机抽样得到的股票,以及随机的时间跨度(singe time_id)来研究波动聚集性。得到对数收益率的ACF图与PACF图(见附录6.2.1),均存在有1阶或2阶滞后现象,意味着所有高阶自相关都可以用lag-1和lag-2自相关来解释。再构造ARIMA模型,并寻找是否存在波动率聚类。

通过拟合查询每支股票的最佳ARIMA配置:

表 2 ARIMA参数

发现不同的股票似乎遵循不同的ARIMA模型配置。把这些不同配置代入ARIMA模型,观察残差平方中是否存在波动率聚类。

从残差平方的图像(见附录6.2.2)来看,数据中显然存在波动率聚类现象,尽管聚类程度仍然会因为stock_id和time_id而产生差异,继续观察残差平方是否存在自相关性。

观察平方残差的ACF/PACF(见附录6.2.3),也表现出lag-1和lag-2的自相关性,由此我们可以用GARCH模型实践,并辅以加入滞后1期的已实现波动率估计作为附加解释变量的拓展模型(GARCH-RV),如下式所示:

        4.2.2改进的ARFIMA模型

此外由于普通ARMA没法精准描绘长记忆特征的序列,作为改进可以使用ARFIMA模型刻画此类序列的动力学特征。

通过模型检验和评估的方式,可以选择最佳的ARFIMA配置,包括统计指标和信息准则(如AIC和BIC)等的综合因素,可以比较不同ARFIMA模型的拟合和预测性能,而且具体的ARFIMA参数选择可能因数据、研究目的和模型检验的结果而有所不同。

考虑到不同滞后阶数的ARFIMA模型对长记忆时间序列的估计结果非常接近,同时结合上述模型估计的AIC大小,我选择用ARFIMA(1,d,1)分析美国期权市场高频数据。

ARFIMA模型的一般形式为:

 

其中:Y是待估的时间序列(如:RV、lnRV等),L为滞后算子,

为分数差分算子,μ为Y的均值,为自回归滞后p阶算子,为移动平均滞q阶算子,同时假定,且对波动率模型简记为:ARFIMA-RV、ARFIMA-lnRV。

        4.2.3波动率预测方法

已有10分钟的买卖盘数据和交易数据,因此可以以之前某一时间id内的所有时刻为估计样本,但整体样本数据量H并不固定(second_in_bucket在不同time_id不一定都存在),但整体区间都是10分钟内,设未来预测第t秒波动率预测,因交易数据较稀疏,预测的已实现波动率也相应降低一些,有t=H+1,H+11…,H+601(10分钟内预测60次)。

选取这H个样本分别对GARCH-RV和ARFIMA-RV(或取对数的ARFIMA-lnRV)波动模型的参数进行估计,以之为基础便可以获得某一时刻在未来的波动率预测,再对相同股票不同时间id的非零波动率按同样的方法进行参数估计后取其均值,得到未来后一时刻的波动率预测,记作 ,即为前H个样本数据基础上对第H+1秒的波动率预测。

保持原估计样本区间[0,H]不变的情况下,后续继续平移1个单位时刻添加进1个单位时刻作为新增估计样本,重复上述预测参数操作,便得到第2个单位时刻(即为第11秒)的预测波动率,记作,同理重复上述步骤至,即得到未来10分钟的市场波动率。

以相同的方式,也可以估计预测出在样本区间的已实现波动率,即上述提供的高频收益率平方和,记作,可以用来衡量上述提及的波动率模型预测精度。

4.3  LightGBM模型

在建立WAP1、WAP2、对数收益率、已实现波动率等数据特征后,录入数据并进行特征工程,遍历所有秒数取得特征,由此搭建买卖盘的预测函数,而后对交易数据的属性与特征同样进行上述操作。

搭建preprocessor,并使用Joblib以此避免多次重复计算和透明地持久化到磁盘,合并训练集并按row-id定义来完成属性值添加后开始训练模型。

定义上述RMSPE目标函数,并设置好超参数,设置k折(n_splits=4)交叉验证参数评估后续训练的模型,开始通过LGBM模型构建与对未来10分钟的已实现波动率预测。

最终得到的预测有RMSPE得分为0.2327。

4.4  结果分析

根据已有模型结果不难看出LightGBM模型较之朴素模型预测更为准确,整体已实现波动率预测效果,通过优化后的RMSPE得分对比,前者更低,预测准确性更为符合

查阅文献及其模型证明来看,专为基于高频数据的两个RV波动率模型都较好刻画后续时间内的市场波动状况,已实现波动率预测效果显著。而就GARCH的拓展模型与之对比来看,总体上GARCH模型有较为明显的高估波动率倾向。

5  总结

文章通过对四个数据的探索性分析,观察发现已实现波动率可以较好的反映给定10分钟的市场微观表现,并对买卖盘和交易数据的综合数据有较好总结作用,有效分析潜在真实市场的波动状态。

定义的特征数据可以有效反映股票价格、收益率趋势与预测精度,并通过特征工程发现特征与已实现波动率具有一定相关性,可以以已实现波动率进行聚合后,辅助后续机器学习预测。

模型整体符合异方差性,后加入滞后1期的已实现波动率估计作为附加解释变量的拓展得到GARCH-RV模型,且对照基于高频数据已实现波动率常用的ARFIMA模型,二者进行波动率预测,辅以变量衡量预测精度,根据已有预测经验分析后者有更精确的市场波动刻画效果。

通过朴素模型与LightGBM模型等机器学习方法训练与预测已实现波动率,发现也能提供较高精度,通过优化后的RMSPE得分比对下后者对于已实现波动率预测刻画更为准确,可以作为ARFIMA等模型辅助帮助刻画市场波动。

6  参考文献

[1] https://www.kaggle.com/competitions/optiver-realized-volatility-prediction/data

[2] Xie H, Li J. Intraday volatility analysis on S&P 500 stock index future[J]. International Journal of Economics and Finance, 2010, 2(2): 26-34.

[3]龙瑞, 谢赤, 曾志坚, 罗长青. 高频环境下沪深300股指期货波动测度——基于已实现波动及其改进方法. 系统工程理论与实践, 2011, (5): 813-822

[4]魏宇.沪深300股指期货的波动率预测模型研究[J].管理科学学报, 2010, 13(2):11.DOI:CNKI:SUN:JCYJ.0.2010-02-009.

[5] The distribution of realized exchange rate volatility Andersen, Torben G;Bollerslev, Tim;Diebold, Francis X;Labys, Paul Journal of the American Statistical Association; Mar 2001; 96, 453; ProQuest pg. 42

[6] Zhang, Zihao, Bryan Lim, and Stefan Zohren (2021). “Deep Learning For Market By Order

[7] https://users.metu.edu.tr/ozancan/ARCHGARCHTutorial.html

7  附录

7.1聚合效果

        7.1.1 其余统计量与bid_ask_ratio的聚合效果

依次为均值、方差、最小值、最大值

        7.1.2 其余统计量与WAP1的聚合效果

依次为均值、方差、最小值、最大值

        7.1.3 其余统计量与WAP2的聚合效果

依次为均值、方差、最小值、最大值

7.2 GARCH异方差性检验

        7.2.1 ACF图与PACF图

股票id依次为82、80、48、50、89

        7.2.2 残差平方图像

股票id依次为82、80、48、50、89

        7.2.3 残差平方ACF、PACF图像

股票id依次为82、80、48、50、89

  • 20
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值