手機(jī)版 | 網(wǎng)站導(dǎo)航
觀察家網(wǎng) > 財經(jīng) >

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

壹點(diǎn)網(wǎng) | 2023-02-13 10:56:18

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

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

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

1.使用場景

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

1.1行情存儲

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

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

1.2因子挖掘

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

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

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

1.3模型回測

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

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

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

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

2.使用效果

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

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

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

3.技術(shù)服務(wù)

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

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

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

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

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

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

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

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

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

5.學(xué)習(xí)和使用經(jīng)驗(yàn)

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

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

6.結(jié)尾

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

標(biāo)簽:

  • 標(biāo)簽:中國觀察家網(wǎng),商業(yè)門戶網(wǎng)站,新聞,專題,財經(jīng),新媒體,焦點(diǎn),排行,教育,熱點(diǎn),行業(yè),消費(fèi),互聯(lián)網(wǎng),科技,國際,文化,時事,社會,國內(nèi),健康,產(chǎn)業(yè)資訊,房產(chǎn),體育。

相關(guān)推薦