前言:尋找寫作靈感?中文期刊網用心挑選的證券交易接口數據交換分析,希望能為您的閱讀和創作帶來靈感,歡迎大家閱讀并分享。
1證券交易接口數據是指行情、訂單、成交、參考數據、盤后數據等的證券交易相關信息,它具有產生量大、對實時性傳輸要求高的特點.為保證交易信息高可用、可審計,以及處理上的方便,諸如衛星行情等的一些證券交易接口往往采用DBF、XML等格式的文件作為數據交換的格式.但這類文件的信息冗余度較高,影響了傳輸帶寬的有效利用率和傳輸速度.此外,根據不同的傳輸協議,接口文件往往需要分成分段來進行傳輸,接收方必須收齊所有分段才能獲得所含的記錄信息,若有分段丟失則會引起整個文件的重傳,這不僅造成了帶寬的浪費,也影響了信息交換的速度.盡管可以通過使用ZIP等通用的壓縮工具對接口文件進行壓縮來解決信息冗余度高的缺陷,但文件分段拼接等待和丟失重傳影響傳輸速度的問題仍然無法解決. FAST(FIXAdaptedforStreaming,適流FIX)[1]是一種面向消息數據流的二進制編碼方法,它是2005年由全球主要交易所和金融企業聯盟組織FPL所提出的、針對證券交易業通行的金融信息消息協議FIX[2]的一套壓縮和傳輸方法. FAST針對FIX消息的格式設計,在將FIX消息流序列化為字節流的過程中利用消息數據間的邏輯關系來對FIX消息所含的數據字段進行編碼,可在FIX消息的基礎上獲得高達70-80%的壓縮率.FAST協議對消息的處理開銷很小,一般在數個微秒內即可完成對一條消息的編、解碼.此外,FAST還具有簡單、易實現的優點,其最新的擴展版本[3]FAST1.2于2009年被提出. 為解決前述現有文件類證券交易接口的問題,本文提出基于擴展FAST的文件類證券交易數據高速交換方法-Fast-File.文件類證券交易接口數據一般由相同格式的多行記錄構成,FastFile將接口文件中的每行記錄映射為一條消息,使用FAST對每條記錄所含的字段逐一進行編解碼,這樣可通過利用記錄之間數據的邏輯聯系來降低數據冗余度.由于Fast-File的編碼粒度是基于一條記錄的,因此即便只是收到編碼文件的分段,也可對其進行FAST的解碼,從而恢復出所含部分的記錄,這可使已收到分段的記錄能被快速地傳輸.本文設計并實現了擴展FAST和FastFile方法,通過實驗與多種常用的接口文件格式進行了測試比較,并與幾種通用的壓縮工具進行了壓縮率比較.實驗結果表明FastFile除按照每行記錄為單位進行編解碼,可降低重傳外,可大大降低現有文件接口的數據大小:比DBF小約70%、比XML小95%.即使與通用的壓縮算法相比,FastFile在數據壓縮率上也相當接近,如果FastFile疊加使用通用壓縮方法則可以達到更高的壓縮率.實驗結果驗證了FastFile方法的可行性與有效性. 2證券交易接口系統及接口數據 證券交易接口系統主要負責通過衛星和地面網絡等各種通信介質在電子交易主機,市場參與者、登記結算單位、外部交易所等外部系統,以及監察、行情分發等周邊系統之間進行證券交易服務過程中交易相關信息(也即接口數據)的交換. 對于證券交易所這種集中化的交易方式,電子化交易的發生時間集中、數據密集,在每一交易日內交易所往往能產生數十吉字節的大量接口數據.據估計,全球股票和期權市場日均產生的消息量將從2007年的七十多億條猛增至2010年的一千兩百多億條[4].考慮到這些數據將被進一步分發到成百上千的內部和外部用戶,帶寬占用的總量十分地龐大. 眾所周知,證券交易接口數據的交換與一般信息通信系統的信息交換不同,對速度具有極高的要求.近年來,國際、國內資本市場獲得高速發展,資本流動性急劇增大,隨之帶來與日俱增的交易量、高頻交易的大量使用,都使得降低交易延遲的需求凸現出來.事實上,交易指令延遲時間及運行性能的問題已成為各證券交易所目前最大的技術挑戰[5].為此,全球交易所紛紛采取措施降低交易延遲.其中,納斯達克OMX在2009年以250微秒的交易延遲成為世界上最快的交易所. 由于市場發展水平和技術應用環境不同,各交易所采用了不同的接口實現方式,這包括:文件接口、數據庫接口、API程序接口、消息協議接口等.典型的證券交易接口包括開放協議FIX、Euronext的MMTP、Xetra的VALUES、納斯達克的CTCI、NWII、以及QIX等[6].其中,為保證接口數據的高可用、和/或業務過程的可審計,某些證券交易接口數據往往需要以文件的形式"落地"到外存中進行可持久性存儲后再進行發送.同時,為處理上的方便,一般采用TXT、DBF、XML等標準格式的文件來進行存儲.以我國的上海證券交易所和深圳證券交易所為例,各自公開的數十種市場參與者接口均使用了基于數據庫文件的DBF接口. 然而,DBF、XML、文本等文件格式本身沒有考慮對于存儲空間的節省,如果若按照這類格式來表示數據,信息的冗余度比較高,在傳輸時這會導致帶寬的有效利用率不高,從而造成浪費,這對于我國帶寬資源受限且發展欠均衡的證券市場網絡技術條件來說尤為不佳. 其次,在證券交易接口數據傳輸的過程中,由于傳輸協議的限制,接口文件往往會被分割成多個分段進行傳輸.譬如在基于UDP傳輸協議的網絡條件下,往往采用64KB大小來分段文件,在因特網上可能按4k、8k等較小的粒度來進行文件分段,而在局域網上則可能以更大的尺寸來進行分段.但是,按照現有的接口文件的數據交換模式,接收方必須要等到收齊所有文件分段之后,才能進行拼裝和驗證,從而獲得所含的記錄信息,這首先會引起等待的時間開銷.其次,如果在傳輸中文件分段丟失,則依據具體實現,會引起對丟失分段甚至所有分段的重傳,由這種重傳所造成的延遲則可能更大,進一步加重了文件分段帶來的延遲問題. 對現有方法冗余度高的一種可能的改進方法如圖2.該方法借助ZIP、RAR、ARJ等無損的通用壓縮工具來進行文件壓縮,降低文件接口數據冗余度,但這仍然無法解決由文件分段傳輸所帶來的延遲問題. 3基于擴展FAST的文件接口數據交換方法 FAST是FPL在1995年提出的、針對FIX消息流的一種壓縮和傳輸方法.FIX消息流消息一般由消息頭、消息體和消息尾三部分組成,其中每部分由"tag=value"加分隔符的基本字段格式組成,其中消息尾為兩個字節的驗證碼.FAST針對FIX消息,在將FIX消息流序列化為字節流的過程中,通過"字段編碼"和"傳輸編碼"的處理來利用消息數據間的邏輯關系,將字段數據編碼為二進制字節流,通過這樣的處理可以大大降低字段所含數據的冗余度.譬如對于序號類別的字段來說,可以使用"遞增"的規律來總結字段數據的邏輯聯系,這樣就無需在傳輸每條消息時都對該字段數據內容進行發送.#p#分頁標題#e# 又如,對于ASCII文本表示的整數類型字段,FAST會按照整數的二進制表達形式來進行傳輸的編碼,這樣可以提高單位數據的有效信息量. 文件類證券交易接口數據具有結構化高、數據規律性強的特點,通常由幾十到數百字節的格式相同或相似的多行記錄構成.譬如行情接口文件,其所包括的每條記錄包含了證券代碼、簡稱、今開盤價、昨收盤價、買/賣五檔價格、最新成交價格等幾十個字段.FastFile將接口數據文件中的每行記錄映射為一條消息,并為格式相同的記錄編制FAST模版,這樣可以按照處理FIX消息的方式來處理文件中的記錄.對證券交易等實時性要求較強的應用,應盡力而為地加快信息的傳輸速度,即使丟失分段的數據必須重傳才能獲得,對已收到的記錄也需盡快傳送.由于FastFile的編碼粒度是基于一條記錄的,而且類似于FIX,FastFile的發送方在編碼時在每條記錄的尾部都加上兩字節的檢驗碼,因此即便接收方只是收到接口文件的分段,也可對其進行FAST的解碼,從而恢復出該分段所含部分的記錄信息.此外,為進一步降低分段的信息冗余度,可選地,FastFile引擎中還可以調用通用的壓縮方法來對分段進行壓縮,也即FastFile-Z方法.FastFile-Z雖然可以獲得少許比FastFile高的壓縮率,但也帶來了時間處理上的開銷,具體應用需要根據業務對時間的要求來考慮使用. 在發送一個接口文件時,FastFile引擎首先初始化一個分段緩沖區,其大小如前所述需要根據具體使用的傳輸協議預先設定,然后在重置FAST字典的狀態以后開始對分段的組段處理:FastFile按行從文件中讀入記錄、添加校驗,再按照模版對記錄進行編碼,編碼后的記錄追加到分段緩沖區,如果緩沖區已滿或超時,則該分段的組段過程結束,輸出組好的分段,如果還有未處理記錄則循環進行上述組段過程,直到文件結束.接收方的處理與此對應,不作贅述. 4FastFile基于擴展FAST的文件分段編解碼為確保FAST編解碼的能夠正確進行,FastFile的發送方和接收方必須使用相同的模版集合,而且在編解碼時必須保證發送方和接收方模版狀態的一致,也即,模版所含字典的字段狀態和字段前值的一致.模版狀態的一致性機制的實現依賴于具體使用的傳輸協議:如果傳輸層是可靠的,則可以使用標準的FAST會話協議[7]來實現;如果傳輸層不可靠,則不論是發送方編碼器還是接收方的解碼器,在處理一個分段之前模版的狀態都需要被重置,以保證FAST連續編解碼的正確. 與FAST對FIX消息編解碼的情況類似,FastFile在FAST模版中為每個字段定義字段的數據類型、tag號以及字段的邏輯運算符,從而可以利用FAST極佳的壓縮能力來降低數據冗余度. 如前所述,FAST的編解碼必須借助于一套FAST模版集來進行.其中,一個模版包括了一系列指令(instruction),指令的順序與流中數據的順序一致.如下頁圖6所示,FastFile的擴展FAST編解碼引擎借助一個全靜態的模版集結構來表示模版集并進行編解碼:對該結構的一次遍歷對應FAST對一條消息的一次編碼處理或解碼處理.其中,使用靜態指針來串聯屬于模版中同一層次的指令的節點. 整數類型的字段用int類型來描述,分為帶符號整數類型和無符號類型兩種,可使用拷貝(copy)、差值(delta)、缺省(default)、常值(constant)等運算符或無運算符來描述字段數據流的邏輯特性,其中無符號整數還可以使用遞增(incre-ment)運算符來描述序號類的字段. 字符串類型的字段用string類型來描述,分為ASCII碼字符串和Unicode字符串兩種,可使用拷貝、差值、缺省、常值、換尾(tail)等運算符.其中差值運算符適合具有相同子串的字段,換尾操作符適合長度固定,一般只有尾部子串發生變化的字段,比如各種格式的時間.值得注意的是,Unicode子串均為UTF-8類型,適合具有多國語言或不同符號集的字段,為便于與其他特殊字符作區別,Unicode字段的編碼需要加上一個無符號整數的長度前導.對無法用這兩種字符串表示的無格式數據可以使用byteVector類型來描述. 浮點類字段用decimal的字段類型來表示,編碼時分別用帶符號的兩個整數分別來表示浮點數的底數和指數,這樣可使得浮點數的表示范圍擴展到ISA所支持的最大位數.浮點類型可使用拷貝、差值、缺省、常值等運算符. 在FAST的最初版本中,除字節向量外的上述幾種基本數據類型用停止位實體(StopBitEntity)來編碼,其最小的編碼單位為字節.為達到更高的壓縮率,FPL在最新的FAST擴展版本中增加了短整型、枚舉、集合、布爾、位元組等數據類型.其中,短整型用來描述那些表示范圍占用空間不超過1個字節的字段.枚舉和布爾類型都使用占最少比特的無符號整數來編碼.位元組用來將這些最大占用空間不超過1字節的數據類型字段填充到同一個SBE中.上述對字段數據類型的增強使得FAST擴展版本可以達到比FAST1.1更優的壓縮效果,多個異構字段的數據甚至只需用1個字節就可以全部表示. 5實現及測試結果 基于標準C實現了FAST擴展協議編解碼引擎FASTX和FastFile原型,通過實驗對FastFile方法以及多種常用接口的數據尺寸做了比較,還比較了幾種編碼和壓縮方案的數據壓縮率. 實驗1選取2010年6月10日的滬深股市股本信息數據,剔除少量空字段記錄后共1791行記錄,每行記錄對應一種證券,一條記錄包含18個字段,具體為{‘代碼’,‘名稱’,‘今開’,‘最高’,‘最低’,‘最新’,‘漲跌’,‘漲跌幅’,‘成交量’,‘成交金額’,‘換手率’,‘年初至今漲跌幅’,‘5日漲跌幅’,‘每股收益(TTM)’,‘市盈率(TTM)’,‘市凈率(MRQ)’,‘所屬行業’,‘時間’},加上檢驗共19個字段.其中,應用類型包括Ascii字符串、浮點數、64位長無符號整數,無符號整數、Unicode字符串,模版中使用了換尾等操作符,但主要使用差值操作符.#p#分頁標題#e# 實驗結果如圖7所示,其中,DBF文件占493K字節,Ex-cel與之基本相當,Ascii文本文件為200K字節,相對較小,最大的XML超過了3M字節.相較之下,數據格式最小的是113K字節的FastFile,每條記錄平均僅占63字節. 實驗2選取2010年6月11日的滬市A股上市公司概覽數據,剔除少量空字段記錄后共832行記錄,每行記錄對應一種證券,記錄格式為{‘證券代碼’,‘證券簡稱’,‘總股本’,‘流通A股’,‘大股東持股數量’,‘大股東持股比例’,‘股東戶數’,‘機構持股數量合計’,‘月成交量’,‘月成交額’,‘月收盤價’,‘市盈率(PE)’,‘總市值’,‘每股收益EPS’,‘資產總計’},加上檢驗共16個字段.實驗以未壓縮的DBF文件為基準,以相同數據按照不同編碼+壓縮方案處理后的文件大小來計算數據壓縮率,結果如上頁圖8所示.其中,FastFile處理后每條記錄平均為75字節.可以看到的是,FastFile除了具備按照每行的記錄進行編解碼的特性之外,在數據壓縮率上也相當接近于通用的無損壓縮算法,如果按照FastFile-Z方法對Fast-File編碼文件再行壓縮,則壓縮率上還可有小幅提高. 6結束語 本文提出一種基于擴展FAST的證券交易接口文件的高速交換方法-FastFile.FastFile抽取接口文件中的每行記錄并映射為一條消息,再利用擴展FAST對消息進行編碼.由于FastFile是以記錄為處理粒度的,因此即使接收方只是收到原始數據文件的部分分段,也可從中解析出記錄,這有效地解決了原有方法中接收方必須收齊所有文件分段才能解析內容而影響信息傳輸速度的問題.同時,利用擴展FAST高效的壓縮算法,可大大降低接口數據大?。畬τ诩惺降淖C券交易來說,FastFile不僅可加快信息的交換速度,而且可以大大節省整個分發網絡的帶寬資源. 我們設計并實現了擴展FAST協議和FastFile方法,通過實驗與多種常用接口格式進行了測試比較,并比較了幾種編碼和壓縮方案.實驗結果表明FastFile在按記錄編解碼的特性外,可大大降低接口數據的信息冗余度,在數據壓縮率上也相當接近于通用的壓縮算法,如果與通用壓縮算法疊加使用,則壓縮效果更佳. 由于FastFile需要根據數據的規律抽象出FAST模版,因此適于應用于業務數據結構化程度高、規律性強、數字類數據多,以及對傳輸速度有較高要求、帶寬資源較稀缺的應用場合,也可適當修改后用于數據的備份和保存.