1. 程式人生 > >【行情服務設計】文軌未一,何以制六合? —— 談談滬深市場行情資料的單位問題

【行情服務設計】文軌未一,何以制六合? —— 談談滬深市場行情資料的單位問題

筆者最近接手的專案是實現中國證券市場實時行情資料解析及推送服務,功能主要針對的滬深A股、股指、中小板、創業板和基金債券的盤中實時行情資料,其中的推送服務需要相容既有系統實現。

對這部分業務有了解的同學應該知道其中的艱辛:那真是一入宮門深似海,再回首已百年身。每當我驚駭於兩所(滬深交易所,下同)對於相同的業務資料給出完全不同的資料定義時,可敬的業務達人就會笑容可掬地告訴我一長串歷史掌故、一系列系統變遷究竟是怎樣塑造了當前的現實;而每當我表達絕望之情時,業務達人們還會寬慰地鼓勵我說:“別灰心嘛,在碼農裡面你絕對算是業務知識豐富的,你至少已經掌握了全部業務知識的……0.1%啦”。

以兩所定義的“指數當前成交量”為例:

滬市中是指數行情訊息UA3113中的對應欄位387,TotalVolumeTraded,參與計算相應指數的交易數量,單位手:

對這個欄位的描述如下:

摘自上證資源配置檔案template.2.13.xml

深市中是對應欄位是指數快照行情309011或者成交量統計指標快照行情309111(為啥有兩個?別問,都是辛酸淚。自己百度置換指數吧……也許過幾天有功夫能細聊下)中的對應欄位TotalVolumeTrade,成交總量,單位股:

對這個欄位的描述如下:

摘自《深圳證券交易所Binary行情資料介面規範》P28,下載地址鏈同上

摘自《深圳證券交易所Binary行情資料介面規範》P24,下載地址鏈同上

好了總結一下,對於同一資料“指數當前成交量”:

滬市的定義是int64,單位手(100股)其中末尾5位為小數(前面2位小數表達股數);

深市的定義是int64,單位股,總長15位(不知道在int64型別約定下限定總長15位有何意義……),其中末尾2位為小數。

PS: 順便吐槽一下我們專案需要相容的“前輩”實時行情資料推送系統。在處理“指數當前成交量”時,這位“前輩”既不考慮資料精度,也不考慮單位統一,而是簡單粗暴地截斷所有小數,導致精度喪失;同時保留了兩市資料的不同單位,把確定資料單位的工作甩鍋給下游的資料消費者。個人認為這樣的實現有違一個行情資料解碼、推送服務應有的初衷:1. 無損地忠實於源資料; 2. 資料模型的整合統一;所以這種現狀實在是應該改變的“陋規”。