049 分钟
价格优先,时间优先

订单撮合怎样产生价格?

让订单真正相遇,观察静止订单价格、部分成交与买卖价差。

本章目标学完后,你应该能:
  • 按价格优先、时间优先解释成交顺序
  • 预测部分成交和静止订单价格
章节位置第 4 / 6 章
  1. 上一章观点怎样变成订单?
  2. 本章订单撮合怎样产生价格?

    让订单真正相遇,观察静止订单价格、部分成交与买卖价差。

  3. 下一章YES 价格 0.70 代表什么?
阅读前

先想一想这几个问题

展开答案前,可以先在心里做个判断。与预期不同的内容可以加入复习列表。

Q01买方愿付 72、卖方只要 68,为什么成交价通常是 68?
简要回答

很多订单簿采用静止订单价格:先挂出的 68 卖单已经向市场承诺条件,后来进入的 72 买单只是接受它。这样既奖励等待的流动性,也让撮合结果可重放。

和原先判断相比:
Q02只成交一份,为什么整个市场都显示了一个新价格?
简要回答

最近成交价记录的是最后一次边际相遇,不是所有持仓被重新买卖。界面会用它重估市场,但你必须再看成交量、价差和深度,判断这个价格有多可靠。

和原先判断相比:

订单簿只是一组尚未成交的承诺。撮合引擎不断寻找“买方愿意支付的价格不低于卖方愿意接受的价格”的组合,并用一套公开优先级把它们变成交易。

先看买一、卖一和价差

买单按价格从高到低排列,最高的一张叫买一;卖单按价格从低到高排列,最低的一张叫卖一。两者之间的距离叫价差。

当买一是 58、卖一是 66 时,没有任何两个人同时满意,因此不会成交。新的买单愿意支付 70 时,它穿过了卖一 66,撮合条件成立。

撮合观察台价格优先 · 时间优先
YES 隐含价格55/ 100

买一 45卖一 65价差 20

YES 订单簿价格 / 数量

买单 BIDS

Alice451

卖单 ASKS

Bob651
买 NO @ q 会显示为卖 YES @ 100−q
事件记录3 EVENTS
  1. 03

    Bob 提交:买 NO 1 份,最高 35 积分。

  2. 02

    Alice 提交:买 YES 1 份,最高 45 积分。

  3. 01

    市场创建:2028 年前,人类会再次踏上月球吗?

先观察最优价格,再点击一张会穿过价差的订单。成交价采用更早进入订单簿的那张订单价格。

为什么成交价使用更早的订单

假设 Bob 的卖单 ASK 65 已经在订单簿等待。Carol 随后提交 BID 70。65 到 70 之间有多个价格都能让双方接受,但系统需要一个确定规则。

这里采用常见的“静止订单价格”:Bob 先承诺 65,Carol 是主动穿过价差的人,所以成交价是 65。Carol 比自己的上限少付 5,Bob 得到自己公开接受的价格。

同一个价格下,时间决定顺序

如果 Alice 和 Carol 都在 65 买 YES,而 Bob 只能提供 2 份 NO,那么先进入订单簿的人先成交。这就是价格优先、时间优先

  1. 买方价格更高、卖方价格更低的订单优先;
  2. 价格相同,序号更小的订单优先;
  3. 数量不足时先部分成交,剩余数量继续排队。

这些规则不仅关系公平,也让系统可以被确定性重放:给定完全相同的订单序列,任何验证者都应该得到完全相同的成交结果。

展开:这一步如何实现
while bestBid.price >= bestAsk.price:
  maker = earlier(bestBid, bestAsk)
  quantity = min(bestBid.remaining, bestAsk.remaining)
  trade(price = maker.price, quantity)
  lockCollateral(quantity * 100)

每次撮合后都要再次检查订单簿,直到买一严格低于卖一。

理解检查

卖单 ASK 65 先进入订单簿,随后到达 BUY YES @70。成交价通常是多少?

本章小结

市场现在有了成交记录和“最近成交价”。下一章要防止一个常见误读:最近价格 70,并不意味着系统发现了一个客观、永恒的 70% 概率。

本章小结完成练习和理解检查后,可以保存本章