交易入门001 订单簿 Order Book

Order Book

一个简单的订单簿例子:

bid price offer
50.1 1000
50.0 100
49.9 200
49.8
300 49.7
1006 49.6

这里tick size 为0.1,表示价格变化的最小单位。

bid表示愿意买的人所出的买入价格,offer代表愿意卖出的人所出的卖出价格。最优买卖价格的差距叫做价差spread。

Order book 可以展示一个产品的流动性liquidity, 也即在一个具有竞争力的价格上买入或者卖出的难易程度。价差更小一般意味着流动性更高,不过静态的order book不能完全反映流动性。假设某人买入100手后,很多交易方因此撤掉他们的order,那么流动性就也发生了变化。

  • lift:如果我们愿意买入10手,价格49.9,则称之为我们lift the 49.9 offer。
  • hit:如果我们愿意卖出10手,价格为49.7,称之为我们hit the 49.7 bid。
  • pay through:如果我们买入400手,则和多个price level 的订单达成交易。

以上的3个例子都叫做liquidity taking - 因为我们降低了order book上的流动性。

  • long:如果我们的net postition为正,则称为long。
  • short:net position为负,则称为short。

如果我们也想在order book上挂单,我们可以join 现有的price level,例如49.9的卖单,或49.7的买单。或者improve the best bid or offer - 49.8,将最好的bid或offer improve一个level叫做diming。2这些情况则统称为liquidity making。

除了新下订单外,我们可以随时撤回我们的订单 - remove / pull. 可以修改订单的价格或者size - change / amend.

上面的order book中只显示了每个价格level上的size总和,但是他们可能来自不同的交易方,例如49.9的200手,可能50手来自老张,70手来自老王,80手来自老李。当我们下单49.9的100手买单时,交易所如何决定谁的卖单可以成交呢?

一般来说有2种方式:第一种叫做price-time allocation,对于给定价格,按照下单时间先后依次进行匹配:假设他们的下单顺序为老张、老王和老李,老张50手全部成交,老王50手成交,老李没有成交。这种情况中我们一般称老张具有queue priority。交易所一般会有一些规则来保证queue priority的公平性:比如如果老张amend他的订单到70手,那么他之前的买单就会失去queue priority,但如果他只是要减少size,则可以维持queue priority。

第二种方式叫做pro-rata,按比例成交:老张成交25手,老王35,老李40手。

pro-rata的分配方式更常见于价格较为稳定、价格变化较慢的产品。它的缺点是,交易方通常会下单远大于自己想要真正成交的size,因此造成了misleading的高流动性。

Valuation

除了关注具有bid offer两边的order book,更多时候我们更想只得到一个单一价格,用来表示这个产品现在的定价,base valuation - 一个从order book中可以推算得到的单一价格。

最直观的一种计算方式就是取中点:例如刚刚的例子中价格为0.5*(49.9+49.7)= 49.8.

或者使用加权:(49.9200+49.7300)/500 = 49.82. 即top-level volume-weighted average price = top-level VWAP。

用VWAP 计算得到base valuation看起来非常合理,不过这里有个例外:假设有人下单10手价格为49.8的买单,则新的VWAP = (49.9*200+49.*10) / 210 = 49.895,有人新下了买单,价格反而却提高了!这是VWAP计算方式在order book spread超过1 tick size时的limitation。

当然,我们还可以定义更为复杂的计算方式:如假设有300手成交的话,价格为:

  • 如果有300手买单被成交:则300手价格为49.7的买单被成交 - 价格为49.7
  • 如果有300手卖单被成交:则需要200手49.9 100手50.0的卖单被成交,价格为(49.9200+50100)/300 = 49.93.
  • 然后我们取中间值为(49.7+49.93)/2=49.81.

我们还可以定位更为复杂的计算,不过一般情况下,一个简单的计算方式是:

  • 如果价差超过1个tick,则采用mid point
  • 如果价差为1个tick wide,则采用top-level VWAP