一种利用红黑树索引提高交易系统撮合效率的方法及系统与流程

文档序号:11231784阅读:571来源:国知局
一种利用红黑树索引提高交易系统撮合效率的方法及系统与流程

本发明涉及金融(股票交易)以及计算机技术领域,特别涉及一种利用红黑树索引提高交易系统撮合效率的方法及系统。



背景技术:

目前的金融、股票软件能够为用户提供行情显示、行情分析和行情交易的平台,其中就包括了模拟交易系统。模拟交易系统通过模拟用户的操作,处理用户的委托单,进而帮助客户完成交易。

一个模拟交易系统是否可用最重要的衡量指标是:单位时间内用户委托单的撮合效率。这主要体现在3个方面:1)检索效率,快速检索符合撮合要求的用户委托单;2)成交效率,快速处理已检索的用户委托单;3)系统灾备,服务崩溃后的用户委托单数据恢复。

现有技术中撮合效率的解决方案中,比如,当接收到行情推送后,对每一个股票代码均需要遍历所有委托单,查找符合该股票代码和委托价格的委托单,撮合成交,显而易见,该方案效率最低。又比如,通过以对股票代码引用计数的方式,当成功保存用户请求后,累加该股票代码对应的引用计数,并保存该委托单号。当接收到行情推送后,只需检索该股票代码下的委托单号即可。但仍需遍历并依次比较委托价格是否满足撮合要求,效率也较低。



技术实现要素:

本发明要解决的技术问题是,如何从提高检索效率入手,实现单位时间内用户委托单的撮合效率最大化。

解决上述技术问题,本发明提供了一种利用红黑树索引提高交易系统撮合效率的方法,包括如下的步骤:

根据交易事件建立一用户委托单记录,

将所述用户委托单记录关键字段进行序列化后的字符串作为红黑树键值,即委托单索引。

根据委托单索引查找出上述对应的用户委托单,并定位出符合当前撮合条件的所有委托单。

更进一步,按照价格优先原则查找并定位符合当前撮合条件的所有委托单。

更进一步,按照时间优先原则查找并定位符合当前撮合条件的所有委托单。

更进一步,所述用户委托单记录至少包括:{意向交易的股票代码、股票名称、委托方向、委托价格、委托数量},以及所述用户委托单记录转发至后台服务器保存,并在后台依时间顺序生成递增的委托单号。

更进一步,依次将上述用户委托单记录中的股票代码,委托方向,委托价格和委托单号,打包并序列化成一个字符串键值,再插入至以红黑树为数据结构的委托单索引列表中。

更进一步,定位出符合当前撮合条件的所有委托单具体包括:

从上述委托单索引中一次性拉取出在涨/跌停范围内委托价格高于最新价的所有买单和/或委托价低于最新价的所有卖单,并按照当前最新价作为当前撮合条件。

更进一步,方法还包括:按委托价格或者委托时间对上述所有委托单进行有序排列。

基于上述,本发明还提供了一种利用红黑树索引提高交易系统撮合效率的系统,包括:

交易客户端,响应用户点击事件,接收委托请求,初始化用户委托单记录,并将该记录发送至交易后台。

交易后台,接收上述委托单记录请求,生成委托单号,将其中关键字段序列化后的字符串作为红黑树键值,即委托单索引。根据委托单索引查找出上述对应的用户委托单,并定位出符合当前撮合条件的所有委托单,最后撮合成交。

在一些实施例中,交易客户端为被配置为:pc、安卓、iphone、wp、ipad、mac中的一种或者多种的交易客户端。

在一些实施例中,所述交易后台用以,按照价格优先原则/时间优先原则查找并定位符合当前撮合条件的所有委托单。

本发明的有益效果:

在本发明中,通过设计并构建委托单的红黑树索引,并从海量用户委托请求中毫秒级拉取所有符合撮合要求的委托记录,改进已有的技术方案,彻底解决模拟交易系统中的效率问题。作为优选方案,采用本发明中的方法能直接一次性拉取所有符合撮合要求的委托单,无任何多余遍历,效率较高。

从产品侧,本发明实现了对用户模拟交易委托单的实时拉取和处理,对用户透明的同时提升用户的产品体验。

附图说明

图1是本发明一实施例中的方法流程示意图;

图2是本发明一实施例中的系统结构示意图;

图3是本发明一实施例中的模拟柜台索引红黑树示意图。

具体实施方式

现在将参考一些示例实施例描述本公开的原理。可以理解,这些实施例仅出于说明并且帮助本领域的技术人员理解和实施例本公开的目的而描述,而非建议对本公开的范围的任何限制。在此描述的本公开的内容可以以下文描述的方式之外的各种方式实施。

