parathink

交易撮合引擎设计

交易撮合引擎设计

Original 不对称思考 彼岸思考 2019-11-03 18:25 交易撮合引擎(Matching/Trading Engine)是所有二级市场电子盘的最核心功能,交易所的存在就是为了撮合。

撮合引擎有两个特点,第一,严格时序,哪怕是到纳秒级别,所以撮合引擎严格单点,第二,对速度的要求高,大部分会选择在内存中进行撮合,也就是内存表。

交易引擎可以简化成四张表。bidbook,askbook,tradebook,orderstreambook。

最基础的交易引擎只处理基础撮合功能,即limit order和market order,类stoploss的功能和liquidation的功能,应该在外围对orderbook这张表完成触发,

本质上高级订单,和爆仓清算保证金也就是插入一个新的订单到orderstreambook 待处理。手续费在生成tradebook记录的时候完成,交易所永远收base symbol作为手续费。

Image

订单流,严格时序,我们熟悉的下单过程,"时间,symbol,方向,限价市价,价格,数量",其它高级订单,本质等于外置触发加入订单流。

严格按时序处理订单,先检查是否撮合,不撮合按价格,插入或者删除askbook或bidbook中的一列数据。

askbook+bidbook,就是我们看到的orderbook,撮合就是看价格与数量,正在处理的order+orderbook完成撮合,Book先按价格再按时间排序,因此如果撮合,按最近价格直到数量相对。

tradebook 记录成功match的订单,应该是需要支持,一笔对多笔撮合的这样一种形式。记录处理的订单,match掉的订单数量,分别match的价格,分笔的手续费。手续费记录在tradebook中。

向外始终是一个push的stream,tradebook push 新插入的数据,orderbook 向外push 最近完成的插入/删除数据,对外表现为设置未成交limit单和撤单。

这就是所以KDB+/q如此的贵,这东西就是完全按照做撮合的标准设计的。