471. Optiver Realized Volatility Prediction | optiver-realized-volatility-prediction
感谢 Optiver 主办了一场非常有趣的比赛,我非常享受深入挖掘其中的细节。我想分享一些我发现的、尚未被讨论过的引人注目的特征。我也已经公开了我的第15名方案的 Notebook,虽然我不能保证它的可读性很高。
我将讨论的特征包括:结合所有订单簿订单的加权平均价格(WAP)扩展、订单簿流动性度量,以及一个从上述内容衍生出的特征,该特征与波动率具有显著的高相关性。
首先,我们被给定的加权平均价格定义是在 [bid_price, ask_price] 范围内最小化以下函数:f(x) = -bid_size*log(x-bid_price) - ask_size*log(ask_price-x)。鉴于此,我们可以将其外推到一个包含多级市场深度的 WAP 定义:wap =argmin_x(sum_i[bid_size_i*-log(x-bid_price_i) + ask_size_i*-log(ask_price_i-x) ])。
我是通过以下假设发现这一点的:
g_ask(x) 和 g_bid(x),使得 WAP=argmin_x[ bid_size*g_bid(x - bid_price) + ask_size*g_ask(x - ask_price)]lim(g_ask(x), x->0)=inf 且 lim(g_bid(x), x->0)=inf做出第一个假设是因为如果我要找到一个由 WAP 最小化的有用函数,这是必要的,而且对于传统的加权平均(即 g_*(x)=x^2)来说也是如此。
做出第二个假设是因为从逻辑上讲,WAP 永远不应大于最低卖出价或小于最高买入价,为了始终满足这一条件,g_*(x) 必须在 0 处具有垂直渐近线。
当然,log() 并不是唯一具有垂直渐近线的函数,这引出了一系列替代的 WAP 定义:wap_k = argmin_x(sum_i[ bid_size_i*(x-bid_price_i)**-k + ask_size_i*(ask_price_i - x)**-k。
不幸的是,从这些替代 WAP 衍生出的特征并没有为我带来太大的性能提升。然而,它们确实引导我发现了一组非常重要的其他特征:流动性。
在金融学中,流动性描述的是在不显著移动价格的情况下,可以立即购买或出售多少资产。因此,一个合理的流动性数值定义应始于以下假设:
事实证明,如果我们取任何替代 WAP 函数的最小值,也就是说,取该函数在其各自 WAP 处的值,它将满足我们对良好流动性度量的所有条件。例如,从 wap_1 衍生的流动性为:
liq_1 = sum_i[ bid_size_i/(wap_1 - bid_price_i) + ask_size_i/(ask_price_i - wap1)]
或者对于 wap_2:
liq_2 = sum_i[ bid_size_i/(wap_2 - bid_price_i)**2 + ask_size_i/(ask_price_2 - wap1)**2]
流动性本身是一个有用的特征,但真正引人注目的是相对于流动性的交易量。交易量除以流动性(TVPL)与波动率具有显著的高相关性,其中 log(TVPL_2)) 和 log(vol1) 的相关系数约为 0.88。我认为可以肯定地说,单位流动性交易量是造成短期波动的大部分原因。
认识到 TVPL 与波动率之间的关系,我们可以探索更多的想法。首先,在交易量和流动性之间,交易量是噪声大得多的特征,而流动性则稳定得多。因此,为了进行预测,我们应该在整个时间窗口或至少大部分时间内计算交易量,但我们可以只在末端的一小部分时间内计算流动性。我许多最强大的特征都利用了这一点,其中一些还结合了跨 stock_id 的聚合。
这些是我发现的最有趣和最有帮助的特征,但我的 Notebook 中还有其他独特的方面,所以如果你有兴趣让我解释更多内容,请告诉我。