說說我心中重要的五類語言。這不僅僅是對于一個(gè)Quant必須的,而是一個(gè)豐滿的程序員所必備的。在藝術(shù)中,藝永遠(yuǎn)比術(shù)重要;在Quant相關(guān)知識中,Intuition永遠(yuǎn)比純Technique更加重要。
有五類語言構(gòu)建了一個(gè)豐滿的編程能力強(qiáng)的Quant的一切,它們分別是:
效率類語言(C、C++、Java等)
膠水類語言(Python、Ruby等)
科學(xué)類語言(Matlab、R、S等)
Alpha演算類語言(Lisp、Clojure等)
查詢類語言(SQL、Q等)
這是基于我理解淺薄的分類,完全與計(jì)算機(jī)科學(xué)的規(guī)范化分類(如面對對象語言、函數(shù)類語言)不相容。持不同意見者大可付之一笑。
1、效率類語言
C、C++、Java等
老派的Quant很多都是C++高手,特別是80年代涌入華爾街的那幫MIT的高能物理博士們。在那個(gè)年代,可以選擇的語言不多。要么就Fortan,要么就C/C++了。所以在當(dāng)時(shí)基本上這些語言同時(shí)充當(dāng)著基礎(chǔ)架構(gòu)(infrastructure)和數(shù)值計(jì)算(比如Monte Carlo)的雙重目的。
現(xiàn)在各種膠水類語言、科學(xué)類語言多了起來,而且由于單機(jī)性能越發(fā)強(qiáng)悍,效率再也不是的訴求了,因此目前C++、Java大量應(yīng)用于金融系統(tǒng)級的開發(fā),和對于效率要求極高的實(shí)時(shí)定價(jià)等領(lǐng)域。
從一個(gè)Quant的角度來看,這類語言的特點(diǎn)是快,編程復(fù)雜度高,維護(hù)難,同時(shí)原生語言普遍不支持向量運(yùn)算。
2、膠水類語言
Python、Ruby等
我必須承認(rèn),這些語言是新世代Quant的福音。在國內(nèi)工作的時(shí)候我目睹并參與了一個(gè)將原有的C++框架全部用Python重寫的項(xiàng)目,而現(xiàn)在JPMorgan這邊利率類產(chǎn)品的定價(jià)軟件也在從Java像Python轉(zhuǎn)移。實(shí)現(xiàn)同樣的代碼,Python、Ruby的實(shí)現(xiàn)速度比效率類語言快很多。
這些語言的特點(diǎn)是比較快,編程復(fù)雜度高,維護(hù)相對簡單,同時(shí)大量的包(比如Numpy+Scipy)可以輕松實(shí)現(xiàn)向量運(yùn)算。
3、科學(xué)類語言
Matlab、R、S等
一般而言,科學(xué)類語言的特點(diǎn)是支持向量運(yùn)算,同時(shí)各種附加數(shù)學(xué)、統(tǒng)計(jì)包極其豐富,但運(yùn)算速度無法與前兩類相比。在一個(gè)具體的投資/交易策略、模型投入實(shí)際使用前,你需要快速的去實(shí)現(xiàn)(Implement)和驗(yàn)證(Back-testing)你的想法。這個(gè)時(shí)候,科學(xué)類語言就有的優(yōu)勢。驗(yàn)證思路有效后,再用效率類語言或膠水類語言開發(fā)成系統(tǒng)級組件。你可以理解為科學(xué)類語言是用來造概念車的,而前兩類語言是用來量產(chǎn)的。而在具體的職業(yè)角度,造概念車的這幫人一般是Pure Quant,而實(shí)現(xiàn)量產(chǎn)的很多是Quant Developer。當(dāng)然也有兩者合一的集大成者。
4、Alpha演算類語言
Lisp、Clojure等
我第一次對這類語言感興趣,是12年冬天接觸硅谷一家科技公司時(shí)(Prismatic,人工智能新聞App),發(fā)現(xiàn)他們在用Clojure,也極力向我推薦Clojure。Clojure是基于Java封裝的語言,可以用Java虛擬機(jī)執(zhí)行。但歸根結(jié)底,Clojure是Lisp這類語言。 我個(gè)人感覺目前Quant界用這種語言偏少,但是不排除以后流行的可能。
5、查詢類語言
SQL、Q等
SQL就不必說了,金融公司很多時(shí)候都是使用Oracle等關(guān)系型數(shù)據(jù)庫,SQL是基礎(chǔ)。而我之前幾次面試也遇到了SQL的問題。Q是Morgan Stanley為了應(yīng)對金融中的海量數(shù)據(jù)而采用的一種非關(guān)系型查詢語言,特點(diǎn)是極快,有SQL的基礎(chǔ)可以很快掌握。
全面的說:
如果你是做Pure Quant,整天與交易策略和模型睡覺,那么2、3是必須的;
如果你是開發(fā)為主,或者是Quant Developer,那么1、2、5是必須的;
如果你立志讓編程不成為你做Quant的障礙,那么1-5全都是必須掌握或至少了解其思想的。
不管是作為Quant還是Coder,都不可拘泥于語言。語言只是其背后設(shè)計(jì)哲學(xué)的體現(xiàn)。這就等同一個(gè)數(shù)量金融從業(yè)者不可拘泥于產(chǎn)品一樣。數(shù)量金融的根基永遠(yuǎn)是供給需求、金錢時(shí)間價(jià)值這些基本的經(jīng)濟(jì)學(xué)理論以及現(xiàn)金流的相關(guān)概率這些基本的統(tǒng)計(jì)學(xué)思想。如果拘泥于術(shù)而非藝,那路就會越走越窄。
.png)


.jpg)


