本發明涉及金融(股票交易)以及計算機技術領域,特別涉及一種利用紅黑樹索引提高交易系統撮合效率的方法及系統。
背景技術:
目前的金融、股票軟件能夠為用戶提供行情顯示、行情分析和行情交易的平臺,其中就包括了模擬交易系統。模擬交易系統通過模擬用戶的操作,處理用戶的委托單,進而幫助客戶完成交易。
一個模擬交易系統是否可用最重要的衡量指標是:單位時間內用戶委托單的撮合效率。這主要體現在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)等。
在本說明書的描述中,參考術語“一個實施例”、“一些實施例”、“示例”、“具體示例”、或“一些示例”等的描述意指結合該實施例或示例描述的具體特征、結構、材料或者特點包含于本發明的至少一個實施例或示例中。在本說明書中,對上述術語的示意性表述不一定指的是相同的實施例或示例。而且,描述的具體特征、結構、材料或者特點可以在任何的一個或多個實施例或示例中以合適的方式結合。
總體而言,本公開的各種實施例可以以硬件或專用電路、軟件、邏輯或其任意組合實施。一些方面可以以硬件實施,而其它一些方面可以以固件或軟件實施,該固件或軟件可以由控制器、微處理器或其它計算設備執行。雖然本公開的各種方面被示出和描述為框圖、流程圖或使用其它一些繪圖表示,但是可以理解本文描述的框、設備、系統、技術或方法可以以非限制性的方式以硬件、軟件、固件、專用電路或邏輯、通用硬件或控制器或其它計算設備或其一些組合實施。
此外,雖然操作以特定順序描述,但是這不應被理解為要求這類操作以所示的順序執行或是以順序序列執行,或是要求所有所示的操作被執行以實現期望結果。在一些情形下,多任務或并行處理可以是有利的。類似地,雖然若干具體實現方式的細節在上面的討論中被包含,但是這些不應被解釋為對本公開的范圍的任何限制,而是特征的描述僅是針對具體實施例。在分離的一些實施例中描述的某些特征也可以在單個實施例中組合地執行。相反對,在單個實施例中描述的各種特征也可以在多個實施例中分離地實施或是以任何合適的子組合的方式實施。