把股市装进游戏 书架

第 02 章 / 共 12 章

第二章 · 撮合引擎:市场的心脏

上一章说了,模拟器的第一公民是订单。那这一章就来造收订单、配订单的那台机器:撮合引擎——大白话:市场的裁判兼红娘,它只认规则不认人,把「有人愿意买」和「有人愿意卖」配成一笔笔成交。真实交易所(纳斯达克、上交所)的核心就是这东西,一台每秒处理百万笔订单、却简单到能写在一张纸上的机器。

它的简单程度会吓你一跳。整个撮合引擎只由三个概念组成:订单、订单簿、一条配对规则。讲完这三个,你就可以自己写一个了。

订单只有两种

不管交易软件上有多少花哨按钮,进到底层,订单只有两种:

这两者的分工是整个市场的骨架:限价单制造市场,市价单消费市场。限价单是挂在墙上的等待,市价单是把墙上的等待撕下来。没有限价单,市价单无单可吃;没有市价单,限价单永远只是墙上的纸条。

订单簿:两列队

所有还没成交的限价单,按方向排成两列队,这就是订单簿——大白话:买卖双方的排队名单。

注意一个关键细节:买盘队首(10.4)永远比卖盘队首(10.6)低。为什么?因为一旦有人愿买的价 ≥ 有人愿卖的价,他们俩立刻就会被撮合成交易、从队里划掉,根本轮不到留在簿子上。中间这道缝——10.6 减 10.4 的 0.2 元——叫买卖价差,它是市场的「待机间隙」,第六章讲做市商时它会是主角。现在只需记住:价差不消失,是因为想立刻成交的人还没急到愿意跨过它。

配对规则:一句话的正义

新订单进来时,撮合引擎只做一件事:看对面队列的队首能不能配上。规则只有一句话:

价格优先、时间优先:出价更优的先成交;出价相同的,先到的先成交。

用一个具体例子走一遍。卖盘队首是「10.6 元卖 500 股」。

  1. 来一张市价买单「买 300 股」→ 吃掉队首 300 股,成交价 10.6(对面挂的价)。卖单还剩 200 股在队首。
  2. 再来一张限价买单「10.7 元买 400 股」→ 出价 10.7 ≥ 队首要价 10.6,能配!成交价仍是 10.6——成交永远按先挂在那里的那单的价格算,这是对「耐心等待的人」的奖励。吃掉剩余 200 股,还不够,继续吃下一个卖单。
  3. 如果这张限价单出价是「10.5 元买 400 股」→ 10.5 < 10.6,配不上,它乖乖进买盘排队,成为新的队首候选。

就这样。没有 AI、没有预测、没有任何智能——一台铁面无私的配对机器。真实交易所的核心引擎,逻辑上就是这么点东西(工程上要快、要稳、要公平,但规则就这一条)。你在模拟器里实现它,不过是一个排序队列加一个 while 循环。

撮合引擎最容易被新手过度设计:加预测、加「智能定价」。别。它就该蠢——像物理引擎一样蠢。万有引力不判断苹果该不该落地,撮合引擎也不判断这个价格「合不合理」。判断是玩家和 NPC 的事。

价格在哪里

注意:到这一步为止,系统里根本不存在「当前股价」这个字段。存在的只有两列队、一道价差,和一条成交流水。你平时在软件上看到的那个醒目的大数字「现价 10.6」,只不过是最近一笔成交的价格——成交流水的最后一行。它不是市场的状态,只是市场留下的一个脚印。

这个看似抠字眼的区分,是下一章的主角:一旦价格只是「脚印」而不是「状态」,一大堆真实市场里人人都见过、却解释不清的现象——跳空、闪崩、无量阴跌——在你的模拟器里会自动出现,一行专门的代码都不用写。

把股市装进游戏 · 妙空
费曼式写法 · 由多个 AI 代理撰写与互相审校