社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  机器学习算法

基于Order Book的深度学习模型:预测多时间段收益序列

量化投资与机器学习 • 3 年前 • 829 次点击  

量化投资与机器学习微信公众号,是业内垂直于量化投资、对冲基金、Fintech、人工智能、大数据领域的主流自媒体公众号拥有来自公募、私募、券商、期货、银行、保险、高校等行业20W+关注者,连续2年被腾讯云+社区评选为“年度最佳作者”。


量化投资与机器学习公众号独家解读


量化投资与机器学公众号  QIML Insight——深度研读系列 是公众号今年全力打造的一档深度、前沿、高水准栏目。



公众号遴选了各大期刊前沿论文,按照理解和提炼的方式为读者呈现每篇论文最精华的部分。QIML希望大家能够读到可以成长的量化文章,愿与你共同进步!

本期遴选论文
来源:SSRN
标题:Deep Order Flow Imbalance: Extracting Alpha at Multiple Horizons from the Limit Order Book
作者:Petter N. Kolm、Jeremy Turiel、Nicholas Westray

作者基于原始订单数据,构建了订单状态指标、订单流指标,并结合深度学习模型对Nasdaq的115股票构建高频价格预测模型,并对比了多个模型的效果。核心观点如下:

  • 订单流的原始数据,可以直接作为深度学习模型的输入,而不需要过多的进行特征工程。

  • 模型预测的效果与股票交易活跃度有关,成交活跃的股票,模型的整体效果更优。

  • 在多预测时间段的测试中,模型整体对于短期价格的变动有优秀的预测能力,模型效果的最优表现出现在K=10附近。


订单数据


订单簿如下图所示,按照价格优先时间优先的原则将买单卖单做如下排列,



针对订单簿的数据,作者定义了以下指标:订单簿状态LOB,订单流OF,订单流失衡(OFI)


1、Order Book States(LOB)

其中 为前十档的卖价, 为前十档的卖量, 为前十档的买价格, 为前十档的买量。

2、Bid-Ask Order Flow(OF)

3、Order Flow Imbalance(OFI)


预测模型


作者测试了多种模型,对比各种模型的预测效果。






实证


因变量


因变量是股票在未来一段时间用mid-price计算的收益率,对于每一时刻t,模型预测了多个未来horizon的收益率,用向量r表示:

其中r为mid-price return, 表示两个tick之间中间价计算的收益率。该模型是采用长度为w的滚动窗口进行计算,对于所有模型,w统一设置为100:

如表6所示,由于每个股票的成交活跃度都不一样,EBAY和MSFT每天Order Book的活跃度(Updates)差了三个数量级。所以作者针对每个股票设定各自的时间划分间隔(stock specific time increment):

其中分子是一个交易日交易时间的毫秒数,N表示这个股票每天非零的mid-price returns的数量。那对于(14)中,具体的预测时间点为以下10个时间点:

各时间点的mid-price return为:

其中 表示时刻t的mid-price, 是为了考虑延迟,所以在时间t用的实际上是 的mid-price, 的取值是10毫秒。


自变量


作者测试了两种自变量的表现,分别是上式(1)的LOB和上式(4)的OF,对于所有自变量和因变量都Winsorize到0.5%和99.5%的区间,并转换为z-score。最终作者选取了纳斯达克上市的115只股票的订单数据作为训练样本。


对于每个测试时间段,模型评价采用以下方式:

其中 是模型的mean square error, 是基于测试时间段 r 的均值计算的mean square error,以此作为模型表现得基准。 大于0,说明模型的效果优于Benchmark。


模型设置


表2给出了所有模型的参数及设置,单个模型的训练时间在10-60分钟左右。




结果


短期预测效果对比

下图给出了各模型短期预测效果的对比,其中左边的自变量是OF,右边的自变量是LOB。X轴对应不同的预测horizon(如17表示,一共10个horizons);Y轴是根据18计算的模型表现,首先计算每个股票每个Horizon每天平均的 ,然后把所有股票的 平均就得到Y轴的值。可以看出:

  • 基于LOB的模型,处理CNN=LSTM跑赢基准,其他模型都没法从LOB中学习到有效信息。由于OF只是基于LOB计算的衍生指标,给定足够数据的情况下,理论上深度学习的模型(如LSTM等)应该能够学到如基于OF模型一样的效果,但是整体而言,基于OF(左边)的模型表现更好。


  • 模型的效果在X轴等于2(k=10)时,达到了上限,也就是说深度学习模型整体对短期的价格变动有更好的预测结果。



预测准确度比较


基于OF和LOB两种输入,分别测试的6个模型,所以一共有12个组合。每天对12个模型的不同horizon的表现进行排序(1-12名),然后把所有测试时间段,每个模型每天的排序计算平均值,由下图表示:


  • OF模型的整体排名要由于LOB

  • 含有LSTM部分的模型的表现要由于ARX和MLP

  • CNN-LSTM的表现很稳定,在各horizon得排在第一



预测表现和股票其他特征之前的关系


作者针对OF作为输入的LSTM模型,研究模型表现与股票特征之间的关系,计算出每个模型测试时间的 均值,并计算对 与股票各特征做回归,包括Tick Size, LogUpdates, LogTrades, LogPriceChg, Log(Updates/PriceChg。可以发现模型的表现与TickSize和Updates正相关,与PriceChg负相关。其中PriceChg表示单位时间价格变动的次数,一定程度反映了股票的波动性。



具体的截面回归的结果如下表所示:



长期预测能力


以上的结果都限定在k=10以内(等式17中的k),对于更长时间的预测效果,如下图所示,可以看出模型的表现在x轴等于2的时候达到最大,当x超过2,模型的效果持续下降。




总结


  • 订单流的原始数据,可以直接作为深度学习模型的输入,而不需要过多的进行特征工程。


  • 模型预测的效果与股票交易活跃度有关,成交活跃的股票,模型的整体效果更优。

  • 在多预测时间段的测试中,模型整体对于短期价格的变动有优秀的预测能力,模型效果的最优表现出现在K=10附近。


参考文献

Zhang, Zihao, Stefan Zohren, and Stephen Roberts (2018). \BDLOB: Bayesian Deep Convolutional Neural Networks For Limit Order Books". In: arXiv preprint arXiv:1811.10041.

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/118211
 
829 次点击