Loading ...

行业大佬揭秘算法交易:发明者量化平台做市商策略

Author: mindrainbow, Created: 2019-07-04 10:57:55, Updated: 2019-07-08 16:02:20

数字货币算法交易指南

img

在本文中,我们将探讨加货币中交易算法的设计和实现。特别是,我们专注于执行算法,做市商算法和几个市场微观结构考虑因素。我们还研究了实践偏离理论的地方,特别是在处理加密货币市场的特性方面。

执行算法

执行算法的目标是将投资组合状态转换为不同的状态,同时最大限度地降低这样做的成本。例如,如果你希望将BTCUSD曝光率提高1000,你可能不希望立即将市场订单猛烈的打入BitMEX的交易通道,从而导致大量滑点。相反,你可以考虑通过多个不同交易所的市场和限价订单组合,慢慢得到你想要的头寸。

执行算法通常有3层:macrotrader,microtrader和smart router。

macrotrader层将大的初始订单或父订单拆分为跨越时间的较小子订单。这实际上是整个算法的调度部分。VWAP,TWAP和POV是macrotrader算法的常见的简单示例。通常,有许多不同的市场影响模型可用于设计复杂的macrotrader层。市场影响模型的设计着眼于市场对执行的反应。市场是否会在执行后保持原状?或者进一步走远?或者是否会回到某种程度上?两个最具开创性的市场影响模型是Almgren-Chriss(1999,2000)永久市场影响模型和Obizhaeva-Wang (2013)瞬态市场影响模型。基于此,在实践中,市场影响并非永久性的,所以Obizhaeva-Wang似乎更符合现实,而且从那时起,已经有许多新模型来解决其不足之处。

img

延申阅读:执行算法交易后市场影响力开始衰变 https://arxiv.org/pdf/1412.2152.pdf

microtrader层决定每个子订单,是将其作为市价订单还是限价订单执行,如果作为限价订单,则应指定什么价格。关于microtrader设计的文献很少,这是因为子订单的大小通常是整个市场的一小部分,因此怎样执行它并不重要。然而,数字货币市场是不同的,因为流动性非常稀薄,并且即使对于在实践中的普通尺寸的子订单,滑点也是非常明显的。Microtrader的设计通常关注时间和深度,队列位置以及市场微观结构的其他特征。市价订单(如果我们忽略延迟,则与限价订单相同)可以保证执行,而限价订单没有这样的保证。如果无法保证执行,你可能会落后于macrotrader设置的交易计划。

smart router层决定如何将订单导向不同的交易所。例如,如果Kraken拥有60%的流动性且GDAX(Coinbase ProPrime)拥有40%的流动性在一些特定的价格水平,那么microtrader应该把订单分别以百分之60和40的比例导入到Kraken和GDAX交易所。

现在你可以说市场中的套利者和做市商将流动性从一个交易所转移到另一个交易所,所以如果你在Kraken执行一半的订单并等待几秒钟,那么一些流动性就会从arbers和stat arbers补充到GDAX对Kraken的流动性,你可以以类似的价格完成其余的工作。然而,即使在这种情况下,arbers也会为了自己的利润而向你收取额外费用,并将自己的对冲费用转嫁给Kraken的做市费。此外,一些市场参与者发单的数量超过了他们想要在多个交易所进行的规模,并且一旦被止损就会取消超额的规模。

最终,最好拥有自己的本地smart router。此本地smart router还具有针对第三方smart router服务的延迟优势。在前一种情况下,你可以直接route到交易所,而在后一种情况下,你首先需要向第三方router服务发送消息,然后他们将你的订单发送到交易所(此外,你必须向第三方支付router费用)。三角形的任意两条腿的总和大于第三条腿。

做市商算法

做市是指为其他市场参与者提供即时流动性并得到补偿。你承担库存风险以换取正的预期价值。最终,做市商得到了补偿有两个原因。 首先,市场接受者有很高的时间偏好,并且需要即时性。 作为交换,为流动性提供便利的做市商可以弥补他们较低的时间偏好和耐心。其次,做市商的PnL利润是左倾的,通常大多数交易者有右倾偏好。换句话说,做市商类似于博彩市场,赌场,保险公司和国家彩票中的博彩公司。他们经常小赢,不经常大输。作为对这种非预期的的回报利润,做市商可获得预期价值的补偿。

