撮合引擎开发:完结篇

本文是撮合引擎开发系列的最后一章,详细介绍了订单队列的实现逻辑,包括买单和卖单队列的结构,以及添加、删除、查询等操作。此外,还阐述了六种订单类型,如limit、limit-ioc、market、market-top5/market-top10和market-opponent的业务逻辑,并给出了部分代码实现。文章结尾提到,虽然系列完结,但作者将继续迭代撮合引擎并开发相关组件。
摘要由CSDN通过智能技术生成

欢迎关注「Keegan小钢」公众号获取更多文章


撮合引擎开发:开篇
撮合引擎开发:MVP版本
撮合引擎开发:数据结构设计
撮合引擎开发:对接黑箱
撮合引擎开发:解密黑箱流程
撮合引擎开发:流程的代码实现
撮合引擎开发:缓存和MQ
撮合引擎开发:日志输出
撮合引擎开发:完结篇


本小节是该系列文章的最后一篇了,将讲解剩下的一些东西,包括交易委托账本中订单队列的实现逻辑、更多订单类型的实现逻辑。另外,不少朋友在问,完结后所有代码是否会开源放上 Github?我只能说,长期大概率会开源,但短期内还没打算开源。

订单队列

交易委托账本其实就是由两个订单队列组成的,一个买单队列,一个卖单队列。任何对交易委托账本的查询和操作,实际上都是查询和操作这两个队列。订单队列的设计也直接影响了撮合的性能,前面文章讲数据结构设计时也有简单聊了订单队列的设计,我们主要是用二维链接结合 Map 来保存所有订单的,依赖的是 container/list 包。

订单队列的结构体如下:

type orderQueue struct {
   
	sortBy     enum.SortDirection
	parentList *list.List
	elementMap map[string]*list.Element
}

sortBy 指定价格排序的方向,买单队列是降序的,而卖单队列则是升序的。parentList 保存整个二维链表的所有订单,第一维以价格排序,第二维以时间排序。elementMap 则是 Key 为价格、Value 为第二维订单链表的键值对。

初始化函数就比较简单了,对几个字段赋值而已,代码如下:

func (q *orderQueue) init(sortBy enum.SortDirection) {
   
	q.sortBy = sortBy
	q.parentList = list.New()
	q.elementMap = make(map[string]*list.Element)
}
<
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值