实际波动率预测
- 1. 比赛概述
- 1.1 背景介绍
- 1.2 赛事目标
- 1.3 评估指标和结果提交
- 2. 数据介绍
- 2.1 book_[train/test].parquet
- 2.2 trade_[train/test].parquet
- 2.3 train.csv
- 2.4 test.csv
- 2.5 sample_submission.csv
- 3. Optiver提供的[官方帮助文档](https://www.kaggle.com/jiashenliu/introduction-to-financial-concepts-and-data)
- 3.1 金融概念
- 3.1.1 订单簿(Order book)
- 3.1.2
kaggle比赛: optiver realized volatity prediction
1. 比赛概述
1.1 背景介绍
在金融市场中,波动率反映了价格的波动幅度,高波动率代表了市场震荡,价格大幅变动,而低波动率代表了较为平静的市场。期权的价格与标的资产的波动率相关,波动率预测的准确性将使得期权的定价更加公平公允,因此准确预测波动率对期权交易至关重要。
以欧式认购期权为例,期权价格公式如下所示(Black-sholes):
c = S 0 N ( d 1 ) − K e − r T N ( d 2 ) d 1 = l n ( S 0 / K ) + ( r + σ 2 / 2 ) T σ T , d 2 = d 1 − σ T c = S_0N(d1) - Ke^{-rT}N(d2) \\ d1 = \frac{ln(S_0/K)+(r+\sigma^2/2)T}{\sigma \sqrt{T}} , d2 = d1 - \sigma \sqrt{T} c=S0N(d1)−Ke−rTN(d2)d1=σTln(S0/K)+(r+σ2/2)T,d2=d1−σT
在BS公式中,假设波动率是固定不变的,并且实际波动率=隐含波动率。在其他条件不变的情况下,当波动率 σ \sigma σ越大,期权的理论价格就越高。
v e g a = ∂ f ∂ σ = S T N ′ ( d 1 ) > 0 vega = \frac{\partial f}{\partial \sigma} = S \sqrt{T} N'(d1) \gt 0 vega=∂σ∂f=STN′(d1)>0
但是实际中,未来实际波动率是无法提前得知,期权的波动率越高,标的价格超过行权价的可能性就越大( P & L = m a x ( S T − K , 0 ) P\&L = max(S_T-K,0) P&L=max(ST−K,0),只有超过了行权价买方才会行权),买方获得收益的可能性就越大。为了避免亏损,期权的卖方通常会取一个很高的波动率来进行定价,期权的价格将会偏高。
1.2 赛事目标
在比赛前三个月(2021年6月28日-2021年9月27日),各位参赛者将通过构建模型来预测不同行业的数百只股票的短期波动情况(10分钟内波动率),模型将根据后三个月真实市场数据进行评估。
1.3 评估指标和结果提交
**评估指标:**本次评估指标用的是RMSPE,如下所示:
R M S P E = 1 n ∑ i = 1 n ( ( y i − y ^ i ) / y i ) 2 RMSPE = \sqrt{\frac{1}{n}} \sum_{i=1}^{n} ((y_i - \hat{y}_i)/y_i)^2 RMSPE=n1i=1∑n((yi−y^i)/yi)2
结果提交: 结果文件submission.csv中应该包括row_id和target两列,如下所示。并且必须通过Notebooks来提交代码,运行时间不能超过九个小时。
row_id | target |
---|---|
0-0 | 0.003 |
0-1 | 0.002 |
0-2 | 0.001 |
2. 数据介绍
该数据集包括了在金融市场中实际交易执行相关的股票市场数据,包括了订单簿数据和交易数据。秒级的数据以更细的粒度描述了金融市场的微观结构。
数据集是不允许下载的,只有测试集的前几行可供下载,可在notebook中进行使用,隐藏的测试集大概有15w的数据需要预测,public leaderboard和private leaderboard所使用的的数据是完全没有重叠的。
2.1 book_[train/test].parquet
该文件中提供了进入市场的最具竞争力的买卖订单的订单簿数据,通俗来说,也就是买一,卖一,买二,卖二价格数据。一个stock_id对应了一个订单簿文件,test里面只有stock_id=0的数据。
变量名 | 变量含义 |
---|---|
stock_id | 股票的id代码,parquet文件中stock_id是类别变量,可能希望转换为int8类型 |
time_id | 时间段的id代码,时间id不一定连续,但在所有股票中都是一致的。 |
seconds_in_bucket | 开始的秒数,通常从0开始,每十分钟为一个时间段,相当于这十分钟里的秒数。 |
bid_price[1/2] | 买一/买二价,已标准化 |
ask_price[1/2] | 卖一/卖二价,已标准化 |
2.2 trade_[train/test].parquet
该问题提供了交易数据。通常来说,投资者被动买卖的交易意向比实际交易要多得多,所以实际的交易数据会比订单簿更加稀疏。(被动买卖:不着急出手,认为股票股价还有发展的潜力(或跌或涨),挂单的价格相比于买一卖一没有那么有竞争力;主动买卖:急于出手,以卖一价以上的价格成交或以买一以下的价格成交)。一个stock_id对应了一个交易数据文件,test里面只有stock_id=0的数据。
变量名 | 变量含义 |
---|---|
stock_id | 股票的id代码 |
time_id | 时间段的id代码 |
seconds_in_bucket | 同上,由于交易数据一般较为稀疏,因此该字段不一定从0开始 |
price | 一秒钟内的平均交易价格,按照股票数量加权,并标准化。 |
size | 交易的股票总数 |
order_count | 交易订单的数量 |
2.3 train.csv
提供了波动率的数据
变量名 | 变量含义 |
---|---|
stock_id | 股票的id代码 |
time_id | 时间段的id代码 |
target | 接下来十分钟的实际波动率,特征和目标数据之间没有重叠 |
2.4 test.csv
变量名 | 变量含义 |
---|---|
stock_id | 股票的id代码 |
time_id | 时间段的id代码 |
row_id | 提交行的唯一标识符,对于每一个(stock_id,time_id)对,有一个唯一的标识符,同时不是每一个time_id都对应了所有的stock_id。 |
2.5 sample_submission.csv
格式正确的样例提交文件。
变量名 | 变量含义 |
---|---|
row_id | 同test_csv |
target | 与train.csv中的定义相同。 |