高频交易之冰山算法

【湃课交易】专注交易者成长的平台。


相信很多人通过一些媒体或时事新闻,听说过高频交易这个名词,而且认为这是一种十分赚钱甚至有点恶劣的交易方式。

很遗憾这是一种普遍性的误解,虽说是有部分人利用技术性手段高频自成交来非法获取巨额利润,但这确实不是高频交易的主流业务。

其实高频交易的目前最主流的应用是被动做市,利润来源为价差(spread)和交易所的返佣。

而很多人可能对具体高频交易到底是如何运作的还很摸不着头脑,接下来我们将介绍一个常见的算法(冰山算法)来初步对高频交易有一个正确的认识(这里要特别感谢知乎董哥的图文及各种文献,给了本文很大的内容帮助。)

那么什么是冰山算法呢?

在讲解此算法之前,我们要先交代一些基本的概念背景才好顺利的继续下去。

我相信很多人认为高频交易或者量化交易十分复杂神秘,以至于他们想象中的高频交易的界面十分花里胡哨,如下图:

见识贴 | 高频交易之冰山算法

很遗憾,这样的价格数据在高频交易者的眼里,除了画面花哨之外,没有任何的意义,这是由于这样的价格数据实在太过粗糙,价格数据的精度完全达不到高频交易者的要求。

而主流交易所中的order book上的价格数据才是高频交易者需要获取的数据,交易所在内部的Order Book上记录所有买家和卖家的报价,如图:

见识贴 | 高频交易之冰山算法

假如一个买家发出一张单量为10的市价单,就可以买到卖方在101价格上挂的10份,这个交易成功之后,Order Book会变成这样:

见识贴 | 高频交易之冰山算法


由于真正的Order Book只存在于交易所内部,所有交易都在交易所内完成,但是交易所会把每笔报价和市价单都转发给所有人,所以所有的买家和卖家都可以自己维护一个同样的数据结构,相当于交易所Order Book的镜像。

通过跟踪分析自己手里这份的镜像变化,来制定交易策略,这就是高频交易算法的核心思想。

由此我们知道,交易所的交易数据是完全公开的,在市场上任意时刻,有谁想要买卖多少,所有人一目了然,没有什么秘密。

这样做是为了在市场上公开展示出买卖需求,才可以促进潜在的商家进行交易,这是十分必要的。

然而如果有某个参与者想要进行一笔大体量的买卖,他所发出的巨额限价单会公开展示给所有人,这对他自己会特别不利。

例如他挂了一笔巨额的买单后,大家看见后会尽可能地率先进场抢购,他原本可以成交的价格现在被抢购后,只能在更高的价格成交,那些抢先的人就可以从而获利了。为了解决这样的问题,交易所提供了一种针对性的工具,就是所谓的冰山订单(Iceberg Order)。这种订单可以很大,但只有一小部分是公开出来的,大部分则隐藏起来,除了交易所和发单者本人谁也看不到,像一座“冰山”一样。这样,只有当有对应隐藏量的交易发生时,交易所才会通知其他人,在那之前,只有公开的那一小部分的订单的成交来慢慢消耗整体的订单量。

值得一提的是,使用冰山订单并不是没有代价的,因为你隐藏了真实的需求,在屏蔽掉潜在的攻击者的同时,也屏蔽掉了真正的交易者

而且会使得成交时间显著增加——因为没人知道你想买卖这么多,你只能慢慢等待对手盘的出现。

所以当有人下决定发出冰山订单的时候,也会有对市场情况的考虑,只有合适的时机才会做这种选择。

同时这样做虽然保护了发单者的利益,但是由于其隐藏了真实的需求,如果市场中有真正同样需求的参与者可能会因此对局势产生误判而损失惨重,而问题的解决方式就变成了“如何发现市场中的冰山订单”,这就是人们说的“冰山算法”。


有一种最简单的方式可以来探测冰山订单的存在。

因为有些时候,冰山订单是挂在买卖报价价差(spread)之间的,我们可以发一个最小额度的限价单在spread里,紧跟着取消这个订单。

如果没有冰山订单的存在,一定不会成交

但有冰山单的情况下,一旦交易所收到这个卖单,会立刻成交冰山单中对应的量,而之后的取消指令就无效了。

这样,以一种微小的成本,就可以发现市场中隐藏着的订单。

事实上,的确有人会做这种事情,频繁的发单然后取消,在最优买卖价差(spread)之间形成一种高频扰动,用来探测隐藏单。

如下图:

见识贴 | 高频交易之冰山算法

还有一些冰山订单为了应对这种扰动探测,一般都不会直接挂单在spread里,而是会和普通的限价单挂在一起。

这样发生交易之后,我们就很难推测消耗掉的究竟是正常的限价单,还是冰山订单。这个时候我们就可以一些新的思路来解决这个问题。

我们首先要了解交易所对于冰山订单的处理方式。

例如有的交易所会把冰山订单用两个参数表示,V和p。V表示订单总量,p表示公开显示的量。

比如V=100,p=10的冰山单,实际上隐藏的量是90。

针对这个冰山订单产生的交易,交易所会依次发出下面三条信息:

1.成交10

2.Order Book的Top bid size -10

3.新Bid +10

这三条信息一定会连续出现,并且第三条和第一条的时差dt很小。

一旦我们在数据中观察到这一现象规律,我们可以有把握的认为市场中有冰山订单的存在,并且我们已经确定了p的值,而问题继而变成了通过已知p的值如何估计V的值,即剩余隐藏订单的量。

从本质上来说这个问题我们无法精确求解,但是由于这两个值必然是整数值,而人下单也不是完美的随机数生成器,因此我们可以对V和p建立概率模型,即计算一个给定的(V,p)值组合出现的概率是多少。

通过对历史数据的统计估算我们可能会得到这样一个概率密度函数,如图:

见识贴 | 高频交易之冰山算法

这样在实时的数据观察到一个p值时,就可以很容易计算出最可能的V值了,同时还可以持续动态评估剩余存量。因此这种冰山算法的核心在于,通过在实时数据中监测短时间内连续出现的三条相关记录判断冰山订单的存在,而对冰山订单的量化则通过由历史数据训练出的概率模型来完成。

现在我们知道这种冰山算法是基于某些交易所对冰山订单的处理方式,利用交易所公开的数据所做的一种推测,这种推测是基于概率的,作为一种重要的参考手段。

它对高频交易为手段的做市商这种流动性提供者很有意义,可以使他们避免因为对局势的误判而遭受损失。但如果想用它来作为一种攻击手段,觉得自己能发现隐藏大单而去Front,那实在是很不明智。

而冰山算法只是高频交易算法中的“冰山一角”,在思路上它看起来并不复杂,先根据数据有了解决思路,再设计算法才是有意义的。不存在什么高级模型去套数据然后自动生成好的交易信号,这是不现实的,希望本文可以给大家一个初步正确认识高频交易的契机,供大家学习参考。

见识贴 | 高频交易之冰山算法


分享到:


相關文章: