首页 / 专利库 / 银行与财务事项 / 证券 / 一种适用于证券交易系统的订单簿档位数据的处理方法

一种适用于证券交易系统的订单簿档位数据的处理方法

阅读:92发布:2020-05-11

专利汇可以提供一种适用于证券交易系统的订单簿档位数据的处理方法专利检索,专利查询,专利分析的服务。并且本 发明 涉及变数据结构技术领域,具体来说是一种适用于 证券 交易系统的订单簿档位数据的处理方法,包括订单簿数据,用于存放着所有还未成交的订单,两个买卖方向相反的档位数据结构,红黑树数据结构索引,用于索引两个档位数据结构,其特征在于处理方法如下:S1.为两个买卖方向相反的档位数据结构额外建立一个数组索引;S2.获取额外建立的数组索引中价格档位数量的数据,建立计算模 块 :本发明同 现有技术 相比,其优点在于:新方案使得插入订单的动作变成了时间复杂度为O(1)的操作;插入效率更高了,使得系统拥有了更大的订单处理吞吐量和更低的时延。,下面是一种适用于证券交易系统的订单簿档位数据的处理方法专利的具体信息内容。

1.一种适用于证券交易系统的订单簿档位数据的处理方法,包括
订单簿数据,用于存放着所有还未成交的订单,
两个买卖方向相反的档位数据结构,
红黑树数据结构索引,用于索引两个档位数据结构,
其特征在于处理方法如下:
S1.为两个买卖方向相反的档位数据结构额外建立一个数组索引;
S2.获取额外建立的数组索引中价格档位数量的数据,建立计算模
P=N* tickSize+lowLimit
N=int((P-lowLimit)/tickSize)
其中N表示额外建立数组索引中的数组下标,P表示档位数据结构中的价格数据,tickSize表示最小价格变动单位的限制数据,lowLimit表示单个股票的最低价数据;
S3.当有新订单由于未被撮合完全,要加入到相同方向的档位数据结构时,我们就可以通过这个新订单的价格,计算出它所属价格P档位的额外建立数组索引中的数组下标N;
S4.根据下标N在额外建立数组索引内取得档位数据结构对象,接着判断剩余未成交数量是否为0,如果为零,把这个档位数据结构加入到红黑树数据结构索引中,如果剩余未成交数量大于0,直接将新订单插入到档位数据结构所包含的订单链表中。
2.如权利要求1所述的一种适用于证券交易系统的订单簿档位数据的处理方法,其特征在于额外建立一个数组索引中的元素和所有价格档位数据一一对应,额外建立的数组索引的每个元素都是一个档位数据结构的对象。
3.如权利要求1所述的一种适用于证券交易系统的订单簿档位数据的处理方法,其特征在于额外建立数组索引的元素数量和红黑树数据结构的元素数量相等或者不相等,获取档位数据结构中剩余未成交量数据值,当这个值为0时,把这个档位数据从红黑树数据结构索引中移除。

说明书全文

一种适用于证券交易系统的订单簿档位数据的处理方法

技术领域

[0001] 本发明涉及计算机数据处理技术领域,具体来说是一种适用于证券交易系统的订单簿档位数据的处理方法。

背景技术

[0002] 证券交易系统在交易的过程中,我们需要在内存中维护一个订单容器,里面存放着所有还未成交的订单,这个容器记作“订单簿(OrderBook)”。
[0003] 在一个“订单簿”中,所有价格相等并且买卖方向相同的订单被视作同一档订单,属于同一档位的订单我们需要用链表串联起来,并用一个数据结构(记作priceLeader)保存这个链表的信息、以及保存这个价格档位上所有订单的汇总信息(价格,总下单股数,剩余未成交股数,已成交股数),如图1所示。一个订单簿包含买卖方向相反的两个priceLeader的集合,记作leaderBookBuy和leaderBookSell,订单簿的结构如图2所示。
[0004] 由于股票的交易规则中有最小价格变动单位的限制(记作tickSize),在单个股票的最高价(记作highLimit)和最低价(记作lowLimit)构成的涨跌幅范围内,价格档位数量(记作levelCount)可通过下面的公式计算出来:
[0005] levelCount=int((highLimit-lowLimit)/tickSize)+1
[0006] 在交易的过程中,每收到一笔新订单(记作newOrder),系统会尝试与交易方向相反的最优价格档位上的订单进行撮合成交,如果交易方向相反的最优价格档位不满足newOrder所设定的价格或newOrder只有部分数量被撮合时,则newOrder会被插入到它自己所属的priceLeader记录的链表中去,等待将来被其它新订单撮合。
[0007] 交易系统在一天中任意时刻,订单簿中未成交的订单通常不会覆盖所有的价格档位,也就是说,这些订单是离散分布在不同档位上的。
[0008] 现在的订单簿在维护每一个买卖方向的priceLeader集合时用的数据结构只有红黑树(记作leaderMap),这个数据结构在增加删除priceLeader后,可以方便的查询到最小价格priceLeader和最大价格priceLeader。但是这个数据结构在每次查询所花费的时间复杂度是O(logN),每个未成交完成的新订单都要花费这个时间去找所属档位的priceLeader,现有的组织priceLeader的数据结构所花费的时间复杂度对性能影响较大,增加了交易系统的整体延时,降低了交易系统的吞吐量。

发明内容