如本文中所述,术语“包括”及其各种变体可以被理解为开放式术语,其意味着“包括但不限于”。术语“基于”可以被理解为“至少部分地基于”。术语“一个实施例”可以被理解为“至少一个实施例”。术语“另一实施例”可以被理解为“至少一个其它实施例”。

在本申请中的红黑树,是一种平衡二叉树,本质上是一种2-3查找树,它拥有2-3查找树最坏情况o(logn)的操作效率,同时还兼顾普通二叉树节点的统一操作表示,在需要高效查找、插入和删除的场景中被频繁使用。

在本申请中的交易委托单,是用户交易股票的申请书。

在本申请中的股票代码,包括但不限于上市公司在沪深市场挂牌交易的唯一代码。

在本申请中的股票名称,包括但不限于上市公司在沪深市场挂牌交易的名称。

在本申请中的委托方向,包括但不限于买入或卖出股票的意向。

在本申请中的委托价格,包括但不限于买入或卖出股票的意向价格。

在本申请中的委托数量,包括但不限于买入或卖出股票的意向数量。

在本申请中的交易客户端,包括但不限于pc、安卓、iphone、wp、ipad、mac的客户端。

在本申请中的序列化是将用户交易请求即委托单关键字段,打包成一个字符串作为键值key的方法。

在本申请中的委托单号,包括但不限于唯一标识用户委托请求的编码代号。

请参考图1是本发明一实施例中的方法流程示意图,本实施例中的方法具体包括如下的步骤:

步骤s1根据交易事件建立一用户委托单记录,

步骤s2将所述用户委托单记录关键字段进行序列化后的字符串作为红黑树键值,即委托单索引,

步骤s3根据委托单索引查找出上述对应的用户委托单,并定位出符合当前撮合条件的所有委托单。

通过在上述步骤s1-步骤s3中设计并构建委托单的红黑树索引,并从海量用户委托请求中毫秒级拉取所有符合撮合要求的委托记录。

作为本实施例中的优选,在上述步骤s3中按照价格优先原则查找并定位符合当前撮合条件的所有委托单。在一些实施例中,价格优先原则是根据委托价格而决定。

作为本实施例中的优选,在上述步骤s3中按照时间优先原则查找并定位符合当前撮合条件的所有委托单。在一些实施例中,时间优先原则是根据委托单号而决定。

作为本实施例中的优选,在上述步骤s1中所述用户委托单记录至少包括:{意向交易的股票代码、股票名称、委托方向、委托价格、委托数量},以及所述用户委托单记录转发至后台服务器保存,并在后台依时间顺序生成递增的委托单号。优选地,依次将上述用户委托单记录中的股票代码,委托方向,委托价格和委托单号,打包并序列化成一个字符串键值,再插入至以红黑树为数据结构的委托单索引列表中,建立用户委托单的红黑树索引。

作为本实施例中的优选,定位出符合当前撮合条件的所有委托单具体包括:

从上述委托单索引中一次性拉取出在涨/跌停范围内委托价格高于最新价的所有买单和/或委托价低于最新价的所有卖单,并按照当前最新价作为当前撮合条件,当前撮合条件是指撮合成交是指根据当前行情最新价和数量使用户的委托请求得到满足。

上述步骤中还包括:按委托价格或者委托时间对上述所有委托单进行有序排列,用以接收不同形式的检索定位。

请参考图2是本发明一实施例中的系统结构示意图,本实施例中的一种利用红黑树索引提高交易系统撮合效率的系统,包括:交易客户端1,响应用户点击事件,接收委托请求,初始化用户委托单记录,并将该记录发送至交易后台。交易后台2,接收上述委托单记录请求,生成委托单号,将其中关键字段序列化后的字符串作为红黑树键值,即委托单索引。根据委托单索引查找出上述对应的用户委托单,并定位出符合当前撮合条件的所有委托单,最后撮合成交。

在一些实施例中,所述交易客户端1为被配置为:pc、安卓、iphone、wp、ipad、mac中的一种或者多种的交易客户端。在一些实施例中,所述交易后台2用以,按照价格优先原则/时间优先原则查找并定位符合当前撮合条件的所有委托单。

具体而言,本系统按照如下的方式进行实施:

步骤1当用户交易股票时,无论买卖,均需要在交易客户端提交意向交易的股票代码(上市公司在沪深市场挂牌交易的唯一代码),股票名称(上市公司在沪深市场挂牌交易的名称),委托方向(买入或卖出股票的意向),委托价格(买入或卖出股票的意向价格),委托数量(买入或卖出股票的意向数量)等信息。