img

延申阅读: 偏态 https://en.wikipedia.org/wiki/Skewness

从一个高级别的角度讲,限价订单是其他市场的免费期权。其余的市场有权但没有义务以限价订单的限价买入或卖出资产。在一个信息完全已知的市场中,没有人会出售免费期权。这是因为市场总体上并不是一个信息完全已知的市场且销售免费期权永远不会有意义。另一方面,如果市场信息是完全未知的,那么风险中性的做市商愿意以极小的价差出售这些免费限价单期权,因为所有交易都是噪音。显然,真实市场参与者鱼龙混杂,每个参与者都具有独特的信息已知与未知程度。

在设计做市商算法时,有三种观点可以考虑:做市商的,市场参与者的和其他做市商的。

做市商自己的观点以他们的库存为代表。如果你已经有太多的资产风险,那么你可能会将你的报价降低,反之亦然。你这样做有两个不同的原因。首先,作为一个公司,你有一定程度的风险规避(可能少于个人,但你的货币效用曲线仍然是凹形的)。

这种效用函数的形状有许多结构(例如CARA,CRRA,更有HARA等)。其次,作为市场上的被动的流动性提供者,你将面临逆向选择风险。积极的流动性接受者可能会知道你没有的东西,或者只是比你更聪明。这基本上是向市场出售免费期权的问题。

此外,即使在机械操作层面,按市价订单的市场订单也会以按市价计价的方式降低价格,同时提高报价的市价订单会按市价计价。在任何交易的确切时刻,你总是站在错误的一边。除此之外,做市商的报价会产生被动的市场影响。换句话说,将订单发送到未成交订单簿中的行为至少会使市场远离你。

img

延申阅读:风险厌恶函数 https://en.wikipedia.org/wiki/Risk_aversion

市场接受者的观点由订单流表示。作为深度函数的订单到达的体积加权频率应该具有一些关键属性。

该函数应该是:

  • 1)递减,

  • 2)凸形(这里的用直觉难以解释,但在经验上是明确的),

  • 3)随着深度变为无穷大渐近为0,一些公式需要这种强度函数连续两次可微分以易于处理,这是一个精细合理的假设,但最终也是不必要的。此外,有关如何计算“从订单簿的顶部的深度或距离”的不同公式。你通常可以使用一些“合理的中间价格”或每个相应交易方的最佳报价。这两种方法之间存在不同的权衡,我们不会在这里进行讨论。

除此之外,还有一个未知的因素是“公平的中间价格”应该是多少。当发送和撤销深度订单时,最佳买价和最佳卖价之间的中间价格易受到噪音价格的影响。

此外,鉴于两个具有相同订单簿形状的案例,后一个订单簿的最佳出价将表明公平价格低于前一个订单簿的最佳报价。还有一个问题是订单簿的历史是否重要,如果重要,我们应该仔细在价格时间还是交易量时间方面去关注?那么考虑到市场流动的特征,做市商的最佳限价订单应该放在哪?如果你在订单簿的顶部收紧深度,你的深度订单会很丰富,但每次都很少。如果你在订单簿的底部收紧深度,你的深度订单会很稀薄,但每次都很多。

