委托单与交易的关系
交易也称为成交。每个交易都是委托单执行的结果。需要注意的是, 委托单和交易是一对多的关系:委托单的一次执行可能会产生多笔交易。 然而,当一个委托单匹配了另一个相反方向的委托单,就会生成一比较 交易。因此,当一个委托单匹配了另一个方向的多个委托单时,就会 生成多笔交易,每个配对对应一笔交易。
简而言之,一个委托单可以包含一笔或多笔交易。或者换句话说, 一个委托单可以通过一笔或多笔交易来成交。
例如,委托账本中可以包含如下的委托单(可以是任何交易符号或交易对):
| 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处于敞口状态,依然还呆在委托 账本中。