Optiver公司于1986年在荷兰阿姆斯特丹成立,是全球领先的金融衍生品做市商和程序化交易公司。在过去的30年间,集团分别在阿姆斯特丹、芝加哥、悉尼、上海、香港和台湾设立了地区性总部和分支机构,各自活跃于各大主要金融衍生品交易所,积极参与期权、期货、股权、债券等交易,全球拥有超过1000名员工。
2020年7月,Optiver联合Kaggle举办波动率预测比赛,目的是预测各交易品种的波动率。比赛官网地址:Optiver Realized Volatility Prediction。

1)背景介绍
波动率预测对于投资交易较为重要,结合波动率,可以制定不同类型的交易策略。更详细的解释可以参考如下链接。
2)数据特点
这个比赛的一大特点,是类似于高频量化交易,数据频次可以精准到秒级别。
- 数据收集过程

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

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

这个图中包括五条曲线,从上到下依次是卖二、卖一、成交价、买一、买二。这条曲线充分反应了交易过程中报价和成交的动态变化过程。横轴代表时间,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
【知乎日报】千万用户的选择,做朋友圈里的新鲜事分享大牛。
点击下载