这实际上是具有唯一全局最大值的凸优化问题。另一个考虑因素是订单流量跨时间到达,看起来有点像“泊松过程”(https://zh.wikipedia.org/wiki/泊松过程)。有人认为它更接近“霍克斯进程”(http://jheusser.github.io/2013/09/08/hawkes.html) 此外,做市商试图捕获的买卖反弹是均值回归的最短期版本。由于这种超短期均值回归是通过局部波动来缩放的,因此做市商在高价时扩大报价是有意义的,并且在成交量较低时收紧报价。

img

延申阅读:order arrival intensity with respect to depth (https://arxiv.org/pdf/1204.0148.pdf

img

延申阅读:霍克斯进程 (http://jheusser.github.io/2013/09/08/hawkes.html

其他做市商的观点由本订单簿代表。订单簿揭示了其他做市商的一些信息。订单簿顶部附近的买价多于卖价,表明其他做市商更愿意出售而不是购买。这些做市商可能已经存在大量的不平衡的库存积压,或者他们只是认为价格在短期内更有可能下​​降而不是上涨。无论是哪种情况,作为做市商,你可以根据图订单簿的偏差调整报价。

此外,当做市商互相竞争时,如果价格跳动很小,你经常会看到这种“一分钱价格跳动”行为。做市商通过互相争夺价格,直到达到一个投降点并且只有一个“优胜者”获取了优先权。在确定获胜者之后,亚军通常会在下一个最佳出价或出价之前回落到前一个价格跳动。如果你丢失了报价优先级,你可能会获得第二个报价优先级。这导致一个回归现象,即胜利者现在在亚军面前退回到一个价格调动并且同一个梯子,两个攀爬者的游戏重新开始。

img

延申阅读:http://parasec.net/transmission/order-book-visualisation/

最后,长期定向的信号可以覆盖做市算法,其中做市算法的目标不再是保持库存持平或不变,而是考虑到一些长期目标以及相应的偏差使其成为现实。

速度

速度很重要有两个主要原因。首先,你可以在取消之前成交订单簿中的订单。其次,你可以在订单被成交之前取消订单簿中的订单。换句话说,你想要在订单成交和撤销上时刻占有主动权。套利算法(主动)和执行算法(主动)更关心前者,而做市算法(被动)更关心后者。

通常,原则上说,从速度中获益最多的策略是那些判断逻辑最简单的策略。任何复杂的逻辑都必然会减慢往返时间。这些复杂类型的算法策略是交易世界的F1方程式赛车。数据验证,安全检查,硬件设置,编排方式等都可能被剥夺,都是为了以利于速度。跳过OMS,EMS和PMS(项目组合管理系统),直接将GPU上的计算逻辑连接到同位的交易所的二进制API接口。一个快速而危险的游戏。

另一类速度敏感类策略,相对统计套利策略,服务器实际位于多个交易所之间,而不是与单个交易所共存。虽然它们不会是来自任何单个交易所的数据最快的,但它们将在任何其他策略之前获得价格并可以对相关和协整数据采取行动。

img

延申阅读:世界上最大的证券交易所的最佳中间交易节点位置(https://www.alexwg.org/publications/PhysRevE_82-056104.pdf

在速度游戏中,赢家通吃。在最简单的例子中,如果存在套利机会,那么任何能够首先获得套利机会的人都会获得利润。第二名得到面包屑,第三名得不到任何东西。收益很可能以幂定律的方式进行分配。(关于幂定律:https://zh.wikipedia.org/wiki/冪定律

速度游戏也是一场竞争。 一旦每个人都从光纤网络升级到微波或者激光网络,大家又都会回到公平的竞争环境中,任何初始优势都会被商品化。

价格跳动的大小,抢占优先级和队列位置

大多数匹配订单的引擎遵循价格优先,然后时间优先(按比例匹配是一种不太常见的替代方案,但我们现在不考虑这些)。在价格更差的限价订单被执行前,更好的价格会被执行。对于相同价格的限价订单,之前发送的订单将在稍后发送的订单之前执行。

Binance将订单拆分至最多8位小数。如果交易的价格为.000001,则.00000001的价格为交易的1%。如果交易的价格为.0001,则.00000001的价格为1bps(也就是一跳)。这是一个巨大的差异。在前一种情况下,跳过一个大订单需要花费一个完整点,因此时间优先级更重要,而在后一种情况下,它要便宜100倍,因此价格优先级更重要。

换句话说,如果你必须支付1%的全额以获得成交优先权,那么它可能不值得,因为你支付了相对较大的金额,同时增加了被相对较小的数量成交的可能性,而且可能更好的选择是排队等候,但如果你只需要支付1个bps来获得交易优先级,你可以这样做,因为你减少了相对较小的边际成本,同时增加了相对较大数量的成交概率。较小的价格跳动有利于价格优先,较大的价格跳动有利于时间优先。

这自然会导致下一个问题:你的队列位置的价值是多少?(延伸阅读:https://moallemi.com/ciamac/papers/queue-value-2016.pdf

img

订单簿Deltas

只有两种方式可以减少订单簿中订单的交易数量:要么是被主动撤销的,要么是被成交的。如果减少是由交易过程引起的,那么除此价格之外的所有其他价格也会因为交易的过程而减少。我们可以通过排列排序这些这些交易记录,并标记每个减量是因为成交的还是被撤销的。

直观地说,交易意味着双方同意以特定价格进行交易,而取消则意味着一方决定不再愿意以特定价格买卖了。因此,从表面上看,我们可能会说,以最佳报价取消是一个非常强烈的信号,表明市场价格将在短期内向下移动,然后是交易价格紧随其后。

另一方面,订单簿中的价格开始上升,只有一种可能就是:增加剩余限价订单的数量。

订单簿中的增量和减量都显示市场参与者的私人意愿,从而提供短期价格运动的信号。

更好的价格指数和最优交易费用

目前,大多数价格指数都是从多个交易所获取交易数据并将它们汇总在一起以获得成交量-加权平均价格。特别是,Tradeblock指数,还会增加交易所权重的处罚机制,因为交易所权重与不活跃以及价格偏离太远的交易所有密切关系。除此之外,我们还能再改进些什么呢?

在GDAX上,maker手续费为0个基点,taker手续费为30个基点,比如显示交易价格为$4000/BTC,实际上是卖方卖出价格为$4000/BTC,买家买入价格为$4012/BTC。这笔交易的“合理价格”应该接近$4006/BTC而不是实际显示的价格。另一方面,由于Bittrex的25bps的费用同时地适用于maker和taker,因此实际价格就是显示出来的价格。换句话说,$4000/BTC的显示价格实际上是购买者以$4010/BTC的价格买入,卖家以$3990/BTC的价格卖出,平均价格为显示价格本身。

因此,从价格发现的角度来看,交易记录的价格在交易所之间不具有直接可比性,而应该在构建价格指数考虑到以上的情况后进行标准化。当然,这里有一些基于成交量而导致的不同的佣金的复杂因素,比如有的交易所按照成交量的大小来制定和收取taker和maker费。这也暗示了两个有趣的推论。

首先,价格发现是有限的,在某些方面,同时加强分裂了交易所之间关于maker和taker费用的的不对称性。假设GDAX的大多数账户都是0/30个基点的maker和taker费用等级并且GDAX在其BTCUSD订单簿上通常有1 penny的差价,那么每笔交易在出价中显示的价格大约是“公允价值”,比现货和每笔交易高低15个点内,在这之间的显示价格约为“公允价值”。因此,在平静时期的“公允价格”在这两点之间迅速振荡,而它们之间的价格发现没有被进一步的细化。

img

GDAX订单簿

其次,与生产者和消费者之间的税收关系一样,maker和taker之间在费用发生率方面存在一定的等同性。如果你向maker收取相对较多的费用,他们会扩大订单簿并将一些费用转嫁给taker。如果你对taker收取的费用相对较多,那么maker就会收紧订单簿并吸收一些taker的费用。

这里的一个极端的案例是你非常喜欢maker,以至于订单簿在点差上挤成了价格的一跳(就像我们经常在GDAX上看到的那样)并且订单簿变得不能再紧了。基于此,任何额外的费用现在都会成为收入损失而落在交易所本身上。

除了这个极端的例子,我们可以看到在哪一方收取费用并不重要,而重要的是taker和maker费用的总和。最终,与Laffer Curvein税收政策一样,交易所面临收费政策中的收入优化问题。我们可以看到利润收入与税收政策相同。如果交易所不收取任何费用,他们就不会收入。如果交易所收取100%的费用,就没有交易,因此他们也没有收入。通过一些额外的研究,很明显,总费用水平的交换收入是具有唯一最大值的凹函数 。

img

名词解释:拉弗曲线(https://en.wikipedia.org/wiki/Laffer_curve

未完待续


More