第四章:匹配市场与双边市场
Roth的匹配市场理论,延迟接受算法,在订单簿交易中的应用
匹配市场,说白了就是两边的人互相挑。一边是买家,一边是卖家。你想想看,股票交易是不是也是这样?有人想买,有人想卖,中间需要一个机制来撮合。
我最早接触匹配理论,是在做期权做市商的时候。那时候我就在想,订单簿本质上不就是个匹配市场吗?只不过咱们交易员管它叫「价格优先、时间优先」。但Alvin Roth这帮经济学家,他们管这叫「延迟接受算法」。名字不一样,内核其实差不多。
什么是匹配市场?
匹配市场有两个核心特征:
- 双边性:市场两边是不同的群体,比如买家和卖家
- 不可分割性:交易的是整手股票,不能拆成半手
嗯,这里要注意。匹配市场跟咱们平时说的「完全竞争市场」不一样。完全竞争市场里,价格是唯一的信号。但在匹配市场里,除了价格,还有偏好、优先级、甚至运气成分。
我个人习惯把匹配市场分成两类:
| 类型 | 例子 | 特点 |
|---|---|---|
| 集中式匹配 | 股票交易所 | 中央订单簿,统一撮合 |
| 分散式匹配 | OTC市场 | 双边谈判,没有中央对手方 |
延迟接受算法(Deferred Acceptance Algorithm)
这个算法是Roth的成名作。他靠这个拿了诺贝尔奖。算法本身不复杂,但思想很深刻。
我给大家拆解一下核心逻辑:
- 买家向所有卖家发出「意向」
- 卖家从收到的意向中,挑出最满意的,暂时接受
- 被拒绝的买家,继续向下一顺位的卖家发出意向
- 重复,直到所有人都匹配完毕
为什么叫「延迟接受」?因为卖家不是立刻做最终决定,而是先「暂存」最优选择,等更好的出现再换。说白了就是「骑驴找马」。
关键洞察:延迟接受算法保证了「稳定匹配」。什么叫稳定?就是不存在一对买家卖家,他们互相更喜欢对方,但当前却没有匹配在一起。这在订单簿里,就是「没有未成交的限价单可以互相撮合」。
订单簿交易中的匹配逻辑
咱们做量化交易的,天天跟订单簿打交道。你有没有想过,订单簿的撮合机制,其实就是延迟接受算法的一个变种?
我来画个图,帮大家理解:
你看这个图,买方和卖方各自排着队。匹配引擎就是延迟接受算法的执行者。它不断检查:当前最优的买单和最优的卖单,能不能成交?能的话就撮合,不能就等着。
我在项目中的实战经验
我记得有一次做高频交易策略,遇到一个坑。我们的订单簿匹配逻辑,用的是标准的「价格优先、时间优先」。但后来发现,在某些极端行情下,这种匹配方式会导致「虚假成交信号」。
为什么会这样?因为延迟接受算法假设所有参与者都是理性的,但市场恐慌时,有人会挂出离谱的价格。这些订单虽然排在前面,但成交后很快就会被撤销。嗯,这里要注意,算法本身没问题,但实际应用时要加一层「价格合理性校验」。
避坑指南:我曾经在回测中忽略了一个细节——延迟接受算法要求「偏好是严格的」。但在订单簿里,两个订单可能价格相同、时间相同(比如同时到达)。这时候需要引入「随机排序」或者「ID优先级」来打破平局。否则,你的回测结果会跟实盘差很多。
延迟接受算法在订单簿中的具体实现
咱们来看一段伪代码,理解一下核心逻辑:
// 订单簿匹配引擎(延迟接受算法简化版)
function matchOrderBook(buyOrders, sellOrders):
// 按价格排序:买单从高到低,卖单从低到高
sort(buyOrders, by price descending)
sort(sellOrders, by price ascending)
while buyOrders is not empty and sellOrders is not empty:
bestBuy = buyOrders[0] // 最高买入价
bestSell = sellOrders[0] // 最低卖出价
if bestBuy.price >= bestSell.price:
// 可以成交
tradePrice = bestSell.price // 或者取中间价
tradeQty = min(bestBuy.qty, bestSell.qty)
// 更新订单簿
bestBuy.qty -= tradeQty
bestSell.qty -= tradeQty
if bestBuy.qty == 0: remove(buyOrders[0])
if bestSell.qty == 0: remove(sellOrders[0])
recordTrade(tradePrice, tradeQty)
else:
// 无法成交,退出循环
break
这段代码看着简单,但实际生产环境要考虑的东西多得多。比如:
- 冰山订单怎么处理?
- 市价单怎么映射到限价单?
- 部分成交后的剩余订单,优先级怎么算?
我个人习惯把市价单看作「价格为无穷大(买单)或无穷小(卖单)」的限价单。这样处理起来,逻辑就统一了。
匹配理论对交易策略的启示
学完匹配理论,对我们做策略有什么实际帮助?我总结了几点:
- 订单簿深度分析:匹配理论告诉我们,订单簿的「厚度」会影响匹配效率。薄订单簿容易出现「跳空」,厚订单簿则更稳定。
- 最优执行策略:如果你是大资金,直接挂单可能会影响市场。延迟接受算法的思想是「分批试探」,这跟TWAP、VWAP的思路是一致的。
- 市场设计缺陷:有些交易所的撮合规则有漏洞。比如某些衍生品市场,允许「自成交预防」,但这实际上破坏了匹配的稳定性。
重要提醒:匹配理论虽然漂亮,但不要生搬硬套。真实市场的参与者不是完全理性的,有人会犯错误,有人会恶意操纵。算法只能保证「在给定偏好下的稳定匹配」,但偏好本身可能是错的。
好了,这一章的内容就到这里。匹配市场理论看起来抽象,但落地到订单簿交易中,其实每天都在用。你下次看Level2行情的时候,可以想想:当前订单簿的匹配状态是稳定的吗?有没有潜在的「未匹配对」?这些思考,往往能帮你发现交易机会。