Optiver波动率预测金牌方案解读

Optiver公司于1986年在荷兰阿姆斯特丹成立,是全球领先的金融衍生品做市商和程序化交易公司。在过去的30年间,集团分别在阿姆斯特丹、芝加哥、悉尼、上海、香港和台湾设立了地区性总部和分支机构,各自活跃于各大主要金融衍生品交易所,积极参与期权、期货、股权、债券等交易,全球拥有超过1000名员工。

2020年7月,Optiver联合Kaggle举办波动率预测比赛,目的是预测各交易品种的波动率。比赛官网地址:Optiver Realized Volatility Prediction

1)背景介绍

波动率预测对于投资交易较为重要,结合波动率,可以制定不同类型的交易策略。更详细的解释可以参考如下链接。

市场波动率的研究意义到底何在?

波动率模型的应用 | 金融时间序列分析讲义

2)数据特点

这个比赛的一大特点,是类似于高频量化交易,数据频次可以精准到秒级别。

  • 数据收集过程

这题的数据设计方式较为科学,也在一定程度上限制了数据泄露。针对某个stock_id,选取30min作为取样周期,其中前10min用于计算训练样本,中间10min用于计算target,最后10min不做使用。目的就是使用前10min的数据,预测下10min的波动率。

  • 自变量

数据主要包括两部分,报价数据和成交数据。

https://www.kaggle.com/code/jiashenliu/introduction-to-financial-concepts-and-data

上图是成交和报价数据,bid代表买,ask代表卖;当买价和卖价打成一致的时候,会出现成交。

https://www.kaggle.com/code/chumajin/optiver-realized-eda-for-starter-english-version

这个图中包括五条曲线,从上到下依次是卖二、卖一、成交价、买一、买二。这条曲线充分反应了交易过程中报价和成交的动态变化过程。横轴代表时间,0-600s,即10min;纵轴代表价格。

  • 因变量:实际波动率

这个比赛使用成交均价计算收益率,再使用收益率计算波动率,这里我贴原图方便大家理解。

3)解决方案

  • 特征部分

这个比赛的数据精准到了秒级别,每1min数据又包括了60s的报价和成交数据。所以基于此,我们可以做出大量的aggregation特征。当然也可以设计cnn或者rnn专门去处理这些序列数据,不过对建模能力有较高的水准要求。

这里我列一下重点的特征。

特征名 解释
stock_id 股票代码
log_return_realized_volatility 过去10min基于买一和卖一报价计算的实现波动率
log_return_realized_volatility_300 过去5min基于买一和卖一报价计算的实现波动率
trade_seconds_in_bucket_count_unique_300 过去5min发生的交易的时刻数
price_spread_mean 交易价差
trade_seconds_in_bucket_count_unique 过去10min发生的交易的时刻数
price_spread_mean_300 过去5min交易价差
trade_log_return_realized_volatility 过去10min基于成交价计算的实现波动率
trade_log_return_realized_volatility_300 过去5min基于成交价计算的实现波动率
log_return2_realized_volatility 过去10min基于买二和卖二报价计算的实现波动率
log_return2_realized_volatility_300 过去5min基于买二和卖二报价计算的实现波动率
wap_balance_mean 过去10min的成交均价价差
wap_balance_mean_300 过去5min的成交均价价差
trade_size_sum 过去10min的交易量
trade_size_sum_300 过去5min的交易量
ask_spead_mean 基于卖方报价的价差
bid_spead_mean 基于买方报价的价差
bid_ask_spead_mean 基于买方和卖方报价的价差

LightGBM starter with feature engineering idea 更多特征可以参考该文档。

除了上述特征外,这个比赛还有两个重要的特征工程技巧,每个技巧都可以大幅提高比赛得分;分别是基于time_id的KNN和基于stock_id的kmeans。

基于time_id的KNN:使用knn算法找到相近的timeid,并把上述的重要的特征重新聚集一遍;反映时间特征。

基于stock_id的kmeans:使用corr+kmeans,找到相近的stockid,并把上述的重要的特征重新聚集一遍;反映行业特征。

更详细的可以参考optiver第一名解决方案Optiver Realized Volatility Prediction

  • 模型部分

模型部分使用常见的lgb、nn模型即可处理。

总结

1 这个比赛的数据精准到了秒级别,数据量较大,是难得的高频量化比赛。

2 参赛者可以通过一系列特征工程和模型算法,感受如何使用ML和DL方法去解决金融问题。

3 这个比赛还是存在数据泄露的trick的,参赛这一旦发现了计算相似time_id的trick,得分就会有较大的提升。如果当时开发了API接口,可以避免这个问题。另外,如果不是这两个强特,这个比赛的波动实际上是挺大的。

4 数据切分方式:这个比赛的数据收集设计比较严谨,不会出现train和valid时间交叉的问题,使用简单的kfold或者groupkfold即可。

5 至于要不要把stock_id作为特征加进去,这里要分问题而定。如果是预测收益率,建议不加,如果是预测波动率,建议加。原因大概是因为有些品种确实存在较大的波动性,把stock_id作为category变量加进去可以让模型学到。

6 行业特征和相邻时间特征,不止在这个比赛上比较重要,在实际量化中,也都十分重要。

来源:知乎 www.zhihu.com

作者:Light

【知乎日报】千万用户的选择,做朋友圈里的新鲜事分享大牛。
点击下载