Why python ,not java
我們選用Java作為API語(yǔ)言是因?yàn)椤覀冎粫?huì)Java——這并不是一句單純的玩笑話。
在API設(shè)計(jì)之初搔驼,我們的確想過(guò)用Python,然而最初的創(chuàng)始人(我和@licco-li)對(duì)于Python幾乎完全不了解侈询,而我們(主要是我)當(dāng)時(shí)天真地認(rèn)為Java自從JDK1.8開(kāi)始從語(yǔ)法層面跟Python幾乎沒(méi)有明顯的劣勢(shì)舌涨,所以用Java來(lái)寫(xiě)一套量化交易API只是沒(méi)人敢想而不是做不出來(lái)。于是決定先用Java來(lái)寫(xiě)這一套名為“Market Hammer”的算法引擎及API扔字。
當(dāng)然為了實(shí)現(xiàn)一個(gè)完整的量化平臺(tái)囊嘉,光有一個(gè)引擎是不行的。后臺(tái)還有撮合引擎革为、風(fēng)險(xiǎn)值計(jì)算器哗伯、數(shù)據(jù)源等模塊,還有一系列支撐平臺(tái)的調(diào)度模塊篷角,總共30余萬(wàn)行代碼(自動(dòng)生成的有約10萬(wàn)行焊刹,主要是通信框架,類(lèi)似現(xiàn)在的gRPC恳蹲,只不過(guò)當(dāng)時(shí)它還沒(méi)有出現(xiàn)虐块。我們自己實(shí)現(xiàn)了一套Netty+ProtoBuffer+gRPC的類(lèi)似物——不是定制——以滿足高性能要求)。這些都是現(xiàn)在平臺(tái)性能的關(guān)鍵:當(dāng)你選擇股票的數(shù)量在100個(gè)以下時(shí)嘉蕾,不管回測(cè)時(shí)段選的是1年還是10年贺奠,回測(cè)速度幾乎沒(méi)有區(qū)別。因?yàn)橹饕款i不在回測(cè)運(yùn)行上错忱。我們以后還會(huì)進(jìn)一步優(yōu)化編譯這個(gè)步驟儡率,已經(jīng)有方案挂据,大概還可以節(jié)約0.5秒左右。
這一切看起來(lái)很美儿普,但是……
近期我們請(qǐng)了一些實(shí)習(xí)生來(lái)幫我們開(kāi)發(fā)一些基本的策略崎逃,并發(fā)在論壇上供大家學(xué)習(xí)參考。直到上個(gè)月中眉孩,我們發(fā)現(xiàn)了Java語(yǔ)言的局限性个绍。Java的局限性并不在于語(yǔ)言本身,而是在于它的社區(qū)浪汪,確切地說(shuō)巴柿,是科學(xué)計(jì)算的社區(qū)。
Java誕生的目的是為了工程死遭,所以它是強(qiáng)類(lèi)型+靜態(tài)類(lèi)型的語(yǔ)言广恢。而Python一開(kāi)始就是為科學(xué)計(jì)算準(zhǔn)備的,它是強(qiáng)類(lèi)型+動(dòng)態(tài)類(lèi)型的語(yǔ)言呀潭。強(qiáng)類(lèi)型保證了數(shù)據(jù)的嚴(yán)謹(jǐn)性(如 s = "1" + 1會(huì)報(bào)錯(cuò)袁波,而不會(huì)返回2),動(dòng)態(tài)類(lèi)型又使得開(kāi)發(fā)比較簡(jiǎn)便蜗侈,當(dāng)然犧牲了一大部分類(lèi)型推導(dǎo)能力及性能篷牌,使得它不適合做復(fù)雜的系統(tǒng)工程。
后來(lái)各大投行開(kāi)始從經(jīng)濟(jì)上支持Python的科學(xué)計(jì)算社區(qū)踏幻,使得Python的科學(xué)工具棧無(wú)比強(qiáng)大枷颊。如果Java也有Python的工具棧,Python一行搞定的事情Java也不需要兩行该面,然而Java就是沒(méi)有夭苗。
我個(gè)人非常想將Java推向科學(xué)計(jì)算領(lǐng)域,因?yàn)樗鄬?duì)于C++來(lái)說(shuō)隔缀,性能上并不吃虧题造,而語(yǔ)言本身比C/C++簡(jiǎn)單太多(GC就不提了因?yàn)镃++11開(kāi)始也有了),非常適合科學(xué)計(jì)算使用——只要有合適的工具搞定編譯和運(yùn)行猾瘸。然并卵界赔。Python已經(jīng)在那里,并且很強(qiáng)大牵触,我不能憑一己之力淮悼,Ricequant也不能憑一個(gè)平臺(tái)之力來(lái)改變這個(gè)現(xiàn)狀。不能硬來(lái)揽思,只能妥協(xié)袜腥,所以我們將推出Python版本的API,包括基于Jupyter(IPython Notebook)的研究平臺(tái)钉汗,以及基于Python的API(背后仍然調(diào)用Java以保證性能及穩(wěn)定性)羹令。以后我們會(huì)同時(shí)維護(hù)兩套API鲤屡,各有各的工具鏈,也各有優(yōu)勢(shì)福侈。
直到某一個(gè)平臺(tái)的用戶數(shù)降到0酒来。