一、报价引擎概述
1.1 什么是报价引擎
报价引擎,说白了就是交易系统的「价格大脑」。
我做了这么多年交易系统,见过不少新人一上来就问:「报价引擎不就是个报价展示工具吗?」
嗯,还真不是这么简单。
报价引擎的核心任务,是接收市场行情、处理订单流、维护买卖盘口,然后实时输出最优报价。
它不只是一个数据展示器,而是一个实时计算引擎。
我个人习惯把报价引擎比作「交易系统的中枢神经」——
行情数据进来,订单进来,它要快速判断:
谁该成交?成交价是多少?剩余订单怎么挂?
这些决策,都在毫秒甚至微秒级别完成。
1.2 报价引擎在交易系统中的作用
报价引擎到底有多重要?
我举个例子你就明白了。
假设你是一个做市商,每秒要处理几万笔订单。
如果报价引擎慢了10毫秒,你的对手方可能已经抢走了最优价格。
如果报价引擎算错了价格,那更惨——直接亏钱。
报价引擎在交易系统中承担着三大核心作用:
- 价格发现:通过撮合买卖订单,形成市场公认的合理价格
- 流动性提供:维护买卖盘口深度,让交易者能快速成交
- 风险控制:检查订单合法性,防止错误报价影响市场
我记得有一次,一个客户的生产环境出了故障——
报价引擎的盘口数据延迟了200毫秒。
结果呢?做市商按照旧价格报单,被高频交易者疯狂套利。
那天的损失,够买好几台服务器了。
1.3 核心功能模块介绍
报价引擎不是一个大黑盒,它由几个关键模块组成。
我按数据流向,给你拆解一下:
1.3.1 行情接收模块
这个模块负责从交易所或数据源接收实时行情。
包括:最新成交价、买卖盘口、成交量等。
我建议你注意一点:行情接收模块必须处理数据乱序问题。
网络传输中,后发的数据包可能先到。
如果处理不好,报价引擎会算出错误的价格。
1.3.2 订单管理模块
订单进来之后,先到这里报到。
这个模块负责:
- 校验订单合法性(价格、数量、账户余额等)
- 分配订单ID
- 记录订单状态(新单、部分成交、完全成交、已撤销)
说白了,订单管理模块就是报价引擎的「前台接待」。
它不负责撮合,但负责把订单整理好,交给撮合模块处理。
1.3.3 撮合逻辑模块
这是报价引擎的核心中的核心。
撮合逻辑模块负责:
- 接收买卖订单
- 按照价格优先、时间优先的原则匹配
- 生成成交记录
- 更新盘口数据
我见过最复杂的撮合逻辑,支持十几种订单类型——
限价单、市价单、冰山订单、止损单、OCO订单……
每一种订单类型的处理逻辑都不一样。
嗯,这里要注意:
撮合逻辑的代码,一定要写单元测试。
我曾经因为一个边界条件没处理好,导致冰山订单的隐藏数量被提前暴露——
那场面,真是灾难级的。
1.3.4 盘口维护模块
盘口,就是买卖挂单的列表。
买盘按价格从高到低排列,卖盘按价格从低到高排列。
盘口维护模块要做的事情:
- 新订单加入盘口
- 成交后删除或修改盘口条目
- 撤销订单时删除盘口条目
- 维护盘口深度(比如显示前10档价格)
盘口数据结构的选型很关键。
我建议用跳表(Skip List)或者红黑树,
因为需要频繁插入、删除、查找——时间复杂度要控制在O(log n)。
盘口更新延迟:< 1微秒(99.9%分位)
盘口深度:支持至少100档价格
并发处理:支持每秒10万+订单
1.3.5 报价输出模块
最后,报价引擎要把结果输出出去。
输出内容包括:
- 最优买卖报价(Best Bid & Offer)
- 盘口深度快照
- 成交记录
- 市场统计信息
输出方式有两种:
- 推送模式:实时推送给订阅者(适合高频交易)
- 拉取模式:客户端主动查询(适合低频应用)
我个人更推荐推送模式,延迟更低。
但要注意流量控制——如果行情变化太快,推送频率过高,会压垮网络和客户端。
1.4 报价引擎核心架构图
下面这张图,是我画的一个简化版报价引擎架构。
你可以看到数据从行情源进来,经过各个模块,最终输出报价。
1.5 总结
报价引擎不是简单的报价展示工具。
它是一个实时、高并发、低延迟的计算系统。
核心模块包括:
- 行情接收
- 订单管理
- 撮合逻辑
- 盘口维护
- 报价输出
每个模块都有各自的难点和坑。
我建议你从撮合逻辑模块入手,这是报价引擎的灵魂。
先把限价单撮合搞明白,再逐步扩展其他订单类型。
嗯,这一章就到这里。
报价引擎的概述,说白了就是让你知道它是什么、做什么、怎么拆。
后面我们会深入每个模块的细节,到时候再细聊。