做市商怎么玩的?
一个期货市场的做市商,现在有一个订单薄(order book),它长这个样子:
我们先做一些假设:这个市场没有其他投资者发布限价单,你是这个市场唯一的流动性提供者,也就是说你是唯一的做市商;最小价格变动单位是0.01;所有吃单(taker)需要支付0.025%的手续费,所有挂单(maker)获得0.01%的返利。
你是做市商market maker,是挂单的一方,市场上所有和你市价成交的单子,你都能拿到0.01%的返利。
最优买价和最优卖价之间的价差(best bid和best offer,简称bb/o)叫做spread,当前订单薄的spread是0.01。
现在,有一笔市价卖单进来了,会和你的买一价100成交。这笔交易你付出了100,而对方实际只收到了100-0.025%*100=99.975,其中的0.025(100*0.025%)是手续费,而你可以拿到其中0.01%的返利,所以你实际只付出了99.99。
因为买一被拿掉了,所以订单薄的结构变了,现在的spread变成了0.02。但是市价还是100,因为这是最后一个成交的价格:
如果此刻有一笔买单进来,将会和你的卖一价100.01成交。上一笔单子你以99.99的价格买入,这里再以100.01的价格卖出,赚到0.02,再加上返利,这一买一卖的总利润大约可以达到0.03。
尽管你的买一(100)和卖一(100.01)的spread只有0.01,但是实际利润高达0.03!
如果源源不断的市价单进来和你成交,每一次买卖你都可以赚到0.03,这样积累下来,发家指日可待!
但是很遗憾,市场并没有如你预期般顺利发展,在你以99.99的价格接货后,现货市场的价格立刻从100下跌到99.80,你立刻撤掉了99.99和99.98的买单,以免被别人套利。
因为现在的价格是已经跌到了99.80,你的卖一还是100.01,这个价格太高了,没有人会以这个价格和你成交。当然你也可以把卖一下调到99.81,但是将会产生0.17的亏损。
别忘了,你是市场上唯一的做市商,你完全可以利用这个优势,调整订单薄,把亏损打到最低!
你计算了一下以什么价格挂卖单,能保本出局。你以99.99的价格接货,想要卖个保本价平掉这一单,卖一就要挂在99.98(因为加上返利,实际到手是99.99,刚好不亏不赚)。
于是你调整了一下订单薄,在买一和买二分别挂上了99.80和99.79的单子,并在卖一挂上了99.98的单子:
尽管现在的价差很大,但你是市场上唯一的做市商,你可以决定不降低卖单价格。如果有人愿意以99.98的卖一价格成交,那皆大欢喜。如果没有,也没关系,因为你的买单价格已经下调到了99.80,会有市价单进来和你成交。
此时,有市价买单进来和你的买一成交。现在你手上有2份合约,持仓成本会平摊到:(99.79+99.99)/2=99.89。(上一笔我们以99.99的价格成交,这一笔以99.79的价格成交,比买单价格更低成交是因为我们有0.01%的手续费返利。)
OK,现在平均持仓成本降低到了99.89,你调低你的卖一价,从99.98调低到99.89。突然间,巨大的报价差缩小了一半。接下来,你可以不断地通过这样操作,逐步减少成本,缩小价差。
上面这个例子里,价格只波动了0.2%,如果价格突然波动5%、10%甚至更多呢?即使用上面的办法操作,也可能会导致亏损,因为价差太大了!
因此做市商要研究2个问题:
· 在不同的时间窗口下,价格的波动性有多大?
· 市场的成交量大小?
波动性简单来说,就是价格离其均值的偏离程度,不同的时间窗口下价格的波动性是不同的。一个品种可能在1分钟级别的k线图上上蹿下跳,而在日线图上的走势波澜不惊。成交量则告诉我们了流动性,流动性会影响挂单的spread和成交频率。
上面的图演示了4种价格波动,对不同的波动情况,做市商要选择不同的应对方式:
1、如果市场整体的波动率较低,每日波动率和日内波动率都很低,则应该选择较小的报价差,以最大化交易量。
2、如果日内的波动率高(也就是说价格虽然大幅波动,但并没有实质性变化),你可以扩大报价差spread,并且用更大的订单量。如果价格朝不利方向运动,可以采用上面说的摊低平均成本的办法来减少亏损。
3、如果每日波动率高,但是日内波动率低(换而言之,价格以平稳的步调走出了趋势),这时候你应该用更小的、紧密的报价差spread。
4、如果每日波动率和日内波动率都很高,你应该扩大价差spread,且使用更小的订单量。这是最危险的市场情况,经常吓跑其他的做市商,当然危机并存,也蕴藏着很多机会。大多数时间做市商会赚取稳定的收益,但是市场脾气怪的时候,会击穿你订单薄的一侧,迫使你亏损出局。
做市商怎么盈利?
我们先回顾一下做市商的基本操作。做市商的基本操作是在bid/ask分别挂单接货,买卖价差和手续费返还就是做市商的利润。
做市交易有2个关键步骤:确定fair price(定价)和确定价差(spread)。
第一步是确定fair price,也就是定位在哪个价格挂单。定价是第一步也是非常重要的一步,如果你对fair price的理解偏差太大,那么你的“库存”很可能甩不出去,最后只能以承受亏损把仓位平掉。
定价的第一种方式是参考该品种在其他市场的价格。比如你在伦敦市场交易美元/日元,你可以参考它在纽约市场的定价。但是如果价格在其他市场出现异常波动,这种定价方式会变的非常不可靠。
第二种定价方式是用中间价格定价,中间价(mid price) =(买1价+卖1价)/2。用mid price定价是一种看似简单,但非常奏效的方法,因为中间价是市场博弈的结果。
Quote around mid, the market is probably right用中间价定价,市场大概率是对的。
除了上面讲到的2种定价方式外,还有其他很多种定价方式,比如基于算法模型、市场深度的定价方式,这里不做详细展开。
做市商要考虑的第二个问题是价差spread。确定合适的价差,你需要考虑一连串的问题:市场的平均成交量是多少?这个成交量的变化(方差)有多大?take(主动买单)的平均大小和变化(方差)?在fair price附近的挂单量情况?等等。
除此之外,你还要考虑在很小时间窗口里价格的波动和方差,作为做市商要付出/获取的手续费,其他次要因素比如接口速度,下单撤单的速度等等。
在非常短的时间段里,做市商的盈利期望其实是负的,因为每一笔主动买单(taker order)都想在自身价格有优势的情况下和你成交,除非是被迫止损的单子。每一个市场上其他的参与者都想从你手上获利。
试想一下,你是一个做市商,你要把单子挂在什么位置?
在挂单能被成交的前提下,要吃到最大的价差,你需要在订单薄的最前面挂单,也就是买一/卖一的价位。只要价格一变动,你在买一的单子就会迅速成交,但是频繁的价格变动是件坏事——比如说你刚接了货,价格就变了,你原来卖一的挂单已经没法以挂单价格成交了。
在一个流动性不充分,价格变动较小的市场,把单子挂在买一/卖一会保险的多,但是这会引出另一个问题——其他做市商会发现你,然后以更小的价差抢在你前面挂单(tighten the spread),大家会抢着一直缩小价差,直到没有利润为止。
现在我们从数学角度探讨,怎么确定价差。先从波动开始。
我们要知道在非常小的时间周期上,这个资产的价格/成交量在它均值附近的波动性大小。接下来的数学计算会假设价格活动服从正态分布当然这会和实际情况有所偏差。
假设我们以1s作为采样周期,过去60s作为样本,假设当前中间价的均值和60s前的均值一样(记住这里的均值不变),且这个均值和现价有0.04的标准差。
由于我们前面假设了价格运动服从正态分布,所以我们可以进一步得出,在68%的时间里,价格会在离均值1个标准差($-0.04-+$0.04)内波动;在99.7%的时间里,价格会在离均值3个标准差($-0.12-$+0.12)内波动。
ok,我们在中间价两边以0.04的价差报价,即价差spread等于0.08,在68%的时间里,价格会围绕均值1个标准差($-0.04-+$0.04)内波动,所以此时两边的单子要想成交,价格的波动就必须击穿两边的价格,也就是超过1个标准差,有32%的时间(1-68%=32%)价格的波动会超过这个范围。
因此,我们可以粗略估计一下单位时间的利润:32% * $0.04 = $0.0128。
我们可以继续推演:
如果以0.06的价差挂单(分别离中间价0.03的位置),对应0.75个标准差(0.03/0.04=0.75),价格波动超过0.75个标准差的概率是45%,预估单位时间利润45% * 0.03 =$0.0135。
如果以0.04的价差挂单(分别离中间价0.02的位置),对应0.5个标准差(0.02/0.04=0.5),价格波动超过0.5个标准差的概率是61%,预估单位时间利润61% * 0.02 = $0.0122。
我们发现,以0.06的价差挂单,也就是在0.75个标准差的位置挂单,能获得最大的利润,也就是$0.0135!
这个例子里分别举了1/0.75/0.5个标准差的情况,比较下来,0.75个标准差能获得最大利润。对直觉进一步证明,我用excel做了不同标准差下预期收益的推导,发现预期收益是一个凸函数,这个凸函数正好在0.75个标准差附近取到最大值!
以上假设价格波动服从均值为0的正态分布,也就是说市场的平均回报率是0,而实际情况是价格的均值会变化。均值的偏移会让一侧的单子更难被成交,当我们有库存时,不仅会亏钱,而且预期利润率也会降低。
总之,做市商的期望由两个部分组成,一是挂单能成交的概率,比如以1个标准差挂单,有32%的时间会成交;二是挂单成交不了的概率,比如以1个标准差挂单,有68%的时间价格会在spread中间运动,导致单子无法成交。
在挂单无法成交的情况下,价格的均值很可能会改变,因此做市商要对"库存成本"进行管理,这个“库存成本”可以看作是一个要支付利息的借款,时间的推移会导致波动率增加,借款利息也会随之升高。做市商可以通过各个周期的平均波动率来制定回归策略,限制持仓成本。