机器学习在市场微观结构和高频交易中的应用
1、介绍
本文介绍了机器学习在市场微观结构数据和高频交易中的应用问题。机器学习是计算机科学一个充满活力的领域,它借鉴了统计学、复杂计算、人工智能、控制理论和许多其他学科的模型和方法。机器学习主要用于从大数据集中推断出良好的预测模型,因此机器学习可以很好地解决高频交易中包括交易执行和寻找alpha出现的问题。
现有关于机器学习在高频交易中的应用的研究较少,因此,我们围绕几个案例展开。这些案例包括:
● 通过强化学习优化交易
● 根据订单状态预测价格变动
● 暗池中的智能订单路由的机器学习
2、机器学习中的高频数据
目前,对于高频交易的定义仍然是主观的,对其所包含的如持有期、订单类型和策略等概念缺乏一个广泛认同的共识。然而,大多数高频交易的技术面处理都认为,高频交易的数据往往是非常细粒度的。通常来讲,这些数据是直接来自交易所的微观结构数据,详细描述了每一次下单、执行和取消,从而可以基于历史数据做到几乎完全重建整个订单。
微观结构数据面临的两大挑战是其规模和解释。在规模方面,类似于苹果(AAPL)等高流动性股票,一天的微观结构数据要以千兆字节计算,存储此数据需要压缩并使用大量存储空间。但这些仅仅是技术上的挑战,解释方面的挑战更为重要。微观数据结构包含哪些有用的信息?应用机器学习,我们可以从这些非常细粒度的、层级较低的数据中提取哪些对于构建预测模型有用的特征或变量?
3、通过强化学习优化交易
本文的第一个案例研究考察了机器学习在最基本的基于微观结构数据的算法交易问题中的应用,即优化交易执行。最简单的形式:某只股票,比如苹果(AAPL),交易量是V,时间范围或者说交易步骤数为T。目标是在交易步骤数T内买入V股股票,同时最小化支出。
我们可以观察到,在这个模型中,任何交易策略都是基于状态的。最基本的状态用符号(v, t)来表示,其中v表示余下的需要买入的股数,v ≤ V;t表示余下的交易步数,t≤T。如果我们处于v较小t较大的状态,说明已经购买了目标量的大部分,我们会考虑用更低的价格购买剩余的股票。如果我们处于v较大t较小的状态,说明我们的时间不多了,目标量还有大部分需要购买,所以应该开始跨越价差、提高流动性,以此来尽快达成目标,代价就是更高的支出。
强化学习起源于控制理论,是机器学习的一个分支,专门用于从数据中学习这种基于动态状态的策略。强化学习的应用步骤如下:
● 标记一个状态空间,其元素表示我们将在其中选择操作的可变条件。
● 标记每个状态的可行操作。本例中,这些操作包括以不同价格为所有剩余的股票量下限价订单。因此我们在任何时候都将只有一个未完成的订单,但是将根据当前状态重新设定该订单。
● 从历史数据中以概率的形式识别我们的行为所产生的影响。
● 确定一个奖励函数或成本函数,该函数反映了从给定状态采取给定操作的预期回报。在本例中,来自给定状态的限价订单的成本是订单执行的最终支出。
● 学习最优策略的算法,即从状态到行动的映射——最小化训练集的经验成本(购买股票的支出)。
● 通过测试集来评估算法的性能。
为了评估强化学习算法,我们将一次性提交策略作为基准进行对比。一次性提交策略是在交易开始时,以某个价格p为整个目标量V下一个限价单,并且不修改所有T步骤。在交易结束时,如果有剩余量v,则对剩余的股票下达指令,以达到购买V股票的目标。图一展示了强化学习的性能。
在这个图中,比较了强化学习与一次性提交策略的性能差异,我们用交易成本来衡量。黑色的柱表示一次性提交策略,灰色和白色的柱表示强化学习策略。其中T表示总步数,I表示目标量分为I级,I越大,剩余目标量v越大。横轴表示目标量T和交易步骤数T。可以看到,强化学习的性能明显优于一次性提交策略。目标交易量越大、交易周期越短,交易成本就越高。还可以看到,I越大,交易成本越低。
图二是强化学习的可视化结果展示。X轴为剩余目标量v,数值越大,剩余目标量越大;Y轴为剩余步骤数t,数值越大,剩余步骤数越多;Z轴为最佳行动,数值越大,行动越积极。我们假设v分为8个等级,t分为8个等级,这时探寻不同状态下的(v,t)所对应的最佳行动。
结论就像前面讨论的一样,当库存高企、时间快要用完时,我们会更积极地行动;当库存很低,而时间还在,我们就会寻求价格的改善。
到目前为止,我们很少使用微观结构数据。但是机器学习通常涉及到搜索改进的特性或状态变量,这些特性或状态变量允许学习的策略基于更多的信息,从而提高性能。在这里,我们列出了一些可能与优化执行问题相关的特性:
● 买卖价差:表示当前订单中买卖价格之间的差值。
● 买卖不平衡数量:出价时的股票数量减去卖出时的股票数量。
● 签署的交易量:表示在最后15秒买入的股票数量减去在最后15秒卖出的股票数量。
● 直接成本:我们在接到市场指令后立即购买剩余股份的成本。
我们使用强化学习方法对上述四个特性进行了检验。四个特性中的三个都对降低交易成本有显著的改进,只有买卖不平衡数量看起来不是特别显著。因此,我们也检验了添加这三个特性所获得的改进百分比,具体结果如下表所示。
图三展示了买卖价差和直接成本对最佳行动的影响。X轴为买卖价差,用Spread Size表示,数值越大,表示价差越大;Y轴为直接成本,用Immediate Cost表示,数值越大,表示直接成本越高;Z轴为最优行动,用Optimal Action表示,数值越大,表示行动越积极。
结论与我们所预期一致,当价差较大或购买股票的直接成本较低时,我们就会采取更积极的操作。
4、通过订单状态预测价格变动
当然,人们自然会问,类似的方法能否得到一个基于状态的盈利模型。这个模型可以自己决定何时交易以及如何交易。从模型的概念上我们可以将工作分为两个部分:
● 开发能够可靠预测某些状态价格走势的功能。这里的“可靠”不是指高准确度,而是指我们的盈利能够刚好超过我们的亏损。
● 开发用于交易的学习策略,在足够低的交易成本下捕捉这种可预测性和alpha。
值得注意的是,现在我们必须首先找到有利可图的预测信号,然后希望它们不会被交易成本抹去。不同于第三节,对于alpha来说,动量信号可能要重要得多,因此,我们采用以下特征进行实验:
● 买卖价差:同第三节。
● 价格:衡量最近执行价格的方向变动的特征。
● 聪明的价格:中间价格的变化,其中的平均买入价和卖出价是根据它们的交易量加权。
● 交易标志:在最近的执行中,衡量买家或卖家是否更频繁地越过价差的特征。
● 买卖不平衡数量:同第三节。
● 签署的交易量:同第三节。
为了便于分析与讨论,我们简化了假设,只考虑学习算法中可用的两类理想化的操作:在买卖中点买入1股,并持有该头寸t秒,再在这一时点,在中点卖出该头寸;相反,我们在中点卖出,然后在t秒后买入。需要注意的是,在中点执行的假设下,这两种操作中的一种必定是有超额收益的——如果中点增大,则在t秒后买入和卖出;如果中点降低,则反向操作。
该方法可总结如下:
● 对19支股票,根据历史数据进行订单重构。
● 在每个交易机会中,计算当前状态(上述的6个微观结构特征)的值,并通过订单模拟上述两种操作(先买后卖,先卖后买),将利润或损失制成表,以计算中点移动。
● 使用2008年的数据进行训练。对状态空间中的每一种状态,计算训练期间每次访问的两种行为的累计收益。将行为和状态的映射定义为策略,定义为在状态下能让训练集取得最大利润的所有行动集。
● 使用2009年的数据进行测试。
图四展示了19支股票学习的行为与特性之间的相关性。这19支股票包括:AAPL,ADBE,AMGN,AMZN,BIIB,CELG,COST,CSCO,DELL,EBAY,ESRX,GILD,GOOG,INTC,MSFT,ORCL,QCOM,SCHW,YHOO。Z轴为行动,+1表示买入,-1表示卖出。特征的顺序为买卖价差、价格、聪明的价格、交易标志、买卖不平衡数量和签署的交易量。
然而,值得强调的是,将策略投射到单一的特征上时,并不能让我们正确地认识到特征之间相互作用的微妙之处。例如,如果我们不是对一个具有高价值的特征进行条件设置,而是对几个具有高价值的特征进行条件设置,得到的相关性会比任何单独的特征都要强得多,这一点在图五进行了展示。
图五中,红柱表示对全部六个特征进行学习得到的测试集盈利能力,蓝柱表示的是对单一特征进行学习。至此,我们可以认为:
● 使用所有六个特征的盈利能力通常比使用单个特征要好。
● 聪明的价格这一特征似乎是最好的单一特征。
● 买卖价差似乎是一个用处不大的功能,但在少数几支股票上确实具有显著的盈利能力。
那么我们可以基于此做些什么呢?我们看到了两种可能性。首先,我们可以用限价订单进行交易,以此试图避免支付价差。这无疑是一个富有成效的方向。第二,我们可以寻找或设计更好的特性,这些特性将带来更大的可预测性,足以克服交易成本。
现在应该清楚了,机器学习方法提供了难得的盈利途径。市场竞争激烈,很难找到真正的利润来源。话虽如此,本节依旧是在试图寻找潜在的利润来源,通过定义状态空间,检验特征及其相互作用等等。这应该是一名宽客工作的一部分,这样我们至少可以在这些问题上有共同语言。
5、暗池中的智能订单路由机器学习
在我们最后一个案例中,我们将探讨使用机器学习的方法来解决智能订单路由(SOR)在暗池中的问题。
在最简单的暗池机制中,订单信息只包含给定名称的交易量和交易方向(买入或卖出),没有具体的价格。订单按照到达的顺序在市场上排队,最先到达的订单排在队列的最前面。只要市场是流动的,交易就会发生。例如,假设在给定某个时刻,买入队列为空,卖出队列由一个1000股和一个250股的订单组成。如果一个1600股的新买单到达,将立即针对未执行的卖单执行1250股交易,然后买入队列将包含剩余的350股订单,卖出队列将为空。
从数据和机器学习的角度看,暗池和与其对立的公开市场之间有两个关键的区别:
● 与公开市场的微观结构数据不同,在暗池中,人们只能访问自己的订单和交易数据,而不能访问整个交易群体。因此,在第三节和第四节中度量市场活动、买卖压力、流动性失衡等特征不再可用。
● 在向暗池提交订单时,我们只知道我们的订单是否(部分)得到了执行,而不知道如果我们要求更多,可能会获得多少流动性。例如,假设我们提交了10000股的订单,如果我们知道5000股已经被执行,那么我们知道另一边只有5000股。然而,如果所有的10000股都被执行,那么任何大于10000股的订单也都可能被执行。
现在我们准备使用更数学的方法来定义SOR问题。我们假设有n个独立的暗池可用(在撰写本文时n > 30,仅在美国),我们假设这些池为给定的股票提供了不同的流动性。例如,一个池可能更好地快速可靠地执行小订单,而另一个可能大概率执行大量订单。我们通过可用股票的概率分布对这些流动性进行建模。我们假设在向池i提交量的订单时,会以概率执行随机的数量。因此,按照上述机制,SOR问题可以形式化为:给定购买的总体目标V,我们应该如何将V划分为V1,V2,Vn……,,分别提交到暗池1,2,……,n,其中
目标函数是最大化期望执行量。
在我们对SOR问题的形式化过程中,如果我们了解概率的分布,那最大化期望执行量就可以有一个最优解。我们将即将分配的每一股分配到执行该股边际概率最大的池中,通过这种方式,处理所有的V股,并确定每个池i的最终分配量。这就是贪婪分配算法的原理。
对于SOR的机器学习源于这样一个事实:我们不知道概率的分布,必须从执行数据中学习并近似地拟合它们。我们已经开发出了一个针对暗池问题的学习算法,该算法在n个池的提交订单中学习最优提交策略,总结如下:
● 对于每一个池,提供一个近似的概率来拟合未知的。对于近似的概率,我有一些默认值。
● 使用Kaplan-Meier方法估计模型参数。
● 为每个所需的交易量V来执行,每个提交的分配都会得到一个观察到的执行量。
● 使用新的执行数据重复上述过程。
图六展示了上述算法的结果。
图六中,红色的曲线为我们的学习算法结果,蓝色的线为自适应启发式算法得到的结果,绿色的线为基准。可以看到,虽然在某些时候,自适应启发式算法也可以接近真正的最优值,但在其他时候,它偏离了最优值。而且,在每种情况下,我们的学习算法(强化学习算法)都优于这个简单的启发式算法。
6、结论
最后是我们得出的一些结论:
● 机器学习不提供盈利或改进执行的简单途径,但确实通过历史数据为交易优化提供了强大且有原则的框架。
● 自始至终,我们都强调了特征设计对机器学习方法成功的重要性。如果没有有用的特征,学习永远不会成功,如果没有正确地表达或优化这些特征,学习甚至可能失败。
● 为了获得最好的结果,有时需要进行各种微调。
附上原文链接:聚宽量化实验室:机器学习在市场微观结构和高频交易中的应用
PS:文末更有惊喜哟~