CCXT-10-委托单与交易的关系

交易也称为成交。每个交易都是委托单执行的结果。需要注意的是, 委托单和交易是一对多的关系:委托单的一次执行可能会产生多笔交易。 然而,当一个委托单匹配了另一个相反方向的委托单,就会生成一笔交易。因此,当一个委托单匹配了另一个方向的多个委托单时,就会生成多笔交易,每个配对对应一笔交易。简而言之,一个委托单可以包含一笔或多笔交易。或者换句话说, 一个委托单可以通过一笔或多笔交易来成交。例如,委托账本中可以包含如下的委托单(可以是任何交易符号或交易对):

| price  | amount
----|----------------
  a |  1.200 | 200
  s |  1.100 | 300
  k |  0.900 | 100
----|----------------
  b |  0.800 | 100
  i |  0.700 | 200
  d |  0.500 | 100

上面的数字都不是真实的,这只是用于演示委托单和交易之间的关系。 一个卖家决定在卖出侧下一个限价卖出单,价格为0.700,数量为150:

| price  | amount
----|----------------  
  a |  1.200 | 200     
  s |  1.100 | 300     
  k |  0.900 | 100     
----|----------------  
  b |  0.800 | 100      sell 150 for 0.700
  i |  0.700 | 200     --------------------
  d |  0.500 | 100

由于新的卖出单的价格和数量覆盖超过一个买入委托单(委托单b和i), 在交易撮合引擎中很快(但不是立刻)会产生以下事件: 委托单b可以匹配新进来的卖单,因为两者价格有交集。它们的数量可以彼此消化,因此,买入方在0.800价格成交了100单位。买方的卖出委托单在0.800价位部分成交了100单位。注意对于委托单的成交部分,买方得到了比初始要求更好的价格。他要求最低价格是0.7,但是成交价是更好的0.8。大多数传统的交易所使用最优价格来执行委托单。交易撮合引擎会为委托单b生成一笔和进来的卖出单发生的交易。这个交易成交了整个委托单b,以及卖出单的大部分数量。每一对匹配的委托单都会生成一笔交易,无论是部分成交还是全部成交。在这个示例中,买方数量100可以让委托单b完全成交(完成委托单b),同时也部分成交了卖方的委托单(它在委托账本中还是敞口的)。委托单b现在是完成状态,成交数量是100,它包含了一笔和卖出单发生的交易。卖出单目前是敞口状态,成交数量是100,它包含了一个和委托单b发生的交易。因此到目前位置,每个订单都只有一个成交交易。进入撮合引擎的卖出委托单目前的成交数量是100,还剩下50单位继续等待成交。 委托账本的中间状态现在如下所示(委托单b已经完成,因此已经不再出现在委托账本中):

| price  | amount
----|----------------  
  a |  1.200 | 200     
  s |  1.100 | 300     
  k |  0.900 | 100     
----|----------------   sell remaining 50 for 0.700
  i |  0.700 | 200     -----------------------------
  d |  0.500 | 100

委托单i可以匹配卖出单的剩余部分,因为两者价格相交。买入单i的数量是200,因此可以完全吃掉卖出单的剩余数量50。委托单i可以部分成交50单位,但是其剩余数量150还将继续在委托账本中等待撮合。不过卖出委托单在这第二次撮合过程中可以完全成交了。 交易撮合引擎为委托单i生成一笔和卖出单发生的交易。这笔交易让委托单i部分成交,让卖出单完全成交。又一次,一对匹配的委托单生成了一笔交易。 经过上述步骤,更新后的委托账本看起来是这样:

| price  | amount
----|----------------
  a |  1.200 | 200
  s |  1.100 | 300
  k |  0.900 | 100
----|----------------
  i |  0.700 | 150
  d |  0.500 | 100

注意委托单b已经消失了,卖出单也不在了。所有完成的委托单都会从委托账本中移除。部分成交的委托单i处于敞口状态,依然还呆在委托账本中。