Skip to main content
每个市场都有一个中央限价订单簿:挂着的买单在一侧,挂着的卖单在另一侧,各自按价格排序。新进的订单跨过两侧之间的缺口,成交就发生了。 订单簿在链上。它的状态是已提交链状态的一部分,这意味着所有人面对的是同一个订单簿,任何节点都能精确重建它在任意区块时的样子。

结构

价差
最优卖价
50,000 − 49,950 = 50中间价 49,975
最优买价
一笔 1.0 的市价买单0.2 成交在 50,000
0.3 成交在 50,100
0.5 成交在 50,200
均价约 50,130,不是盘口挂出的
50,000。这段差额正是市价单
不会摆在你面前的成本。
卖单 — 卖方
买单 — 买方
50,2000.5
50,1000.3
50,0000.2
49,9500.4
49,9000.6
49,8001.2
最优买价是买方愿意支付的最高价。最优卖价是卖方愿意接受的最低价。两者之间的缺口是价差,中点是中间价——它在多处被用作参考,包括资金费率的溢价部分。 深度是每个价位上挂着的数量。你的订单是在盘口附近成交,还是一路吃到更差的价格,就看它。

优先级

订单按价格优先,其次时间优先成交。 价格很直白:出价高的买方排在出价低的前面。时间才是这里和多数场所不一样的地方。 “时间”指你的订单在已提交区块序列中的位置——不是它到达某个节点的时刻。 同一区块内的两笔订单也有先后,而这个先后每个验证者都能从共识已经确定的数据里算出来,结果完全一致。网络离得再近也改变不了。区块之间,到达时间仍然重要;区块之内,微秒级的竞赛不存在。 排序规则进一步强化了这一点:同一区块内,撤单先于主动吃单执行,所以过期报价撤得回来,不会被同一时刻到达的订单吃掉。

提交前先读深度

你看到的报价是最优买价和最优卖价。如果你的订单大于挂在那里的数量,它们不是你能拿到的价格。 沿着上面那张订单簿的卖单侧往下走: 一笔 0.2 的市价买单全部在 50,000 成交。一笔 1.0 的市价买单会吃穿三档——平均价格约 50,130,而不是盘口显示的 50,000。 所以市价单会带一条边界,由“你这笔数量实际会吃掉多少深度”推导出来;也所以把大单拆到时间或价格上,通常比一口吃掉更便宜。
订单相对订单簿偏大时,提交之前有个习惯值得养成:算出你这笔数量会触到的最差价格,别只看盘口。两个数字之间的差,就是市价单藏起来的成本。

价格是整数

订单簿价格是该市场最小价格变动单位(tick size)的整数倍,数量是最小数量单位(lot size)的整数倍。执行路径上没有浮点数——两个节点之间只要有一处舍入不一致,就是一次分叉。参见精度。

订单簿看不到什么

条件单不在订单簿上。止损、止盈和其他条件单存在另一个盯着价格的存储区里。触发之前,它们不占队列位置,也不贡献深度。 实际后果是:行情快速变动时,真实深度可能比订单簿显示的更薄——价格一穿过一簇触发价,就会把一批看不见的订单同时变成真实订单,而且全在同一侧。

后续阅读

订单类型

你能往订单簿上放什么,以及什么会挂着、什么会吃掉流动性。

市价单

由深度推导出的边界如何保护一笔市价单。

交易排序

为什么同一区块内撤单胜过主动吃单。

撮合

订单簿在内核中如何组织与遍历。