量化交易--第一節--why python,not java

Why python ,not java
    我們選用Java作為API語言是因為……我們只會Java——這并不是一句單純的玩笑話。

在API設計之初,我們的確想過用Python,然而最初的創始人(我和@licco-li)對于Python幾乎完全不了解,而我們(主要是我)當時天真地認為Java自從JDK1.8開始從語法層面跟Python幾乎沒有明顯的劣勢,所以用Java來寫一套量化交易API只是沒人敢想而不是做不出來。于是決定先用Java來寫這一套名為“Market Hammer”的算法引擎及API。

當然為了實現一個完整的量化平臺,光有一個引擎是不行的。后臺還有撮合引擎、風險值計算器、數據源等模塊,還有一系列支撐平臺的調度模塊,總共30余萬行代碼(自動生成的有約10萬行,主要是通信框架,類似現在的gRPC,只不過當時它還沒有出現。我們自己實現了一套Netty+ProtoBuffer+gRPC的類似物——不是定制——以滿足高性能要求)。這些都是現在平臺性能的關鍵:當你選擇股票的數量在100個以下時,不管回測時段選的是1年還是10年,回測速度幾乎沒有區別。因為主要瓶頸不在回測運行上。我們以后還會進一步優化編譯這個步驟,已經有方案,大概還可以節約0.5秒左右。

這一切看起來很美,但是……

近期我們請了一些實習生來幫我們開發一些基本的策略,并發在論壇上供大家學習參考。直到上個月中,我們發現了Java語言的局限性。Java的局限性并不在于語言本身,而是在于它的社區,確切地說,是科學計算的社區。

Java誕生的目的是為了工程,所以它是強類型+靜態類型的語言。而Python一開始就是為科學計算準備的,它是強類型+動態類型的語言。強類型保證了數據的嚴謹性(如 s = "1" + 1會報錯,而不會返回2),動態類型又使得開發比較簡便,當然犧牲了一大部分類型推導能力及性能,使得它不適合做復雜的系統工程。

后來各大投行開始從經濟上支持Python的科學計算社區,使得Python的科學工具棧無比強大。如果Java也有Python的工具棧,Python一行搞定的事情Java也不需要兩行,然而Java就是沒有。

我個人非常想將Java推向科學計算領域,因為它相對于C++來說,性能上并不吃虧,而語言本身比C/C++簡單太多(GC就不提了因為C++11開始也有了),非常適合科學計算使用——只要有合適的工具搞定編譯和運行。然并卵。Python已經在那里,并且很強大,我不能憑一己之力,Ricequant也不能憑一個平臺之力來改變這個現狀。不能硬來,只能妥協,所以我們將推出Python版本的API,包括基于Jupyter(IPython Notebook)的研究平臺,以及基于Python的API(背后仍然調用Java以保證性能及穩定性)。以后我們會同時維護兩套API,各有各的工具鏈,也各有優勢。

直到某一個平臺的用戶數降到0。

參考

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容