一种基于队列动态变化的可休眠交易撮合方法与流程

文档序号:12125700阅读:411来源:国知局
一种基于队列动态变化的可休眠交易撮合方法与流程

本发明涉及金融货币交易领域,特别是一种基于队列动态变化的可休眠交易撮合方法。



背景技术:

随着我国金融领域与国际金融交汇融合,我国金融市场的变动愈显得变幻难测,与之相对应的,我国的股票、期货、现货、虚拟电子货币等实时交易愈来愈发展快速。在当前的技术环境下,这些实时交易系统在允许用户进行交易的时间段内,将从传统的关系型数据库(如Oracle、mysql等)或内存数据库(如Redis、Memcached等)等储存了用户委托订单的数据源当中,根据特定的业务优先原则,取出一些遵循业务优先原则的有序买单队列与一些有序卖单队列进行交易撮合,从而使得买卖双方的交易能够得到成交。

现目前的撮合系统在进行撮合算法的设计时,仅仅立足于撮合子系统本身,较为片面的只考虑如何去优化买单与卖单队列的数据结构,使撮合算法变得更快、更容易实现;并未立足于一个全系统的架构,以及特定交易随着时间推移而不断变化的市场行为特征来调整撮合子系统的算法策略以及撮合子系统本身与其他子系统的整体交互策略。

典型的股票交易系统能够发生交易的时间段是在上午9:30至11:30以及下午13:00至15:00,孤立来看可交易时段较为狭窄,用户操作较为集中,但目前中国股票市场已有几千只且还在不断增多,不乏冷门股票,也不乏涨幅较大甚至涨停的股票与跌幅较大甚至跌停股票。而在股票暴涨或涨停时,通常买股票的会变多,而卖股票的会变得更少,导致在较长时间段内都不会有交易发生。股票跌幅较大或跌停时,通常卖股票的会变多,而买股票的会变得更少,同样也会导致在较长时间段内不会有交易发生。

另一个较为典型的场景是目前非常热门的虚拟电子货币(如:比特币、莱特币等等)交易系统,这类系统的典型特征是:24小时不间断交易,即:交易被允许可以发生在一天之内的任意时刻点。但同时考虑到绝大多部分人深夜都 会休息,因此在深夜交易必然稀疏。

而在以上这些情况下,撮合系统其实是可以让其处于休眠状态的,当有可产生交易行为的新订单产生时,再由订单系统实时的唤醒撮合系统进行工作即可;同时由于买单与卖单的数量是实时变化的,如:在某只股票涨幅较大时,随着追涨的能量越来越强,买单会多余卖单,因此此刻是否可以发生交易其实主要是由卖单决定的,因此首先取出一批卖单,然后根据所取到的卖单到数据源取一批买单,在来撮合它们发生交易,就比先取买单再取卖单显得更加合理,因为卖单很少甚至为空,根据卖单的量再取买单时相较于先取买单后取卖单需要请求的数据与耗费的资源更少。但是传统的撮合算法并未将这些典型的市场行为特征因素考虑在内,采用固定的队列获取顺序、固定的队列请求大小,势必将造成以下两种情形的发生:

1、对数据库的连接请求频率变得更高,但实际上是无需请求数据或只需请求少量数据,浪费数据库连接资源;

2、请求频率变高的同时请求获取买单或者卖单队列的大小没有动态减小,将造成带宽资源的浪费。



技术实现要素:

基于此,针对上述问题,有必要提出一种基于队列动态变化的可休眠交易撮合方法,该方法将明显减少通信请求,降低数据库的负载,减少内存的读取次数,节省带宽资源,为其它后续系统节省不少资源,提升吞吐率。

本发明的技术方案是:一种基于队列动态变化的可休眠交易撮合方法,包括以下步骤:

由订单系统根据用户的买卖委托单的下单情况,分别将买单信息和卖单信息写入到买卖单数据源;

由撮合系统从买卖单数据源中提取出买单队列和卖单队列,并进行交易撮合;

每当订单系统发生新订单或撮合系统产生新交易,订单系统和撮合系统将发生一次信息更新互动。

本发明首先由订单系统根据用户的买卖委托单下单情况,分别将买单和卖 单信息写入买卖单数据源中,然后由撮合系统负责从买卖单数据源中取出买单队列和卖单队列进行交易撮合,该发明还针对订单系统和撮合系统引入了正向和反向的反馈机制,即及时消息更新互动,增加订单系统和撮合系统的互动,使得整个系统变得更加流畅和合理。

