我們知道,目前在量化研究(主要指回測,快速驗證,而非交易或生產階段)階段,行業主流的工具語言是Python,Matlab,R,Julia等偏動態語言(Julia動靜均有),其次就是C++,Java,C#….等靜態語言。
Rust是Mozilla開發的注重安全、效能和並發性的程式設計語言,也是一門近年來倍受關注、頗俱現代氣質、頗俱創新、頗俱務實的系統級程式設計語言。基於對Rust的諸多特性的初步理解,我個人認為,Rust可能很適合用在量化的交易或生產階段,因為可以很好降低交易代碼中潛在的BUG,也容易進行生產調試。當然,其挑戰是,是否能得到行業上認可。比如,絕大部分的交易的介面在未來的很長時間還會以C++方式顯現。
今天,主要探討一下,Rust是否適合量化研究,即好用,而不管行業是否認可。
我最簡單的想法是,如果用Rust重寫Julia研究架構,兩者在策略開發效率和策略運行速度上有什麼不同。如果有性價比上提升,那就是說明適合的,反之則不適合。
Rust資產庫可以參考:
https://github.com/kud1ing/awesome-rust
一、基礎探討
1、資料群組織模組
(1)大部分是從第三方的CSV檔案 => 統一成標準化來源資料格式(CSV)。
(2)標準化的來源資料格式(CSV) => MySQL, Sqlite3或SQLServer等,或HDF5 等策略基礎資料。
(3)策略基礎資料 => 策略的Bar/Tick格式。
(4)相關資料更新程式。
Rust 基本上具備以上相關的庫,具體如下:
BurntSushi/rust-csv =>csv。
Chrono 0.2.25 =>Date,Time
aldanor/hdf5-rs =>HDF5
blackbeam/rust-mysql-simple =>MySQL
linuxfood/rustsqlite — Sqlite3 =>Sqlite
serde =>serialize, deserialize
綜合評價: Rust的可行指數:4星。
Python: 5星
Julia :4星
2、策略組織模組
(1)資料群組織表達力。
(2)IDE。 => 策略組織編寫是否便利。
(3)相關基礎統計工具包。 => 報表輸出
Julia有Dict結構、Array,而Rust有 HashMap、Vec. 兩者有泛型。Rust和Julia,Python等在資料群組織的表達力肯定沒有問題的。
IDE。Rust和Julia都可以用Atom,至少我是這樣。但使用上,Julia佔優。而Rust,我目前還結合著Atom和Shell在用,雖然沒有Julia方便,但基礎上影響不大。
Julia的統計工具包,雖然比Matlab,Python,R差了一個數量級,但比Rust還有很有優勢的。Rust的相關統計包非常少,功能也非常有限。估計輪子大部得重新造。要麼只有等了。不過相信,很快就有新的包出來。總之,Rust在這個方面生態缺限會對報表輸出模組產生較大的影響。
綜合評價: Rust的可行指數:2星。
Julia: 4星
Python:5星
3、策略輸出模組
(1)相關畫圖工具包。 => 交易結果展示
(2)IO。 =>流水輸出到CSV或Excel,便於尋找和比對流水是否正確。
Rust畫圖有gnuplot,也可以考慮matplotlib(實際上是matplotlib-rs)。但是和Julia的Gadfly、PyPlot、Plots、Winston相比,Rust的畫圖庫還比較初級,選擇餘地也很小。
在畫圖上,R、Python還是要大讚一下,值得各語言學習,精品多,選擇餘地大。
綜合評價: Rust的可行指數:1星。
而R、Python: 5星。Julia :3星。
二、實踐比較
4、策略實現效率
(1)同一個CTA策略,我用Julia寫,策略需要用1000行,那麼Rust代碼量會是多少。
(2)同一策略實現,不同語言所花的時間。比如用Julia實現,從寫到輸出正確的結果,所用半小時,Rust是多少。
5、策略運行效率
(1)比如,同一個CTA策略,Julia運行下來需要10秒,Rust需要多少秒。
(2)在不同的資料量級(100萬、1000萬級或1億層級Bar/Tick),這個會差多少?