文諦資產首席策略官劉一夫、首席框架官吳永華、首席數據分析師王哲 上海文諦資產管理有限公司(以下簡稱“文諦資產”)秉持理性、務實、高效、專業(yè)的投資精神,憑借科學的量化投資戰(zhàn)略、先進的量化交易技術和成熟的風險管理能力深耕量化領域,以創(chuàng)造長期穩(wěn)定收益為投資目標,為國內外投資者和合作機構提供專業(yè)的投資服務。文諦資產業(yè)務持續(xù)保持穩(wěn)健發(fā)展,公司主要從事CTA和股票的量化策略研究與運作。 大數據技術的飛速發(fā)展為量化投資注入了新鮮活力,隨著數據挖掘工具的更迭換代,各大投資機構也在不斷夯實自身的數據處理和分析能力。文諦資產作為量化統(tǒng)計及應用數學領域的投顧專家,在存儲、計算和分析大量時間序列數據的過程中,選擇了高性能的分布式時序數據庫DolphinDB作為強有力的研究工具。在合作的三年間,DolphinDB為文諦資產提供了集數據庫、分布式計算和編程建模于一體的專業(yè)服務。本文由文諦資產的首席策略官劉一夫、首席框架官吳永華、首席數據分析師王哲共同撰寫,分享關于DolphinDB的使用場景、使用效果、技術服務、選型過程和學習經驗。
1.使用場景 我們主要在行情存儲、因子挖掘和模型回測三方面用到了DolphinDB。 1.1行情存儲 在行情存儲方面,我們主要使用DolphinDB進行數據的入庫、清洗與查詢。 在存儲數據時,我們借助DolphinDB的分布式特性,通過提前確定好數據導入的分區(qū)字段與分區(qū)粒度,提高后續(xù)數據檢索與分析的效率。比如在查詢數據時,DolphinDB會以分區(qū)字段為數據過濾,通過SQL引擎快速定位要查找的數據塊,從而避免對整張表進行掃描,這極大提高了查詢速度。此外,為方便后續(xù)的數據分析工作,我們會使用DolphinDB對海量時序數據進行高效清洗,找出并消除殘缺、錯誤或重復的數據,進而輸出一份高質量的、滿足業(yè)務需求的數據。相比其他數據清洗工具隨著數據量的增大自身性能會下降的情況,DolphinDB在實際應用中能夠保持穩(wěn)定性能。 1.2因子挖掘 在因子挖掘方面,我們主要使用DolphinDB處理數據量龐大、運算復雜的工作任務。 目前我們處理的總數據量大概在幾十TB,每日新增數據約為70GB。在使用過程中,我們不僅會用到DolphinDB高速存取數據的基本功能,同時會用到其內置的多范式編程語言與多種計算引擎。 比如在處理一些tick數據時,我們會使用DolphinDB完成前期的一些運算,然后通過Python API,將計算結果導入Python模型進行組合。其中我們會用到DolphinDB的流計算框架,進行流數據的發(fā)布、訂閱、預處理、實時內存計算以及復雜指標計算等。以DolphinDB內置的時間序列聚合引擎為例,僅需設定幾個參數指標,配合wsum、corr等聚合函數的使用,就可以快速便捷地實現復雜的滑動時間窗口聚合計算。 1.3模型回測 在模型回測方面,我們會用到DolphinDB提供的函數接口、元編程和計算框架,根據這些現有的方法和框架來進行高效回測。 一些現成函數如context by、crossStat等的使用可以幫助我們大大提升數據處理、特別是編程的工作效率。例如context by,該函數作為DolphinDB的獨創(chuàng)功能可以實現對時序數據的快速分組。相比group by每組只能返回一個標量值的特性,context by可以使每一個組返回一個和組內元素數量相同的向量。并且在回測工作中,group by只能配合聚合函數使用,但是context by可以與其他聚合函數、移動窗口函數或累計函數等結合使用,這極大方便了研發(fā)工作??偟膩碚f,DolphinDB獨創(chuàng)的諸多函數功能豐富、使用方便,切實有效地幫助我們提升了回測效率。
函數示例:DolphinDB context by vs group by 同時,我們會使用DolphinDB的元編程功能。利用元編程設計的程序具有讀取、生成、分析及轉化其他程序的功能。通過生成動態(tài)表達式以及延遲執(zhí)行的元編程,使得研究人員即便在代碼運行時仍可自行修改代碼。此外,一些計算框架如MapReduce幫助我們進行并發(fā)計算,極大提升了計算效率。
2.使用效果 在行情存儲方面,我們的研究人員能夠清晰感受到DolphinDB的壓縮比率之高和數據落庫速度之快。舉例來說,在處理幾十TB的歷史數據時,需要在DolphinDB中壓縮數據,而DolphinDB的壓縮比例非常優(yōu)秀,最高可以達到10:1,能夠切實地滿足我們的業(yè)務需求。 在因子挖掘方面,我們經常會計算一些復雜因子。比如使用單日新增數據計算一個復雜因子,可以實現秒級計算。如果使用大量的歷史數據,整個測試的運算時間甚至可以控制在分鐘級別。 在模型回測方面,由于DolphinDB支持數據項目化的批量處理,因此總體的回測效率很高。比如在進行某個特定參數的測試,整體時間可以控制在1分鐘內。再比如對大量歷史數據測試全方位的特定參數,從邏輯的實現到最后的產出,整體效率非常高。
3.技術服務 談及對DolphinDB最深刻的印象,就是技術支持服務。 2020年,我們與DolphinDB CEO周小華博士及技術團隊當面進行了深入交流。周博士為我們提供了許多專業(yè)的建議,同時技術團隊針對我們的業(yè)務需求進行了詳細記錄,并且在后續(xù)的跟蹤服務中幫助我們逐一實現了需求。 在之后的使用中,我們也會遇到技術疑惑與功能需求。比如今年在處理一些高頻數據時,我們急需一些函數的詳細用法。在與我們溝通后,DolphinDB的工程師及時教授了我們關于函數的構建、以及改善調優(yōu)的方法。在平時的技術咨詢中,不論是多晚,即便有時是在周末,我們總會得到技術支持工程師們的及時回復。當然,除了技術咨詢,我們也會向DolphinDB提出一些開發(fā)需求。比如實現因子,雖然有些因子是不常規(guī)的、甚至非常復雜,DolphinDB的工程師們都會通過現有的功能向我們提供支持。還有必須提的一點,我們曾經向DolphinDB溝通了一個特別的功能需求,結果這個功能很快就在下一個版本中得到實現。從需求的提出到功能的實現,整體速度確實是非常驚人的。 無論是支持效率,還是專業(yè)程度,我們對DolphinDB的技術支持服務都非常滿意。
4.時序數據庫選型 我們在選型時對比了多家時序數據庫,其中主要考慮的是Kdb+與DolphinDB。 Kdb+作為金融領域的老牌時序數據庫,雖然名氣大、使用面廣,但是其作為國外廠商缺乏國內的技術支持,并且其語法晦澀,培訓成本和學習成本較高。 DolphinDB在查詢和存儲方面的性能明顯優(yōu)于其他數據庫,其具備的多種流計算引擎對于流數據處理非常友好。同時DolphinDB具有高壓縮比,內置豐富的金融函數庫,可以極大便捷研發(fā)生產。此外,DolphinDB可以提供及時專業(yè)的技術支持,同時上手門檻較低。 最終,我們選擇了集存儲、計算與開發(fā)于一體的高性能分布式時序數據庫DolphinDB。
5.學習和使用經驗 總體來看,DolphinDB的入門是比較容易的。如果有Python和SQL的語法基礎,那么只需一兩周的時間就可以上手DolphinDB。 若要更加精進地使用DolphinDB,需要對DolphinDB進行更加深入的了解。首先要了解存儲引擎的架構,目前DolphinDB使用的是OLAP和TSDB兩種引擎,可以提供很高的寫入吞吐。其次,要深入理解數據庫的設計原理,比如分區(qū)表的工作原理,這會大大提升數據查詢的效率。然后,在數據計算方面要學習一些高效處理所需的函數,這樣在實際業(yè)務場景中可以更加自如地使用函數。最后,要保持一顆學習的心態(tài)。因為DolphinDB在不斷地優(yōu)化提升,不斷地擴展迭代一些新的功能,要用好DolphinDB,一定要保持學習態(tài)度、緊跟版本技術動態(tài)。
6.結尾 在友好合作的三年間,DolphinDB切實有效地助力文諦資產進行量化投研。希望DolphinDB可以精益求精,未來在行業(yè)中的發(fā)展越來越好,越來越強。文諦資產也會堅守不斷追求創(chuàng)新、大膽向前的精神,推動量化投資向更高更遠發(fā)展。 |