优选地,撮合系统撮合时的优先权取决于从买卖单数据源取得的买单队列和卖单队列的大小,买单队列和卖单队列的大小,直接决定下一轮撮合时,先取买单队列还是先取卖单队列。

优选地,撮合系统还包括休眠唤醒功能,其具体如下:

当前撮合中,撮合系统发现从买卖单数据源取得的待撮合买单队列为空,或带撮合卖单队列为空,则设定撮合系统进入休眠期;

撮合系统处于休眠期状态,且未接收到订单系统的唤醒信号,当休眠时间超过设定时间,撮合系统自动恢复活跃状态;

撮合系统处于休眠期状态,接收到订单系统发生新订单发送的唤醒信号,则撮合系统恢复活跃状态。

由于本发明的订单系统与撮合系统构成了一个闭环结构,休眠唤醒的机制确保了空闲时段内耗费资源的减少,又保证了休眠期间突然而来的用户交易请求能够迅速的得到响应,做到让用户无延迟感知,保证了良好的用户体验。

优选地,设定撮合系统的休眠期为系统随机生成的时间段,撮合系统在无交易可产生的情况下进入休眠,而休眠机制的休眠时间是一个随机时间值,而不是一个固定值,同时这个随机数值的产生依赖于当前已经连续休眠的次数,这样做的一个好处是可以根据不同类型的交易系统自身的特点,选用不同的随机策略来寻找适合各自交易系统自身的随机时间值产生方案。

优选地,设定订单系统在每次发生新订单时,启动检测模块检测撮合系统是否休眠,如果未休眠,则不做任何处理,如果休眠,且引起休眠的订单类型与刚下单成功的订单类型一致,则发送一个唤醒消息,当撮合系统休眠一个最小不可分单元之后,将读取到唤醒消息,立即唤醒进行撮合。

优选地,设定撮合系统每一轮的撮合将动态变换撮合队列的顺序。

优选地,设定当前动态变换的买单队列大小和卖单队列大小取决于上一轮 的买单队列大小和卖单队列大小,对于每一轮撮合时,每次向买卖单数据源请求数据时,请求数据的量选取上一轮撮合的买卖队列的量较小者的量。

优选地,设定优先获取的队列类型为待撮合买单队列和待撮合卖单队列的长度更小者的类型。

本发明的有益效果是:

(1)本发明建立在两个连续相邻时刻点具有强相似性,但即使在某一个固定时刻点的行情急速变化后,本算法也能够在最多通过一轮的撮合时间延迟后,迅速跟进变化,调整撮合策略;

(2)订单系统与撮合系统构成了一个闭环结构,休眠唤醒机制确保了空闲时段内耗费资源的减少,又保证了休眠期间突然而来的用户交易请求能够迅速的得到响应,做到让用户无延迟感知,保证了良好的用户体验;

(3)撮合系统在无交易可产生的状态进入休眠,降低数据库的负载,减少内存的读取次数,同时还节约带宽资源;

(4)向数据源动态变换请求买卖单队列量的大小,可以保证每次尽量请求尽量少的必要数据,从而不占据过多带宽,消耗过多的资源。

附图说明

图1是本发明实施例所述的撮合策略系统结构图;

图2是传统撮合策略系统结构图;

图3是本发明实施例的休眠子流程图。

具体实施方式

下面结合附图对本发明的实施例进行详细说明。

实施例:

一种基于队列动态变化的可休眠交易撮合方法,如图1所示,包括以下步骤:

步骤一,由订单系统根据用户的买卖委托单的下单情况,分别将买单信息和卖单信息写入到买卖单数据源;

步骤二,由撮合系统从买卖单数据源中提取出买单队列和卖单队列,并进行交易撮合;

步骤三,每当订单系统发生新订单或撮合系统产生新交易,订单系统和撮合系统将发生一次信息更新互动。

由于传统的撮合系统并未考虑到背景技术所述的各种因素,本发明所述的撮合策略有以下几点调整:

首先,基于当前一轮的撮合算法,从数据源取得的买单队列与卖单队列的大小,决定下一轮撮合时,先取买单队列还是先取卖单队列;

其次,在当前一轮的撮合中,若是发现从数据源取得的待撮合买单队列为空或者卖单队列为空,则休眠撮合系统一个随机的时间段;

