本發(fā)明涉及金融貨幣交易領(lǐng)域,特別是一種基于隊(duì)列動(dòng)態(tài)變化的可休眠交易撮合方法。
背景技術(shù):
隨著我國金融領(lǐng)域與國際金融交匯融合,我國金融市場的變動(dòng)愈顯得變幻難測,與之相對應(yīng)的,我國的股票、期貨、現(xiàn)貨、虛擬電子貨幣等實(shí)時(shí)交易愈來愈發(fā)展快速。在當(dāng)前的技術(shù)環(huán)境下,這些實(shí)時(shí)交易系統(tǒng)在允許用戶進(jìn)行交易的時(shí)間段內(nèi),將從傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(如Oracle、mysql等)或內(nèi)存數(shù)據(jù)庫(如Redis、Memcached等)等儲存了用戶委托訂單的數(shù)據(jù)源當(dāng)中,根據(jù)特定的業(yè)務(wù)優(yōu)先原則,取出一些遵循業(yè)務(wù)優(yōu)先原則的有序買單隊(duì)列與一些有序賣單隊(duì)列進(jìn)行交易撮合,從而使得買賣雙方的交易能夠得到成交。
現(xiàn)目前的撮合系統(tǒng)在進(jìn)行撮合算法的設(shè)計(jì)時(shí),僅僅立足于撮合子系統(tǒng)本身,較為片面的只考慮如何去優(yōu)化買單與賣單隊(duì)列的數(shù)據(jù)結(jié)構(gòu),使撮合算法變得更快、更容易實(shí)現(xiàn);并未立足于一個(gè)全系統(tǒng)的架構(gòu),以及特定交易隨著時(shí)間推移而不斷變化的市場行為特征來調(diào)整撮合子系統(tǒng)的算法策略以及撮合子系統(tǒng)本身與其他子系統(tǒng)的整體交互策略。
典型的股票交易系統(tǒng)能夠發(fā)生交易的時(shí)間段是在上午9:30至11:30以及下午13:00至15:00,孤立來看可交易時(shí)段較為狹窄,用戶操作較為集中,但目前中國股票市場已有幾千只且還在不斷增多,不乏冷門股票,也不乏漲幅較大甚至漲停的股票與跌幅較大甚至跌停股票。而在股票暴漲或漲停時(shí),通常買股票的會(huì)變多,而賣股票的會(huì)變得更少,導(dǎo)致在較長時(shí)間段內(nèi)都不會(huì)有交易發(fā)生。股票跌幅較大或跌停時(shí),通常賣股票的會(huì)變多,而買股票的會(huì)變得更少,同樣也會(huì)導(dǎo)致在較長時(shí)間段內(nèi)不會(huì)有交易發(fā)生。
另一個(gè)較為典型的場景是目前非常熱門的虛擬電子貨幣(如:比特幣、萊特幣等等)交易系統(tǒng),這類系統(tǒng)的典型特征是:24小時(shí)不間斷交易,即:交易被允許可以發(fā)生在一天之內(nèi)的任意時(shí)刻點(diǎn)。但同時(shí)考慮到絕大多部分人深夜都 會(huì)休息,因此在深夜交易必然稀疏。
而在以上這些情況下,撮合系統(tǒng)其實(shí)是可以讓其處于休眠狀態(tài)的,當(dāng)有可產(chǎn)生交易行為的新訂單產(chǎn)生時(shí),再由訂單系統(tǒng)實(shí)時(shí)的喚醒撮合系統(tǒng)進(jìn)行工作即可;同時(shí)由于買單與賣單的數(shù)量是實(shí)時(shí)變化的,如:在某只股票漲幅較大時(shí),隨著追漲的能量越來越強(qiáng),買單會(huì)多余賣單,因此此刻是否可以發(fā)生交易其實(shí)主要是由賣單決定的,因此首先取出一批賣單,然后根據(jù)所取到的賣單到數(shù)據(jù)源取一批買單,在來撮合它們發(fā)生交易,就比先取買單再取賣單顯得更加合理,因?yàn)橘u單很少甚至為空,根據(jù)賣單的量再取買單時(shí)相較于先取買單后取賣單需要請求的數(shù)據(jù)與耗費(fèi)的資源更少。但是傳統(tǒng)的撮合算法并未將這些典型的市場行為特征因素考慮在內(nèi),采用固定的隊(duì)列獲取順序、固定的隊(duì)列請求大小,勢必將造成以下兩種情形的發(fā)生:
1、對數(shù)據(jù)庫的連接請求頻率變得更高,但實(shí)際上是無需請求數(shù)據(jù)或只需請求少量數(shù)據(jù),浪費(fèi)數(shù)據(jù)庫連接資源;
2、請求頻率變高的同時(shí)請求獲取買單或者賣單隊(duì)列的大小沒有動(dòng)態(tài)減小,將造成帶寬資源的浪費(fèi)。
技術(shù)實(shí)現(xiàn)要素:
基于此,針對上述問題,有必要提出一種基于隊(duì)列動(dòng)態(tài)變化的可休眠交易撮合方法,該方法將明顯減少通信請求,降低數(shù)據(jù)庫的負(fù)載,減少內(nèi)存的讀取次數(shù),節(jié)省帶寬資源,為其它后續(xù)系統(tǒng)節(jié)省不少資源,提升吞吐率。
本發(fā)明的技術(shù)方案是:一種基于隊(duì)列動(dòng)態(tài)變化的可休眠交易撮合方法,包括以下步驟:
由訂單系統(tǒng)根據(jù)用戶的買賣委托單的下單情況,分別將買單信息和賣單信息寫入到買賣單數(shù)據(jù)源;
由撮合系統(tǒng)從買賣單數(shù)據(jù)源中提取出買單隊(duì)列和賣單隊(duì)列,并進(jìn)行交易撮合;
每當(dāng)訂單系統(tǒng)發(fā)生新訂單或撮合系統(tǒng)產(chǎn)生新交易,訂單系統(tǒng)和撮合系統(tǒng)將發(fā)生一次信息更新互動(dòng)。
本發(fā)明首先由訂單系統(tǒng)根據(jù)用戶的買賣委托單下單情況,分別將買單和賣 單信息寫入買賣單數(shù)據(jù)源中,然后由撮合系統(tǒng)負(fù)責(zé)從買賣單數(shù)據(jù)源中取出買單隊(duì)列和賣單隊(duì)列進(jìn)行交易撮合,該發(fā)明還針對訂單系統(tǒng)和撮合系統(tǒng)引入了正向和反向的反饋機(jī)制,即及時(shí)消息更新互動(dòng),增加訂單系統(tǒng)和撮合系統(tǒng)的互動(dòng),使得整個(gè)系統(tǒng)變得更加流暢和合理。
優(yōu)選地,撮合系統(tǒng)撮合時(shí)的優(yōu)先權(quán)取決于從買賣單數(shù)據(jù)源取得的買單隊(duì)列和賣單隊(duì)列的大小,買單隊(duì)列和賣單隊(duì)列的大小,直接決定下一輪撮合時(shí),先取買單隊(duì)列還是先取賣單隊(duì)列。
優(yōu)選地,撮合系統(tǒng)還包括休眠喚醒功能,其具體如下:
當(dāng)前撮合中,撮合系統(tǒng)發(fā)現(xiàn)從買賣單數(shù)據(jù)源取得的待撮合買單隊(duì)列為空,或帶撮合賣單隊(duì)列為空,則設(shè)定撮合系統(tǒng)進(jìn)入休眠期;
撮合系統(tǒng)處于休眠期狀態(tài),且未接收到訂單系統(tǒng)的喚醒信號,當(dāng)休眠時(shí)間超過設(shè)定時(shí)間,撮合系統(tǒng)自動(dòng)恢復(fù)活躍狀態(tài);
撮合系統(tǒng)處于休眠期狀態(tài),接收到訂單系統(tǒng)發(fā)生新訂單發(fā)送的喚醒信號,則撮合系統(tǒng)恢復(fù)活躍狀態(tài)。
由于本發(fā)明的訂單系統(tǒng)與撮合系統(tǒng)構(gòu)成了一個(gè)閉環(huán)結(jié)構(gòu),休眠喚醒的機(jī)制確保了空閑時(shí)段內(nèi)耗費(fèi)資源的減少,又保證了休眠期間突然而來的用戶交易請求能夠迅速的得到響應(yīng),做到讓用戶無延遲感知,保證了良好的用戶體驗(yàn)。
優(yōu)選地,設(shè)定撮合系統(tǒng)的休眠期為系統(tǒng)隨機(jī)生成的時(shí)間段,撮合系統(tǒng)在無交易可產(chǎn)生的情況下進(jìn)入休眠,而休眠機(jī)制的休眠時(shí)間是一個(gè)隨機(jī)時(shí)間值,而不是一個(gè)固定值,同時(shí)這個(gè)隨機(jī)數(shù)值的產(chǎn)生依賴于當(dāng)前已經(jīng)連續(xù)休眠的次數(shù),這樣做的一個(gè)好處是可以根據(jù)不同類型的交易系統(tǒng)自身的特點(diǎn),選用不同的隨機(jī)策略來尋找適合各自交易系統(tǒng)自身的隨機(jī)時(shí)間值產(chǎn)生方案。
優(yōu)選地,設(shè)定訂單系統(tǒng)在每次發(fā)生新訂單時(shí),啟動(dòng)檢測模塊檢測撮合系統(tǒng)是否休眠,如果未休眠,則不做任何處理,如果休眠,且引起休眠的訂單類型與剛下單成功的訂單類型一致,則發(fā)送一個(gè)喚醒消息,當(dāng)撮合系統(tǒng)休眠一個(gè)最小不可分單元之后,將讀取到喚醒消息,立即喚醒進(jìn)行撮合。
優(yōu)選地,設(shè)定撮合系統(tǒng)每一輪的撮合將動(dòng)態(tài)變換撮合隊(duì)列的順序。
優(yōu)選地,設(shè)定當(dāng)前動(dòng)態(tài)變換的買單隊(duì)列大小和賣單隊(duì)列大小取決于上一輪 的買單隊(duì)列大小和賣單隊(duì)列大小,對于每一輪撮合時(shí),每次向買賣單數(shù)據(jù)源請求數(shù)據(jù)時(shí),請求數(shù)據(jù)的量選取上一輪撮合的買賣隊(duì)列的量較小者的量。
優(yōu)選地,設(shè)定優(yōu)先獲取的隊(duì)列類型為待撮合買單隊(duì)列和待撮合賣單隊(duì)列的長度更小者的類型。
本發(fā)明的有益效果是:
(1)本發(fā)明建立在兩個(gè)連續(xù)相鄰時(shí)刻點(diǎn)具有強(qiáng)相似性,但即使在某一個(gè)固定時(shí)刻點(diǎn)的行情急速變化后,本算法也能夠在最多通過一輪的撮合時(shí)間延遲后,迅速跟進(jìn)變化,調(diào)整撮合策略;
(2)訂單系統(tǒng)與撮合系統(tǒng)構(gòu)成了一個(gè)閉環(huán)結(jié)構(gòu),休眠喚醒機(jī)制確保了空閑時(shí)段內(nèi)耗費(fèi)資源的減少,又保證了休眠期間突然而來的用戶交易請求能夠迅速的得到響應(yīng),做到讓用戶無延遲感知,保證了良好的用戶體驗(yàn);
(3)撮合系統(tǒng)在無交易可產(chǎn)生的狀態(tài)進(jìn)入休眠,降低數(shù)據(jù)庫的負(fù)載,減少內(nèi)存的讀取次數(shù),同時(shí)還節(jié)約帶寬資源;
(4)向數(shù)據(jù)源動(dòng)態(tài)變換請求買賣單隊(duì)列量的大小,可以保證每次盡量請求盡量少的必要數(shù)據(jù),從而不占據(jù)過多帶寬,消耗過多的資源。
附圖說明
圖1是本發(fā)明實(shí)施例所述的撮合策略系統(tǒng)結(jié)構(gòu)圖;
圖2是傳統(tǒng)撮合策略系統(tǒng)結(jié)構(gòu)圖;
圖3是本發(fā)明實(shí)施例的休眠子流程圖。
具體實(shí)施方式
下面結(jié)合附圖對本發(fā)明的實(shí)施例進(jìn)行詳細(xì)說明。
實(shí)施例:
一種基于隊(duì)列動(dòng)態(tài)變化的可休眠交易撮合方法,如圖1所示,包括以下步驟:
步驟一,由訂單系統(tǒng)根據(jù)用戶的買賣委托單的下單情況,分別將買單信息和賣單信息寫入到買賣單數(shù)據(jù)源;
步驟二,由撮合系統(tǒng)從買賣單數(shù)據(jù)源中提取出買單隊(duì)列和賣單隊(duì)列,并進(jìn)行交易撮合;
步驟三,每當(dāng)訂單系統(tǒng)發(fā)生新訂單或撮合系統(tǒng)產(chǎn)生新交易,訂單系統(tǒng)和撮合系統(tǒng)將發(fā)生一次信息更新互動(dòng)。
由于傳統(tǒng)的撮合系統(tǒng)并未考慮到背景技術(shù)所述的各種因素,本發(fā)明所述的撮合策略有以下幾點(diǎn)調(diào)整:
首先,基于當(dāng)前一輪的撮合算法,從數(shù)據(jù)源取得的買單隊(duì)列與賣單隊(duì)列的大小,決定下一輪撮合時(shí),先取買單隊(duì)列還是先取賣單隊(duì)列;
其次,在當(dāng)前一輪的撮合中,若是發(fā)現(xiàn)從數(shù)據(jù)源取得的待撮合買單隊(duì)列為空或者賣單隊(duì)列為空,則休眠撮合系統(tǒng)一個(gè)隨機(jī)的時(shí)間段;
再次,撮合子系統(tǒng)除了由于休眠時(shí)間足夠之后自動(dòng)喚醒外,在訂單子系統(tǒng)中增加實(shí)時(shí)喚醒撮合子系統(tǒng)的機(jī)制;
最后,除了動(dòng)態(tài)變換每一輪撮合隊(duì)列的順序以外,同時(shí)也根據(jù)上一輪的買單隊(duì)列與賣單隊(duì)列大小動(dòng)態(tài)調(diào)整下一輪請求的隊(duì)列大小。
傳統(tǒng)的撮合系統(tǒng)如圖2所示,對比圖1和圖2可以發(fā)現(xiàn),在本發(fā)明之前,首先由訂單系統(tǒng)根據(jù)用戶的買賣委托單下單情況,分別將買單與賣單信息寫入到買單數(shù)據(jù)源與賣單數(shù)據(jù)源,然后由撮合系統(tǒng)負(fù)責(zé)從買賣單的數(shù)據(jù)源中取出買單隊(duì)列與賣單隊(duì)列進(jìn)行交易的撮合,訂單系統(tǒng)與撮合系統(tǒng)僅僅是簡單的生產(chǎn)者與消費(fèi)者的關(guān)系。
而由圖1可以得出,本發(fā)明中所描述的撮合策略將引入正向和反向的反饋機(jī)制,增加訂單系統(tǒng)與撮合系統(tǒng)的互動(dòng),以使得整個(gè)系統(tǒng)變得更加流暢和合理。
進(jìn)一步地,根據(jù)圖1的系統(tǒng)結(jié)構(gòu)圖可以得出:
對于每一輪的交易撮合,如果當(dāng)前取得的待撮合買單隊(duì)列小于賣單隊(duì)列,那么說明此時(shí)刻的買單較多,由于具體的交易撮合是非常迅速的,因此相鄰的兩輪撮合間隔的時(shí)間是相當(dāng)短的,而在較短的時(shí)間間隔內(nèi),市場的行情突變(變?yōu)橘u單較少買單較多)可能性非常小,因此下一輪撮合首先取隊(duì)列較小的訂單類型,然后根據(jù)首先取到的訂單量再到另一個(gè)數(shù)據(jù)源取相當(dāng)數(shù)量的另一種類型的訂單的做法就比相反的做法更加有可靠,可以請求更少的數(shù)據(jù)量,耗費(fèi)更少的資源;
當(dāng)撮合發(fā)現(xiàn)某種待撮合訂單隊(duì)列為空時(shí),撮合系統(tǒng)將根據(jù)已經(jīng)連續(xù)休眠的 次數(shù)產(chǎn)生一個(gè)隨機(jī)的休眠時(shí)間,然后撮合進(jìn)入休眠;同時(shí)將休眠狀態(tài)以及引起休眠的訂單類型告知訂單系統(tǒng);撮合的休眠以1秒(因?yàn)?秒的延遲撮合不會(huì)立刻被用戶所感知)為最小的可劃分單元,休眠1秒后就檢測訂單系統(tǒng)是否想要喚醒自己,如果沒有喚醒,則繼續(xù)休眠,否則立即喚醒,進(jìn)行撮合;
訂單系統(tǒng)在每次有新訂單成功下單后,立刻檢測撮合系統(tǒng)是否休眠,如果未休眠,則不做任何處理,如果休眠,且引起休眠的訂單類型與剛下單成功的訂單類型一致,則發(fā)送一個(gè)喚醒消息,當(dāng)撮合系統(tǒng)休眠一個(gè)最小不可分單元之后,將讀取到喚醒消息,立刻喚醒進(jìn)行撮合;
出于與第一點(diǎn)交易撮合的考慮,對于一輪撮合,每次向數(shù)據(jù)源請求數(shù)據(jù)時(shí),請求數(shù)據(jù)的量選取上一輪撮合的買賣隊(duì)列的量較小者的量。
以上為本發(fā)明基于隊(duì)列動(dòng)態(tài)變換的可休眠交易撮合方法的詳細(xì)描述,更進(jìn)一步地,撮合系統(tǒng)的具體休眠算法如圖3所示。
訂單系統(tǒng)與撮合系統(tǒng)構(gòu)成了一個(gè)閉環(huán)結(jié)構(gòu),休眠喚醒機(jī)制確保了空閑時(shí)段內(nèi)耗費(fèi)資源的減少,又保證了休眠期間突然而來的用戶交易請求能夠迅速的得到響應(yīng),做到讓用戶無延遲感知,保證了良好的用戶體驗(yàn)。
撮合系統(tǒng)在無交易可產(chǎn)生的情況下進(jìn)入休眠,而休眠機(jī)制設(shè)計(jì)的休眠時(shí)間是一個(gè)隨機(jī)時(shí)間值,而不是一個(gè)固定值,同時(shí)這個(gè)隨機(jī)數(shù)值的產(chǎn)生依賴于當(dāng)前已經(jīng)連續(xù)休眠的次數(shù),這樣做的一個(gè)好處是可以根據(jù)不同類型的交易系統(tǒng)自身的特點(diǎn),選用不同的隨機(jī)策略來尋找適合各自交易系統(tǒng)自身的隨機(jī)時(shí)間值產(chǎn)生方案。
本發(fā)明所描述的基于隊(duì)列動(dòng)態(tài)變換的可休眠交易撮合算法在交易時(shí)期的兩類交易場景中表現(xiàn)的特別優(yōu)秀:
1、在一段時(shí)間內(nèi)某只股票、虛擬幣,在市場行情信心倍增時(shí),多頭數(shù)量大幅增多,空頭數(shù)量大幅減少甚至無空頭(典型時(shí)期為漲停期);
2、在一段時(shí)間內(nèi)某只股票、虛擬幣,在市場行情信心低迷時(shí),空頭數(shù)量大幅增多,多頭數(shù)量大幅減少甚至無多頭(典型時(shí)期為跌停期)。
除了在上訴兩種場景能夠充分的發(fā)揮算法優(yōu)勢外,算法從數(shù)據(jù)源請求委托單的量的大小不停動(dòng)態(tài)調(diào)整,使得整個(gè)交易系統(tǒng)在撮合效率、系統(tǒng)吞吐率等性 能有所提升的情況下,反而耗費(fèi)了更少的帶寬資源、更短的平均傳輸時(shí)間、達(dá)到了更高的資源有效利用率、系統(tǒng)顯得更加智能同時(shí)更加省電,因此本發(fā)明可以在投資更少的服務(wù)器、帶寬、數(shù)據(jù)庫等各種資源的情況下,使得交易系統(tǒng)的性能依然能夠得到保障。
以上所述實(shí)施例僅表達(dá)了本發(fā)明的具體實(shí)施方式,其描述較為具體和詳細(xì),但并不能因此而理解為對本發(fā)明專利范圍的限制。應(yīng)當(dāng)指出的是,對于本領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明構(gòu)思的前提下,還可以做出若干變形和改進(jìn),這些都屬于本發(fā)明的保護(hù)范圍。