步骤2上述交易客户端转发用户申请至交易柜台,交易柜台负责收集用户的委托申请并依时间生成递增的委托单号(唯一标识用户委托请求的编码代号),保存起来用于后续用户的撤单操作和成交撮合。

步骤3将全体用户交易委托单的请求序列化后的键值作为红黑树的key,在本申请中所指的序列化,是将用户交易请求即委托单,打包成一个字符串作为键值key的方法。具体而言,是按照委托请求结构体内成员对象的定义顺序依此写入至一个字符串对象k中,同时定义“比较函数”构建基于k的红黑树。

图3是本发明一实施例中的模拟柜台索引红黑树示意图,以购买股票为例。

假设以下字段,股票代码2位,买卖方向1位,委托价格1位,委托编号1位,

比如,股票代码:60

买卖方向:0买,1卖

委托价格:2元/股

委托编号:0

假设当前行情为:(股票代码60,最近价2元,跌停价0元,涨停价9元)

1、拉取符合条件买入委托(6009x)>p>(6002x):x代表任意委托单号;

2、拉取符合条件买出委托(6010x)<p<(6012x):x代表任意委托单号;

3、合并符合条件的所有委托单,即2号和4号委托买单,消耗用户资金,使用户获得持仓。

因此,通过将全体用户交易委托单的请求序列化后的键值作为红黑树的key,构建一层基于红黑树的委托单索引,按照价格优先/时间优先的原则可以快速查找并定位符合当前撮合条件的所有委托单,实现最高效的委托单撮合。

具体而言,本实施例中在用户委托单的记录之上构建一层基于红黑树的委托单索引,即,当交易柜台成功接收并保存用户委托请求后,按某只股票某个交易方向“价格优先/时间优先”的原则,依次将交易委托单的股票代码,委托方向,委托价格(价格优先)和委托单号(时间优先),打包并序列化成一个字符串键值,插入至以红黑树为数据结构的委托单索引列表中,保证在相同股票代码,相同买卖方向的基础上,按委托价格和委托时间(委托单号按请求时间先后递增)有序排列。

由于模拟交易是用户使用虚拟资金进行股票交易的行为,其委托与成交的流水并不会对交易所真实委托记录和股票的最新价格产生任何影响,因此,该模拟交易系统利用行情驱动撮合用户委托单,即,模拟交易是用户使用虚拟资金进行股票交易的行为,当模拟交易柜台接收到最近行情后,按照行情的成交量撮合优于当前行情最新价的所有买卖委托单。换言之,就是从上述构建的红黑树索引中一次性拉取在涨跌停范围内委托价格高于最新价的所有买单和委托价低于最新价的所有卖单按当前最新价直接撮合成交即可。需要注意的是,此处撮合成交是指根据当前行情最新价和数量使用户的委托请求得到满足(消耗资金获得持仓),而非传统意义上的对手成交,全部操作保证最坏的时间效率是o(logn)。

应当理解,本发明的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行系统执行的软件或固件来实现。例如,如果用硬件来实现,和在另一实施方式中一样,可用本领域公知的下列技术中的任一项或他们的组合来实现:具有用于对数据信号实现逻辑功能的逻辑门电路的离散逻辑电路,具有合适的组合逻辑门电路的专用集成电路,可编程门阵列(pga),现场可编程门阵列(fpga)等。

在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。

总体而言,本公开的各种实施例可以以硬件或专用电路、软件、逻辑或其任意组合实施。一些方面可以以硬件实施,而其它一些方面可以以固件或软件实施,该固件或软件可以由控制器、微处理器或其它计算设备执行。虽然本公开的各种方面被示出和描述为框图、流程图或使用其它一些绘图表示,但是可以理解本文描述的框、设备、系统、技术或方法可以以非限制性的方式以硬件、软件、固件、专用电路或逻辑、通用硬件或控制器或其它计算设备或其一些组合实施。

此外,虽然操作以特定顺序描述,但是这不应被理解为要求这类操作以所示的顺序执行或是以顺序序列执行,或是要求所有所示的操作被执行以实现期望结果。在一些情形下,多任务或并行处理可以是有利的。类似地,虽然若干具体实现方式的细节在上面的讨论中被包含,但是这些不应被解释为对本公开的范围的任何限制,而是特征的描述仅是针对具体实施例。在分离的一些实施例中描述的某些特征也可以在单个实施例中组合地执行。相反对,在单个实施例中描述的各种特征也可以在多个实施例中分离地实施或是以任何合适的子组合的方式实施。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1