DolphinDB 助力 WILLIAM O’NEIL 笑傲股市
WILLIAM O’NEIL 高級(jí)工程師 陸強(qiáng)
WILLIAM O’NEIL(威廉歐奈爾),成立于1963年,致力于為投資機(jī)構(gòu)和投資者提供投資建議和獨(dú)立調(diào)研報(bào)告,目前已服務(wù)超過(guò)500家世界頂級(jí)投資機(jī)構(gòu)。
我所在的是威廉歐奈爾信息科技上海有限公司,團(tuán)隊(duì)負(fù)責(zé)公司所有量化基金產(chǎn)品的業(yè)務(wù),同時(shí)進(jìn)行所有數(shù)據(jù)相關(guān)的技術(shù)研發(fā)。
我們用 DolphinDB 做了什么
目前我們使用 DolphinDB 處理所有的時(shí)序數(shù)據(jù),主要進(jìn)行因子研發(fā)、中高頻數(shù)據(jù)處理和 tick 級(jí)流數(shù)據(jù)處理。每天的新增數(shù)據(jù)量在1000萬(wàn)~5000萬(wàn)條級(jí)別,如果存為 CSV 文件的話,總共為4~5 GB。
-
因子研發(fā)
我們結(jié)合財(cái)報(bào)和日線數(shù)據(jù)衍生出大量因子,然后使用 DolphinDB 的分布式存儲(chǔ)、分布式計(jì)算和實(shí)時(shí)流計(jì)算等功能進(jìn)行因子的存儲(chǔ)、計(jì)算和建模。在使用 DolphinDB 進(jìn)行因子研發(fā)的過(guò)程中,我們可以快速處理海量數(shù)據(jù)集,利用內(nèi)置的多范式的編程語(yǔ)言,高效開(kāi)發(fā)出不同風(fēng)格的因子。在計(jì)算得到一些因子后,我們可以再次使用 DolphinDB 實(shí)時(shí)計(jì)算產(chǎn)生基于這些因子的衍生因子,投研效率得到極大提升。
此外,我們使用 DolphinDB 進(jìn)行因子評(píng)估來(lái)測(cè)試因子的有效性。之前我們使用 Python 加上國(guó)外某知名云服務(wù)商的數(shù)據(jù)庫(kù)進(jìn)行因子回測(cè),在使用 DolphinDB 之后,發(fā)現(xiàn) DolphinDB 也提供了一些高效的回測(cè)工具。比如通過(guò)一個(gè) replay 函數(shù),我們就可以模擬真實(shí)的生產(chǎn)環(huán)境,通過(guò)模擬回放的方式將數(shù)據(jù)注入到流計(jì)算框架中,方便之后的回測(cè)計(jì)算。在這個(gè)過(guò)程中,我們可以使用不同的回放形式,并且通過(guò)設(shè)置不同的回放速率進(jìn)行勻速、倍速或者極速回放,還可以將多個(gè)表的數(shù)據(jù)回放到同一張表中,總體來(lái)說(shuō)使用非常方便。未來(lái)隨著項(xiàng)目的推進(jìn),我們計(jì)劃將這塊業(yè)務(wù)逐漸遷移到 DolphinDB 中。
-
處理中高頻數(shù)據(jù)
目前我們團(tuán)隊(duì)專攻中高頻數(shù)據(jù),這塊的數(shù)據(jù)量非常龐大,歷史數(shù)據(jù)大概在 TB 級(jí)別。在使用 DolphinDB 處理高頻數(shù)據(jù)時(shí),我們會(huì)對(duì)輸入的行情數(shù)據(jù)使用時(shí)間序列聚合引擎生成分鐘級(jí) K 線,然后根據(jù)分鐘級(jí) K 線使用自定義函數(shù)生成狀態(tài)因子,同時(shí)將輸出結(jié)果指向另一個(gè)流數(shù)據(jù)表以方便之后的其他計(jì)算。在 DolphinDB 的助力下,我們實(shí)現(xiàn)了日線數(shù)據(jù)的高效處理,并且將研究的數(shù)據(jù)精度推進(jìn)到分鐘級(jí),在降低開(kāi)發(fā)成本的基礎(chǔ)上極大提升了研發(fā)效率。
-
搭建 tick 級(jí)數(shù)據(jù)流架構(gòu)
我們團(tuán)隊(duì)在去年搭建了一個(gè)處理 tick 級(jí)數(shù)據(jù)的數(shù)據(jù)流架構(gòu)——使用 Kafka 連接數(shù)據(jù)流,然后傳到 DolphinDB 中進(jìn)行計(jì)算分析,最后得到所需數(shù)據(jù)。該數(shù)據(jù)流框架能夠?qū)崟r(shí)產(chǎn)生我們需要的市場(chǎng)信號(hào)。
在我看來(lái),只要把 Kafka 接數(shù)據(jù)流這步做好,后邊的很多事情并不需要操心。因?yàn)?DolphinDB 提供了非常成熟的實(shí)時(shí)流計(jì)算框架,其中最核心的部件是流計(jì)算引擎和流數(shù)據(jù)表。我們通過(guò)流數(shù)據(jù)引擎進(jìn)行時(shí)間序列處理、橫截面處理、窗口處理、表關(guān)聯(lián)和異常檢測(cè)等操作。同時(shí)可以將流數(shù)據(jù)表作為簡(jiǎn)化版的消息中間件,實(shí)現(xiàn)數(shù)據(jù)的發(fā)布和訂閱。在投研階段封裝好的基于批量數(shù)據(jù)開(kāi)發(fā)的因子函數(shù),可以無(wú)縫投入實(shí)際生產(chǎn),實(shí)現(xiàn)批流一體,加速開(kāi)發(fā)進(jìn)程。目前 DolphinDB 的延時(shí)可以控制在毫秒級(jí),這完全滿足了我們的需求。
回顧數(shù)據(jù)庫(kù)選型
之前我們研究中低頻數(shù)據(jù),主要使用 Python 進(jìn)行分析計(jì)算。當(dāng)公司有處理高頻數(shù)據(jù)的需求時(shí),我們發(fā)現(xiàn)這套系統(tǒng)并不能滿足對(duì)數(shù)據(jù)處理的理想需求,尤其在數(shù)據(jù)分析方面,這套系統(tǒng)的反應(yīng)速度非常慢。
于是我們?cè)谑忻嫔蠈ふ移ヅ涔拘枨蟮男庐a(chǎn)品,希望這款產(chǎn)品能夠?qū)崿F(xiàn)高效處理時(shí)序數(shù)據(jù),并且方便未來(lái)擴(kuò)展。
經(jīng)過(guò)一番市場(chǎng)調(diào)研與產(chǎn)品性能測(cè)試,我們?cè)谶x型會(huì)議上討論了三套方案。
第一套方案是 KDB+。由于 KDB+語(yǔ)言晦澀,學(xué)習(xí)成本過(guò)高,這套方案并沒(méi)有被采納。
第二套方案是 NoSQL Cassandra。經(jīng)過(guò)討論,這套方案需要額外招人進(jìn)行系統(tǒng)的重構(gòu)搭建,并且后續(xù)需要專人進(jìn)行維護(hù)。這會(huì)極大增加成本,所以并沒(méi)有采用。
第三套方案是 DolphinDB。當(dāng)時(shí)是21年初,市面上已經(jīng)出現(xiàn)了金融行業(yè)處理時(shí)序數(shù)據(jù)“非 KDB+即 DolphinDB”的兩家爭(zhēng)霸趨勢(shì)。我在會(huì)議上對(duì)照 KDB+的算法例子做了一些 DolphinDB 的性能測(cè)試,然后展示了同樣的例子使用 DolphinDB 語(yǔ)言來(lái)寫,腳本明顯會(huì)變得更加簡(jiǎn)潔。在一些例子中,DolphinDB 的性能超越了KDB+。當(dāng)時(shí)基金經(jīng)理們大多熟悉 KDB+,我在會(huì)議上做完演示后,他們也非常驚訝于 DolphinDB 的優(yōu)秀性能。
最后在方案表決時(shí),DolphinDB 以壓倒性優(yōu)勢(shì)勝出。
對(duì) DolphinDB 的評(píng)價(jià)
使用 DolphinDB 已經(jīng)有一年多了,讓我印象最深刻的就是它的高性能、易上手與及時(shí)支持。
-
高性能
在性能方面,DolphinDB 可以對(duì)實(shí)時(shí)數(shù)據(jù)進(jìn)行快速地計(jì)算與分析,實(shí)現(xiàn)毫秒級(jí)的響應(yīng)速度,完全滿足了我們高效處理時(shí)序數(shù)據(jù)的需求。
-
易上手
在學(xué)習(xí)成本方面,由于 DolphinDB 的腳本語(yǔ)言類似 Python,同時(shí)提供了很多官方的技術(shù)教程,我認(rèn)為DolphinDB 是非常好上手的。如果是一個(gè)有著 C 或 Python 開(kāi)發(fā)經(jīng)驗(yàn)的同事,只需要2周、最多1個(gè)月的時(shí)間,這位同事就能對(duì)布置的項(xiàng)目實(shí)現(xiàn)上手開(kāi)發(fā)。
-
及時(shí)支持
DolphinDB 技術(shù)支持團(tuán)隊(duì)的響應(yīng)速度非常好。除過(guò)一些日常的技術(shù)交流,在和技術(shù)支持團(tuán)隊(duì)溝通的過(guò)程中,我會(huì)反饋一些 DolphinDB 原本不提供的接口或者函數(shù)的開(kāi)發(fā)需求。不到一個(gè)月的時(shí)間,我發(fā)現(xiàn)之前提到的需求會(huì)隨著 DolphinDB 的新版本同時(shí)上線,這樣快速且及時(shí)的反應(yīng)速度極大地幫助了我們的研發(fā)生產(chǎn)。
文章最后
使用 DolphinDB 給我們的業(yè)務(wù)帶來(lái)了極大的改善。作為一家跨國(guó)公司,我們?cè)谂c國(guó)外的同事交流時(shí),也會(huì)向他們推薦性能優(yōu)秀的時(shí)序數(shù)據(jù)庫(kù) DolphinDB。衷心希望 DolphinDB 能夠越做越強(qiáng),未來(lái)在國(guó)際上打出更高的知名度!
?
總結(jié)
以上是生活随笔為你收集整理的DolphinDB 助力 WILLIAM O’NEIL 笑傲股市的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: GCC: 优化: xmm寄存器的使用,s
- 下一篇: [Practical.Vim(2012.