原文首发于 TechNova: 从撮合引擎到合规风控:自我成交防止(STP)机制的深度剖析与实现
承接页(交易系统解决方案):https://technologynova.org/solution/
UserID(或更严格的 EntityID)比较;真正的坑在于内存布局与迭代删除的正确性。自我成交(Self-Trade)指同一交易主体的买单与自己的卖单撮合。 轻则造成手续费损失与策略“自相残杀”,重则被用于刷量(Wash Trading)操纵市场。 因此 STP 既是合规要求,也是市场公平与用户体验的底层保障。
很多人直觉是“前置风控拦掉”,但前置风控看不到订单簿的实时对手方。 只有撮合引擎在撮合瞬间,才知道 aggressor(吃单)将与哪一笔 resting(挂单)成交。 所以 STP 必须嵌入撮合循环:当价格条件满足准备撮合时,先做 STP 判断,再决定是否生成成交。
UserID(最好是 uint64)直接放进 Order 结构体,避免指针跳转导致 cache miss。当监管要求提升到“同一最终受益人(UBO)旗下多账户也禁止自成交”,就不能只比 UserID。 推荐做法是:在订单进入撮合引擎之前完成“身份丰富化”(UserID → EntityID),让撮合环路里仍然是 O(1) 比较。 反模式是在撮合循环里 RPC 调用外部合规服务——那会把延迟直接炸穿。
如果你正在规划撮合引擎、风控、清结算、账户体系等模块的落地,可参考 TechNova 的交易系统整体解决方案: https://technologynova.org/solution/