[0009] 本发明的目的在于解决现有技术的不足,提供一种插入订单效率更高,使得系统拥有更大的订单处理吞吐量和更低的时延的适用于证券交易系统的订单簿档位数据的处理方法。
[0010] 为了实现上述目的,设计一种适用于证券交易系统的订单簿档位数据的处理方法,包括订单簿数据,用于存放着所有还未成交的订单,两个买卖方向相反的档位数据结构,红黑树数据结构索引,用于索引两个档位数据结构,其特征在于处理方法如下:
[0011] S1.为两个买卖方向相反的档位数据结构额外建立一个数组索引;
[0012] S2.获取额外建立的数组索引中价格档位数量的数据,建立计算模
[0013] P=N*tickSize+lowLimit
[0014] N=int((P-lowLimit)/tickSize)
[0015] 其中N表示额外建立数组索引中的数组下标,P表示档位数据结构中的价格数据,tickSize表示最小价格变动单位的限制数据,lowLimit表示单个股票的最低价数据;
[0016] S3.当有新订单由于未被撮合完全,要加入到相同方向的档位数据结构时,我们就可以通过这个新订单的价格,计算出它所属价格P档位的额外建立数组索引中的数组下标N;
[0017] S4.根据下标N在额外建立数组索引内取得档位数据结构对象,接着判断剩余未成交数量是否为0,如果为零,把这个档位数据结构加入到红黑树数据结构索引中,如果剩余未成交数量大于0,直接将新订单插入到档位数据结构所包含的订单链表中。
[0018] 额外建立一个数组索引中的元素和所有价格档位数据一一对应,额外建立的数组索引的每个元素都是一个档位数据结构的对象。
[0019] 额外建立数组索引的元素数量和红黑树数据结构的元素数量相等或者不相等,获取档位数据结构中剩余未成交量数据值,当这个值为0时,把这个档位数据从红黑树数据结构索引中移除。
[0020] 本发明同现有技术相比,其优点在于:
[0021] 1.新方案使得插入订单的动作变成了时间复杂度为O(1)的操作。
[0022] 2.插入效率更高了,使得系统拥有了更大的订单处理吞吐量和更低的时延。附图说明
[0023] 图1是本发明订单薄示意图;
[0024] 图2是本发明订单薄结构示意图;
[0025] 图3是本发明数组索引示意图;
[0026] 图中:1.订单薄结构体 2.买方价格档位集合结构体 3.卖方价格档位结构体 4.价格档位数组 5.一个价格档位的结构体 6.订单包装结构体 7.链接子结构 8.业务子结构。

具体实施方式

[0027] 下面结合附图对本发明作进一步说明,本发明原理对本专业的人来说是非常清楚的。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
[0028] 参见图1,链接子结构7用于链接不同订单在一起,其中包含指向下一个订单的指针,指向上一个订单的指针;订单的业务子结构体8,内部包含订单的申报信息(价格,买卖方向,报单数量)。
[0029] 参见图2,订单簿包含的买方价格档位集合结构体2,内部包含所有的价格档位组成的数组,所有档位的红黑树索引,档位的总剩余未成交量;订单簿包含的卖方价格档位结构体3,内部成员与2中的一致。
[0030] 参见图3,价格档位数组4,内部包含所有的价格档位。
[0031] 1、新的订单簿档位数据结构实现基础
[0032] 在所有的数据结构中,查找效率最高的是数组,直接按数组下标去获取指定的元素,时间复杂度是O(1)。
[0033] 2、新的订单簿档位数据结构
[0034] 在订单簿中,除了使用leaderMap索引priceLeader之外,我们为每个方向的priceLeader额外再建立一个数组索引(记作leaderArray),如图3所示;这个数组的元素和所有价格档位一一对应,leaderArray数组的每个元素都是一个priceLeader对象;我们允许leaderArray数组的元素数量和leaderMap中索引的元素数量不相等,由于数组中每个priceLeader对象中包含该档位剩余未成交量这个统计值,当这个值为0时,我们可以认为这个价格档位上没有订单存在,并且把这个档位从leaderMap中移除。这个数组包含levelCount个元素,leaderArray数组下标N对应priceLeader的价格P通过以下公式确定:
[0035] P=N*tickSize+lowLimit
[0036] 当有新订单(newOrder)由于未被撮合完全,要加入到相同方向的价格档位上时,我们就可以通过这个新订单的价格,计算出它所属价格P档位的leaderArray数组下标N:
[0037] N=int((P-lowLimit)/tickSize)
[0038] 根据下标N在leaderArray数组内取得priceLeader对象,这个操作的时间复杂度为O(1),接着判断剩余未成交数量(记作quantity)是否为0,如果为零,把这个priceLeader加入到leaderMap索引中,并且将quantity设置为新订单的报单数量;如果quantity大于0,说明这个档位上已经存在订单,并且已经存在于leaderMap索引中,我们就可以直接将newOrder插入到priceLeader所包含的订单链表中,并给该档位quantity加上新订单的报单数量。
[0039] 此专利中所述的订单簿档位数据结构已经在【上海证券交易所-交易系统升级建设一期项目】中进行了实施,将插入订单的动作变成了时间复杂度为O(1)的操作(代码中下划线的部分是重点),源代码位于内部代码仓库地址GTS/orderbook.git中,主要逻辑在order_book.go中实现,下面是截取的关键源代码段:
[0040]
[0041]
[0042]
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