再次,撮合子系统除了由于休眠时间足够之后自动唤醒外,在订单子系统中增加实时唤醒撮合子系统的机制;

最后,除了动态变换每一轮撮合队列的顺序以外,同时也根据上一轮的买单队列与卖单队列大小动态调整下一轮请求的队列大小。

传统的撮合系统如图2所示,对比图1和图2可以发现,在本发明之前,首先由订单系统根据用户的买卖委托单下单情况,分别将买单与卖单信息写入到买单数据源与卖单数据源,然后由撮合系统负责从买卖单的数据源中取出买单队列与卖单队列进行交易的撮合,订单系统与撮合系统仅仅是简单的生产者与消费者的关系。

而由图1可以得出,本发明中所描述的撮合策略将引入正向和反向的反馈机制,增加订单系统与撮合系统的互动,以使得整个系统变得更加流畅和合理。

进一步地,根据图1的系统结构图可以得出:

对于每一轮的交易撮合,如果当前取得的待撮合买单队列小于卖单队列,那么说明此时刻的买单较多,由于具体的交易撮合是非常迅速的,因此相邻的两轮撮合间隔的时间是相当短的,而在较短的时间间隔内,市场的行情突变(变为卖单较少买单较多)可能性非常小,因此下一轮撮合首先取队列较小的订单类型,然后根据首先取到的订单量再到另一个数据源取相当数量的另一种类型的订单的做法就比相反的做法更加有可靠,可以请求更少的数据量,耗费更少的资源;

当撮合发现某种待撮合订单队列为空时,撮合系统将根据已经连续休眠的 次数产生一个随机的休眠时间,然后撮合进入休眠;同时将休眠状态以及引起休眠的订单类型告知订单系统;撮合的休眠以1秒(因为1秒的延迟撮合不会立刻被用户所感知)为最小的可划分单元,休眠1秒后就检测订单系统是否想要唤醒自己,如果没有唤醒,则继续休眠,否则立即唤醒,进行撮合;

订单系统在每次有新订单成功下单后,立刻检测撮合系统是否休眠,如果未休眠,则不做任何处理,如果休眠,且引起休眠的订单类型与刚下单成功的订单类型一致,则发送一个唤醒消息,当撮合系统休眠一个最小不可分单元之后,将读取到唤醒消息,立刻唤醒进行撮合;

出于与第一点交易撮合的考虑,对于一轮撮合,每次向数据源请求数据时,请求数据的量选取上一轮撮合的买卖队列的量较小者的量。

以上为本发明基于队列动态变换的可休眠交易撮合方法的详细描述,更进一步地,撮合系统的具体休眠算法如图3所示。

订单系统与撮合系统构成了一个闭环结构,休眠唤醒机制确保了空闲时段内耗费资源的减少,又保证了休眠期间突然而来的用户交易请求能够迅速的得到响应,做到让用户无延迟感知,保证了良好的用户体验。

撮合系统在无交易可产生的情况下进入休眠,而休眠机制设计的休眠时间是一个随机时间值,而不是一个固定值,同时这个随机数值的产生依赖于当前已经连续休眠的次数,这样做的一个好处是可以根据不同类型的交易系统自身的特点,选用不同的随机策略来寻找适合各自交易系统自身的随机时间值产生方案。

本发明所描述的基于队列动态变换的可休眠交易撮合算法在交易时期的两类交易场景中表现的特别优秀:

1、在一段时间内某只股票、虚拟币,在市场行情信心倍增时,多头数量大幅增多,空头数量大幅减少甚至无空头(典型时期为涨停期);

2、在一段时间内某只股票、虚拟币,在市场行情信心低迷时,空头数量大幅增多,多头数量大幅减少甚至无多头(典型时期为跌停期)。

除了在上诉两种场景能够充分的发挥算法优势外,算法从数据源请求委托单的量的大小不停动态调整,使得整个交易系统在撮合效率、系统吞吐率等性 能有所提升的情况下,反而耗费了更少的带宽资源、更短的平均传输时间、达到了更高的资源有效利用率、系统显得更加智能同时更加省电,因此本发明可以在投资更少的服务器、带宽、数据库等各种资源的情况下,使得交易系统的性能依然能够得到保障。

以上所述实施例仅表达了本发明的具体实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。

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