Quant應該學習哪些 Python 知識?
答主更多應該算一個trader而不是quant(雖然對quant的一些知識也略懂),下面的答案可能更多是從一個交易員的角度來回答
想在市場上賺錢,必須同時具備兩樣能力:
研究:做出正確的能夠獲利的決策,也就是尋找Alpha的能力
交易:基於研究的結果和交易訊號,執行相應的下單風控等操作,也就是將Alpha落實到你賬戶盈利上的能力
研究方面
龍哥的答案已經覆蓋了常用的庫,這裡就從研究的整體方向上來介紹下:
獲取資料:可以選擇使用TuShare、通聯、萬得等資料工具下載資料,並將原始的資料格式轉化為你自己想用的資料格式(可以用Python指令碼實現),以儲存到資料庫中
儲存資料:幾乎絕大部分常用的資料庫都提供了Python介面,SQLSQL/HDF5等等多種,最常用的應該是MySql和MongoDB,有興趣學Q的也可以直接去用KDB+,資料庫具體會應用的方向包括儲存資料、讀取資料、資料補全機制、資料變頻(TICK變K線等)
資料回測:將資料讀取到記憶體中後(以numpy陣列或者pandas序列的形式),進行策略的回測,並對回測結果進行研究(matplotlib繪圖),或者對引數進行優化(scipy等)
建模相關:對資料進行一些統計學檢驗(statsmodel)以及機器學習建模(scikit-learn)
整合開發環境:在有針對性的IDE中實現以上步驟會更加簡便快捷(ipython/spyder)
交易方面
這部分是答主的主場了,主要分為兩塊:
1. 執行交易:對於絕大部分量化策略,都在一定程度上需要自動/半自動的下單功能。
CTA策略突破入場(秒級延時)
期權做市實時掛撤單(毫秒級延時)
股指期貨高頻(微秒級延時)
分級基金套利(批量自動下單,延時沒有以上幾種重要)
Alpha套利(籃子交易,一般要使用vwap等演算法)
2. 策略風控:同樣一般需要自動或者半自動的風控功能.
期權組合的希臘值風險實時監控對衝
分級基金套利的beta淨敞口、行業暴露等實時監控對衝
Alpha套利策略的因子監控
具體需要掌握的知識:
1. 模擬實盤交易的策略回測:將策略重新編寫為可以基於資料回放(逐TICK/逐K線)的模式進行回測的程式,模擬實際交易情況,杜絕未來函式的可能性,實盤交易中使用完全相同的程式進行交易,保證實盤和回測的一致性。這塊通常需要專門的框架或者程式,比如通聯的優礦、掘金、vn.py框架中的vn.strategy等。
2. 實盤交易介面:將想要下的單子通過交易介面傳送到經紀商櫃檯,目前可以實盤直接使用的應該包括掘金(期貨)、vn.py中的vn.lts(證券、期權)和vn.ctp(期貨)。如果要使用其他的櫃檯需要自己封裝,如恆生、金證等。
3. 其他語言拓展:作為最有名的膠水語言之一,Python的拓展功能不用絕對是浪費。針對計算瓶頸可以使用cython拓展,針對API可以用boost.python和swig進行封裝,呼叫matlab直接執行其中提供的特定演算法,使用COM介面呼叫Excel自動生成每日交易記錄和報表......
4. GUI程式的開發:相當數量的量化交易依舊需要交易員進行實時監控,除了在cmd中不斷print一些資料外,更合理的方案是開發自己需要的GUI介面,重點推薦PyQt,比在C++中用Qt開發要來的快捷很多,底層執行的也是C++的程式碼,速度完全不用擔心。一些有特別需求的人也可以考慮開發在瀏覽器中顯示的介面,比如經常想用手機遠端監控。
個人的Python知識體系:
研究方面
1. 期權目前國內的歷史資料較少,所以整體上用萬得的API就足以滿足需求,做CTA策略研究會從MC匯出csv格式的資料再讀取到Python中,目前在研究通聯的介面,原因無他:方便和價效比。
2. 資料儲存主要用MongoDB,主要原因同樣是方便,既可以用來存歷史的行情資料(Tick,K線),也可以存交易系統的日誌,甚至用來儲存交易系統引數設定等等,存取資料如同使用Python字典一樣方便(MySql試過用不慣)。
3. 資料回測,比較粗的回測一般就直接在Spyder裡隨手寫測試指令碼:讀取原始資料,用矩陣的形式計算一些變數(技術指標、希臘值),然後用迴圈逐行跑回測,結果出來後用matplotlib繪圖很方便。比較精細的回測會基於vn.py中模擬實盤交易的回測框架,在速度上會慢些,但是可以基本杜絕未來函式。
4. 建模相關:這塊不是本人的主攻領域,偶爾有需求拿SciPy邊看文件邊寫。
5. 整合開發環境:互動式開發寫策略回測一般用Spyder,開發大型程式的時候用WingIDE(朋友友情支援的正版,不得不說非常給力),智慧提示、自動完成可以大幅提高開發效率。
6. 交易介面:就是答主自己開發的vn.py框架了,期貨方面是CTP介面,股票和期權方面是華寶的LTS介面,熟知大部分底層開發細節(為了封裝介面,沒辦法)。然後針對不同的交易型別、交易策略,針對性的開發一些Python函式和演算法,在其中實現特殊的簡化下單功能(這些上層功能沒放到框架中)。
7. Python語言拓展:必須掌握的是cython,提升python計算效能的神器;另外為了封裝API用的boost.python,和swig比起來的主要好處是封裝完全使用C++語言,同時答主也沒有在java/perl中呼叫封裝模組的需求。
8. GUI開發:PyQt,功能強大,文件也比較全;高效能的實時繪圖:pyqtgraph,一些風控分析的圖表可以用matplotlib(嵌入到PyQt中),生成的圖表質量更高。
最後關於Python在量化交易領域的地位:
答主認為就像Javascript現在在web領域的地位一樣,Python現在可以幾乎覆蓋整個量化交易業務鏈:從研究到寫交易程式,一氣呵成(可以叫做全棧Quant?)。其他的語言總會有這樣那樣的短板:
C++/C#/Java:適合寫交易程式,不適合用來做策略開發
Matlab/R:適合做策略開發,但是在交易執行方面存在不少問題:速度、不穩定等等
Python:速度不如C++,策略開發不如Matlab,但其作為膠水語言,使用這樣那樣的小技巧後,在兩個方面都能滿足需求
最後也是很多人喜歡問的:Python確實不適合開發超高頻/超低延時(追求的效能提升在微秒級)的交易策略,不過:
1. 在當前時間點,這個需求已經不那麼迫切了;
2. 很多資金容量大能賺大錢(不一定是超高的回報率)的策略對延時的要求並沒有那麼高
so it's all up to you