復雜因子秒級計算,文諦資產(chǎn)的數(shù)據(jù)庫選型方案

文諦資產(chǎn)首席策略官劉一夫、首席框架官吳永華、首席數(shù)據(jù)分析師王哲

上海文諦資產(chǎn)管理有限公司(以下簡稱“文諦資產(chǎn)”)秉持理性、務實、高效、專業(yè)的投資精神,憑借科學的量化投資戰(zhàn)略、先進的量化交易技術(shù)和成熟的風險管理能力深耕量化領(lǐng)域,以創(chuàng)造長期穩(wěn)定收益為投資目標,為國內(nèi)外投資者和合作機構(gòu)提供專業(yè)的投資服務。文諦資產(chǎn)業(yè)務持續(xù)保持穩(wěn)健發(fā)展,公司主要從事CTA和股票的量化策略研究與運作。

大數(shù)據(jù)技術(shù)的飛速發(fā)展為量化投資注入了新鮮活力,隨著數(shù)據(jù)挖掘工具的更迭換代,各大投資機構(gòu)也在不斷夯實自身的數(shù)據(jù)處理和分析能力。文諦資產(chǎn)作為量化統(tǒng)計及應用數(shù)學領(lǐng)域的投顧專家,在存儲、計算和分析大量時間序列數(shù)據(jù)的過程中,選擇了高性能的分布式時序數(shù)據(jù)庫DolphinDB作為強有力的研究工具。在合作的三年間,DolphinDB為文諦資產(chǎn)提供了集數(shù)據(jù)庫、分布式計算和編程建模于一體的專業(yè)服務。本文由文諦資產(chǎn)的首席策略官劉一夫、首席框架官吳永華、首席數(shù)據(jù)分析師王哲共同撰寫,分享關(guān)于DolphinDB的使用場景、使用效果、技術(shù)服務、選型過程和學習經(jīng)驗。

1.使用場景

我們主要在行情存儲、因子挖掘和模型回測三方面用到了DolphinDB。

1.1行情存儲

在行情存儲方面,我們主要使用DolphinDB進行數(shù)據(jù)的入庫、清洗與查詢。

在存儲數(shù)據(jù)時,我們借助DolphinDB的分布式特性,通過提前確定好數(shù)據(jù)導入的分區(qū)字段與分區(qū)粒度,提高后續(xù)數(shù)據(jù)檢索與分析的效率。比如在查詢數(shù)據(jù)時,DolphinDB會以分區(qū)字段為數(shù)據(jù)過濾,通過SQL引擎快速定位要查找的數(shù)據(jù)塊,從而避免對整張表進行掃描,這極大提高了查詢速度。此外,為方便后續(xù)的數(shù)據(jù)分析工作,我們會使用DolphinDB對海量時序數(shù)據(jù)進行高效清洗,找出并消除殘缺、錯誤或重復的數(shù)據(jù),進而輸出一份高質(zhì)量的、滿足業(yè)務需求的數(shù)據(jù)。相比其他數(shù)據(jù)清洗工具隨著數(shù)據(jù)量的增大自身性能會下降的情況,DolphinDB在實際應用中能夠保持穩(wěn)定性能。

1.2因子挖掘

在因子挖掘方面,我們主要使用DolphinDB處理數(shù)據(jù)量龐大、運算復雜的工作任務。

目前我們處理的總數(shù)據(jù)量大概在幾十TB,每日新增數(shù)據(jù)約為70GB。在使用過程中,我們不僅會用到DolphinDB高速存取數(shù)據(jù)的基本功能,同時會用到其內(nèi)置的多范式編程語言與多種計算引擎。

比如在處理一些tick數(shù)據(jù)時,我們會使用DolphinDB完成前期的一些運算,然后通過Python API,將計算結(jié)果導入Python模型進行組合。其中我們會用到DolphinDB的流計算框架,進行流數(shù)據(jù)的發(fā)布、訂閱、預處理、實時內(nèi)存計算以及復雜指標計算等。以DolphinDB內(nèi)置的時間序列聚合引擎為例,僅需設定幾個參數(shù)指標,配合wsum、corr等聚合函數(shù)的使用,就可以快速便捷地實現(xiàn)復雜的滑動時間窗口聚合計算。

1.3模型回測

在模型回測方面,我們會用到DolphinDB提供的函數(shù)接口、元編程和計算框架,根據(jù)這些現(xiàn)有的方法和框架來進行高效回測。

一些現(xiàn)成函數(shù)如context by、crossStat等的使用可以幫助我們大大提升數(shù)據(jù)處理、特別是編程的工作效率。例如context by,該函數(shù)作為DolphinDB的獨創(chuàng)功能可以實現(xiàn)對時序數(shù)據(jù)的快速分組。相比group by每組只能返回一個標量值的特性,context by可以使每一個組返回一個和組內(nèi)元素數(shù)量相同的向量。并且在回測工作中,group by只能配合聚合函數(shù)使用,但是context by可以與其他聚合函數(shù)、移動窗口函數(shù)或累計函數(shù)等結(jié)合使用,這極大方便了研發(fā)工作??偟膩碚f,DolphinDB獨創(chuàng)的諸多函數(shù)功能豐富、使用方便,切實有效地幫助我們提升了回測效率。

函數(shù)示例:DolphinDB context by vs group by

同時,我們會使用DolphinDB的元編程功能。利用元編程設計的程序具有讀取、生成、分析及轉(zhuǎn)化其他程序的功能。通過生成動態(tài)表達式以及延遲執(zhí)行的元編程,使得研究人員即便在代碼運行時仍可自行修改代碼。此外,一些計算框架如MapReduce幫助我們進行并發(fā)計算,極大提升了計算效率。

2.使用效果

在行情存儲方面,我們的研究人員能夠清晰感受到DolphinDB的壓縮比率之高和數(shù)據(jù)落庫速度之快。舉例來說,在處理幾十TB的歷史數(shù)據(jù)時,需要在DolphinDB中壓縮數(shù)據(jù),而DolphinDB的壓縮比例非常優(yōu)秀,最高可以達到10:1,能夠切實地滿足我們的業(yè)務需求。

在因子挖掘方面,我們經(jīng)常會計算一些復雜因子。比如使用單日新增數(shù)據(jù)計算一個復雜因子,可以實現(xiàn)秒級計算。如果使用大量的歷史數(shù)據(jù),整個測試的運算時間甚至可以控制在分鐘級別。

在模型回測方面,由于DolphinDB支持數(shù)據(jù)項目化的批量處理,因此總體的回測效率很高。比如在進行某個特定參數(shù)的測試,整體時間可以控制在1分鐘內(nèi)。再比如對大量歷史數(shù)據(jù)測試全方位的特定參數(shù),從邏輯的實現(xiàn)到最后的產(chǎn)出,整體效率非常高。

3.技術(shù)服務

談及對DolphinDB最深刻的印象,就是技術(shù)支持服務。

2020年,我們與DolphinDB CEO周小華博士及技術(shù)團隊當面進行了深入交流。周博士為我們提供了許多專業(yè)的建議,同時技術(shù)團隊針對我們的業(yè)務需求進行了詳細記錄,并且在后續(xù)的跟蹤服務中幫助我們逐一實現(xiàn)了需求。

在之后的使用中,我們也會遇到技術(shù)疑惑與功能需求。比如今年在處理一些高頻數(shù)據(jù)時,我們急需一些函數(shù)的詳細用法。在與我們溝通后,DolphinDB的工程師及時教授了我們關(guān)于函數(shù)的構(gòu)建、以及改善調(diào)優(yōu)的方法。在平時的技術(shù)咨詢中,不論是多晚,即便有時是在周末,我們總會得到技術(shù)支持工程師們的及時回復。當然,除了技術(shù)咨詢,我們也會向DolphinDB提出一些開發(fā)需求。比如實現(xiàn)因子,雖然有些因子是不常規(guī)的、甚至非常復雜,DolphinDB的工程師們都會通過現(xiàn)有的功能向我們提供支持。還有必須提的一點,我們曾經(jīng)向DolphinDB溝通了一個特別的功能需求,結(jié)果這個功能很快就在下一個版本中得到實現(xiàn)。從需求的提出到功能的實現(xiàn),整體速度確實是非常驚人的。

無論是支持效率,還是專業(yè)程度,我們對DolphinDB的技術(shù)支持服務都非常滿意。

4.時序數(shù)據(jù)庫選型

我們在選型時對比了多家時序數(shù)據(jù)庫,其中主要考慮的是Kdb+與DolphinDB。

Kdb+作為金融領(lǐng)域的老牌時序數(shù)據(jù)庫,雖然名氣大、使用面廣,但是其作為國外廠商缺乏國內(nèi)的技術(shù)支持,并且其語法晦澀,培訓成本和學習成本較高。

DolphinDB在查詢和存儲方面的性能明顯優(yōu)于其他數(shù)據(jù)庫,其具備的多種流計算引擎對于流數(shù)據(jù)處理非常友好。同時DolphinDB具有高壓縮比,內(nèi)置豐富的金融函數(shù)庫,可以極大便捷研發(fā)生產(chǎn)。此外,DolphinDB可以提供及時專業(yè)的技術(shù)支持,同時上手門檻較低。

最終,我們選擇了集存儲、計算與開發(fā)于一體的高性能分布式時序數(shù)據(jù)庫DolphinDB。

5.學習和使用經(jīng)驗

總體來看,DolphinDB的入門是比較容易的。如果有Python和SQL的語法基礎(chǔ),那么只需一兩周的時間就可以上手DolphinDB。

若要更加精進地使用DolphinDB,需要對DolphinDB進行更加深入的了解。首先要了解存儲引擎的架構(gòu),目前DolphinDB使用的是OLAP和TSDB兩種引擎,可以提供很高的寫入吞吐。其次,要深入理解數(shù)據(jù)庫的設計原理,比如分區(qū)表的工作原理,這會大大提升數(shù)據(jù)查詢的效率。然后,在數(shù)據(jù)計算方面要學習一些高效處理所需的函數(shù),這樣在實際業(yè)務場景中可以更加自如地使用函數(shù)。最后,要保持一顆學習的心態(tài)。因為DolphinDB在不斷地優(yōu)化提升,不斷地擴展迭代一些新的功能,要用好DolphinDB,一定要保持學習態(tài)度、緊跟版本技術(shù)動態(tài)。

6.結(jié)尾

在友好合作的三年間,DolphinDB切實有效地助力文諦資產(chǎn)進行量化投研。希望DolphinDB可以精益求精,未來在行業(yè)中的發(fā)展越來越好,越來越強。文諦資產(chǎn)也會堅守不斷追求創(chuàng)新、大膽向前的精神,推動量化投資向更高更遠發(fā)展。

關(guān)鍵詞:
圖片版權(quán)歸原作者所有,如有侵權(quán)請聯(lián)系我們,我們立刻刪除。
新化月報網(wǎng)報料熱線:886 2395@qq.com

相關(guān)文章

你可能會喜歡

最近更新

推薦閱讀