Quant 應該學習哪些 Python 知識?
RT
上知乎日報了,來更新點自己的Python知識體系,個人經驗,歡迎拍磚。
-------------------------------------------------------------------------------------------------------------
謝青木資本龍哥邀!答主更多應該算一個trader而不是quant(雖然對quant的一些知識也略懂),下面的答案可能更多是從一個交易員的角度來回答。
想在市場上賺錢,必須同時具備兩樣能力:
- 研究:做出正確的能夠獲利的決策,也就是尋找Alpha的能力
- 交易:基於研究的結果和交易信號,執行相應的下單風控等操作,也就是將Alpha落實到你賬戶盈利上的能力
- 獲取數據:可以選擇使用TuShare、通聯、萬得等數據工具下載數據,並將原始的數據格式轉化為你自己想用的數據格式(可以用Python腳本實現),以保存到資料庫中
- 存儲數據:幾乎絕大部分常用的資料庫都提供了Python介面,SQL/NoSQL/HDF5等等多種,最常用的應該是MySql和MongoDB,有興趣學Q的也可以直接去用KDB+,資料庫具體會應用的方向包括保存數據、讀取數據、數據補全機制、數據變頻(TICK變K線等)
- 數據回測:將數據讀取到內存中後(以numpy數組或者pandas序列的形式),進行策略的回測,並對回測結果進行研究(matplotlib繪圖),或者對參數進行優化(scipy等)
- 建模相關:對數據進行一些統計學檢驗(statsmodel)以及機器學習建模(scikit-learn)
- 集成開發環境:在有針對性的IDE中實現以上步驟會更加簡便快捷(ipython/spyder)
- 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++的代碼,速度完全不用擔心。一些有特別需求的人也可以考慮開發在瀏覽器中顯示的界面,比如經常想用手機遠程監控。
目前就想到這些,回頭髮現遺漏的再補充。
-----------------------------------------------------2015年8月6日更新----------------------------------------------
個人的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
python不熟,不敢吹牛B,以下話信一半就行,已經邀請男神 @Jianchi Chen 和用python的trader @陳大有
說下自己預備的學習計劃:python基礎編程,必須掌握,不僅僅是會語法,還有各種語言細節的坑(當然比C++少很多)。對於常年使用R MATLAB SAS的研究人員來講,python有很多更偏向程序員的表達方式,需要轉換下思維適應。然後就是各種庫pandas:原AQR資本的員工寫的一個庫,專門用來處理panel data這種數據結構的,幾乎是處理金融時間序列的標配了。scipy, numpy:科學計算的庫,類似於一個小型matlab或者octavestatsmodels : 看名字就知道,統計分析的包。scikit-learn: 這個包是做python做機器學習的庫,地位很高。matplotlib : python的作圖庫。如果你喜歡R的ggplot, 現在也有python的版本,貌似還不成熟。此外ipython的notebook是一個做研究的利器,類似於mathematica的notebook,可以記錄自己trail and error的過程。
對於國內來講,有兩個項目比較火一個是獲取金融數據的TuShare -財經數據介麵包 還有一個就是開源交易平台vn.py ,作者就是 @陳大有。
此外還有若干使用python的量化平台可以嘗試, 比如國內的優礦 - 通聯量化實驗室 (RiceQuant - Beta用的是java,感謝 @錢程 指正),國外的Quantopian和https://www.quantconnect.com/
如果要做衍生品定價, 學學swig直接在python里調用quantlib, 目前有兩個項目 enthought/pyql · GitHub 和 https://pypi.python.org/pypi/QuantLib-Python。
寫策略需要了解的語法包括兩方面,一方面是語言本身的語法(包括相關庫),另一方面是量化平台提供的api。量化平台提供的api幫助文件里都有了,大家可以很方便的在這個網址查看:http://quant.jd.com/help。本文主要介紹寫策略經常用到的庫(datetime、numpy、pandas)中的一些函數。
1、 利用datetime庫做日期、時間操作
利用context.now可以獲得當前策略運行的時間,返回的是datetime.datetime格式。datetime.datetime格式可以很方便的進行日期、時間操作。比如timedelta可以很方便的在日期上做日、小時、分鐘、秒的運算。例如,需要策略運行時間1天前的時間,可以這樣寫:context.now+datetime.timedelta(days=-1),返回的便是一天前的時間。
2、 利用pandas做數據變頻。
量化平台一般只提供分鐘或者日頻的數據,如果我們需要周、月的數據怎麼辦呢?pandas的resample函數可以很好的解決這個問題。舉個例子,假如我們需要滬深300每月最後一個交易日的收盤價,我們可以這樣寫:
d= get_history(100,"1d","close")[『000300.SH』].resample(『m』,how=』last』)
更多的關於pandas的內容,可以參考pandas的官網(鏈接:http://pandas.pydata.org/pandas-docs/stable/)以及「利用python進行數據分析」這本書(鏈接:https://item.jd.com/11352441.html)。
3、利用set格式選取交集
有的時候我們利用不同標準會得到不同的股票池,如果想得到不同股票池的共同股票,那麼可以使用set格式。Set格式可以很方便的進行交集、並集等集合運算。這裡舉一個例子,比如我們通過設置一定的財務數據條件會得到一個dataframe,記作df。df的列為股票代碼,但可能並不都是我們所需的,比如我們只想得到滬深300的成份股,那麼可以這樣操作:1、s=get_index_constituents(『000300.SH』) 得到滬深300的成份股。2、z=set(s)
set(df.columns) 得到交集z。3、得到的z是set格式,需要轉換為list格式,可以這樣操作 zl=list(z)。4、利用pandas 函數 篩選出我們需要的個股 d=df.loc[:zl] d即位我們所需要的數據。更多的關於set格式的使用方法,可以參考:http://www.iplaypython.com/jichu/set.html
4、 利用try…except跳過出錯部分代碼
有時候我們會遇到一些不是很重要的問題,但是由於遇到這類問題會報錯,從而影響程序執行,這時我們希望的是忽略這些錯誤就可以了。下面舉一個例子說明try…except 的用法。
比如:我們用p表示一隻股票某一時刻的價格,v表示這隻股票的成交量,我們想計算p/v,但是有可能該股票沒有成交量(停牌,或者漲跌停了)這時直接計算就會出錯,程序會跳出。這是我們可以try…except做如下處理:
try:d=p/v
except:d=0
意思就是如果計算p/v發生錯誤,那麼就將d賦值為0
5、 利用pickle模塊保存變數
有時候我們需要將當前工作空間的變數保存下來,這時可以使用pickle來解決,舉個例子,假如目前工作空間有a,b,c三個變數,我們可以進行如下操作:1、f=open(『file.pkl』,』wb』) 建立一個文件鏈接。2、import pickle;pickle.dump([a,b,c],f) 這樣就可以保存了。讀取時1、f=open(『file.pkl』,』rb』) 2、import pickle;z=pickle.load([a,b,c],f) 這樣將讀取的變數都保存到了z變數中,通過z[0],z[1],z[2]可以獲取a,b,c變數。
想了解更多,歡迎加入京東金融官方交流群:456448095,有任何問題都可以詢問。
很榮幸Ricequant被問題中的其他大牛提到 @親愛的龍哥@電老虎 ,的確我們的交易系統這塊核心是java做的,因為速度和吞吐量的原因,我們也很快馬上推出python SDK,以及research平台,用python的數據分析便利結合java的高效率。您可以使用到我們大量的市場數據和400+的財務數據:RiceQuant - Beta馬上也會有美股數據上線可以玩。
我也希望從python的模塊來分類來介紹一下python在quant屆的應用,你完全可以根據目前的學習情況著重一個個模塊來玩,而所有這些模塊都預安裝在了我們的ipython notebook research平台上,只需要登錄就可以編寫研究以及使用我們的大量高質量數據:
- pandas - Python數據分析模塊
- 我果斷排在了第一位因為對於一個quant來說有一個數據利器才是基礎,正確的思維能節省大量的在數據折騰的時間。
- 必讀blog: http://wesmckinney.com/blog/ &<--- pandas的作者,今年才30歲,很崇拜
- 必讀書:利用python進行數據分析
- rqdata - Ricequant自己開發的數據讀取模塊
- 可以讀取到day bar,contracts information, 分紅,拆分,0風險利率
- 400+財務數據秒級查詢響應:RiceQuant - Beta 組裝成最適合的pandas數據結構便於橫向比較來做選股
- 市場上的個股beta、volatility etc
- 美股數據coming
- talib - 技術分析金融市場
- TA-Lib
- 包括150+技術指標諸如MACD,ADX,RSI,Stochastic, Bollinger Bands, etc
- numpy - Python的基礎科學運算庫
- NumPy — Numpy
- scipy - Python的數學運算、科學計算和工程的生態圈組合
- statsmodels - 可以用來挖掘數據,研究統計模型和進行統計測試。
- 功能包括:
- 線性回歸模型
- Generalized linear models
- 。。。
- http://statsmodels.sourceforge.net/
- cmath - Provides access to mathematical functions for complex numbers
- 9.3. cmath
- sklearn - Python的機器學習模塊
- 在numpy、scipy和matplitlib基礎上構建
- scikit-learn: machine learning in Python
如果您有興趣可以開始申請我們的ipython notebook research Alpha了:RiceQuant - Beta
啰嗦完...預祝各位coder和quant周末愉快~!@親愛的龍哥 基本都答全了,這裡補充一些偏門的玩意。
1. 如果還需要Deep Learning方面的東西的話,可以考慮Theano或者Keras。這兩個東西可能會用在分析新聞數據方面。不過不是很推薦使用這類方法去做量化模型,因為計算量實在是太大,成本很高。
2. 交易框架方面,除了vn.py,還推薦PyAlgoTrade框架,github上可以搜到。私以為這個框架比vn.py牛逼太多了,畢竟是一個在金融IT領域混跡近20年的老妖的作品,架構設計不是一般的優秀。
3. 國內的話,ricequant是個不錯的選擇,雖然使用的是Java,但是團隊我見過,都是做金融IT出身的,基本上都有7、8年以上經驗,底層功底非常紮實,做事情都很靠譜。現在他們也在考慮把SDK擴展到Python這邊。
4. 國內的行情和交易介面,使用的是自己的協議(比如CTP介面使用的是FTD協議),而不是國際上廣泛使用的FIX協議,並且都不開源。如果需要連接行情,還需要考慮將介面SDK為python封裝一下。(修改:評論中有人提到很多券商也開放了FIX介面,不過似乎是在內網使用)
5. 有人談到資料庫了,這裡我也說一下,對於高頻tick級別的數據,其量級可以達到每天TB級別,普通的關係資料庫是扛不住的。如果試圖使用傳統的關係資料庫,比如Oracle之類的可以省省了。對付這種級別的數據,採用文件系統+內存索引會更好。不過這種場景,一般也就是機構裡面能碰到了,個人quant可以不用考慮。對於Quant Researcher來說,編程和量化策略缺一不可。和Quant dev不同,Researcher需要的更多是一種量化策略的解讀、實現、開發新策略的能力就Quant Researcher的Python編程而言,最基礎的是數據分析是必須的。一些參考資料分享給你推薦一些量化投資學習資料(持續添加中...)推薦一些Python入門學習資料(持續添加中...)【資料分享】Python、研究報告、計量經濟學、投資書籍、R語言等!(Book+Video)【散沙】Python科學計算系列初級Quant Researcher,斗膽總結分享一下自己的python學習路徑首先是python的基礎知識:python的基本知識一定要熟練掌握,尤其是python中非常好用的迭代器和解析【量化投資利器Python】基本語法-數據類型1之列表【量化投資利器Python】基本語法-數據類型2之字典【量化投資利器Python】基本語法-數據類型3之元組、集合【量化投資利器Python】條件與循環-if、while、for【量化投資利器Python】神奇的迭代器和解析【量化投資利器Python】基本語法-函數接下來是常用的基本類庫時間庫
常用的時間格式有三種,常用到其之間的互相轉化
1)時間戳(timestamp)的方式:
通常來說,時間戳表示的是從1970年1月1日00:00:00開始按秒計算的偏移量。我們運行「type(time.time())」,返回的是float類型。返回時間戳方式的函數主要有time(),clock()等。
2)格式化的時間字元串,比如"%Y-%m-%d %H:%M:%S"
3)元組(struct_time)方式
【量化投資利器Python】基本類庫-時間NumPy NumPy系統是Python的一種開源的數值計算擴展。 NumPy(Numeric Python)提供了許多高級的數值編程工具,如:矩陣數據類型、矢量處理,以及精密的運算庫。專為進行嚴格的數字處理而產生。 NumPy — Numpy1. NumPy Basics: Arrays and Vectorized Computation可以參考書Python科學計算之numpySciPy SciPy是一款方便、易於使用、專為科學和工程設計的Python工具包。它包括統計,優化,整合,線性代數模塊,傅里葉變換,信號和圖像處理,常微分方程求解器等等。 SciPy.org — SciPy.org可以參考書Python科學計算之scipyPandasPython Data Analysis Library 或 pandas 是基於NumPy 的一種工具,該工具是為了解決數據分析任務而創建的。Pandas 納入了大量庫和一些標準的數據模型,提供了高效地操作大型數據集所需的工具。pandas提供了大量能使我們快速便捷地處理數據的函數和方法。 可以參考書《python for 數據分析》,也可以到這裡下載【資料分享】Python、研究報告、計量經濟學、投資書籍、R語言等!(Book+Video)【量化投資利器Python】基本類庫-Pandas入門1之數據結構【量化投資利器Python】基本類庫-Pandas入門2之數據處理【量化投資利器Python】基本類庫-Pandas進階學完以上三篇教程,pandas的大部分功能已經可以使用,更多功能可以到官網pandas: powerful Python data analysis toolkitctrl+F搜索函數幫助TA-LIBTA-Lib 用中文可以稱作技術分析庫,是一種廣泛用在程序化交易中進行金融市場數據的技術分析的函數庫,提供了多種技術分析的函數,可以大大方便我們量化投資中編程工作。Ta-Lib用法介紹!指標計算和形態識別的編程利器——TA-Libtalib在量化投資中具體的使用例子量化投資學習【TA-LIB】之MACD量化投資學習【TA-LIB】之Bollinger Bands量化投資學習【TA-LIB】之STOCH(KD指標)量化投資學習【TA-LIB】之ATR量化投資學習【TA-LIB】之RSIScikit-Learn是基於python的機器學習模塊,基於BSD開源許可證。scikit-learn的基本功能主要被分為六個部分,分類,回歸,聚類,數據降維,模型選擇,數據預處理。Scikit-Learn中的機器學習模型非常豐富,包括SVM,決策樹,GBDT,KNN等等,可以根據問題的類型選擇合適的模型。在量化投資中具體的使用例子【機器學習】時間序列波動率估計【機器學習】上證指數十年走勢交易策略中的參數優化問題【機器學習】纏論中的線性回歸【機器學習】非參數型聚類分析深度學習簡介SVR預測股票開盤價【機器學習方法研究】——思路整理、支持向量機其他一些以上提到的幾個庫的具體量化策略研究應用。【QLS】線性回歸【QLS】線性相關分析【QLS】斯皮爾曼秩相關係數【QLS-6】過擬合【QLS7】參數估計的不穩定性量化投資學習【QLS-8】之模型設定【QLS9】回歸模型假設的違背【QLS10】回歸分析【QLS12】套利定價理論【QLS15】最大似然法(MLE)【QLS16】ARCH和GARCH【QLS17】多空策略【QLS19】動量交易策略【QLS20】度量動量配對交易策略凸優化(Convex Optimization)介紹!最後還是要說一句,python只是一種工具,重要的還是策略思想,前期可以通過閱讀大量資料獲取,然後自己實驗、分析逐步總結。推薦一些經典書籍和研究報告,可到【資料分享】Python、研究報告、計量經濟學、投資書籍、R語言等!(Book+Video)獲取Quant Interview Books
- 150 Most Frequently Asked Questions on Quant Interviews
- [Mark Joshi]Quant Job Interview Questions And Answers
- [Xinfeng Zhou]A practical Guide to quantitative finance interviews
- Frequently-Asked-Questions-Quant-Interview
- Heard on the Street Quantitative Questions from Wall Street Job Interviews
- The 200 Investment Banking Interview Questions & Answers You Need to Know
投資閱讀書籍
- algorithmic trading winning strategies and their rationale
- barra handbook US
- Encyclopedia of Trading Strategies(交易策略百科全書)
- Inside the Black Box -A Simple Guide to Quantitative and High Frequency Trading(2nd.Edition)
- NASSIM Taleb-Dynamic Hedging
- Options Futures and Other Derivatives 8th - John Hull
- Quantative Trading Strategies
- Quantitative Equity Portfolio Management:Modern Techniques and Applications
- Quantitative Trading How to Build Your Own Algorithmic Trading Business
- Quantitative Trading How to Build Your Own Algorithmic Trading Business
- 《New Trading Systems and Methods》 Perry J.Kaufman 4th Edition.pdf
- 《專業投機原理》 完整版 (美).維可多·斯波朗迪
- 保本投資法 不跌的股票(高清)
- 打開量化投資的黑箱
- 股市趨勢技術分析(原書第9版-珍藏版)
- 海龜交易法則
- 解讀量化投資:西蒙斯用公式打敗市場的故事
- 解密對沖基金指數與策略
- 精明交易者 - 考夫曼
- 量化交易 如何建立自己的演算法交易(高清)
- 量化交易策略—利用量化分析技術創造盈利交易程序
- 量化數據分析 通過社會研究檢驗想法
- 量化投資策略-如何實現超額收益alpha
- 量化投資策略與技術修訂版
- 期權投資策略 第4版(高清)
- 數量化投資:體系與策略
- 通往金融王國自由之路
- 統計套利(中文版)
- 網格交易法 數學+傳統智慧戰勝華爾街
- 我是高頻交易工程師:知乎董可人自選集 (知乎「鹽」系列)
- 主動投資組合管理 創造高收益並控制風險的量化投資方法(原書第2版)(高清)
- 走出幻覺走向成熟金融帝國文集
計量經濟學
- 金融計量學從初級 到 高級建模技術
- 哈佛教材 應用計量經濟學 stata
- 高等計量經濟學 李子奈等編著
- 蔡瑞胸-Analysis of Financial Time Series- Financial Econometrics(2002)金融時序分析
- Phoebus J. Dhrymes, Mathematics for Econometrics, 4e
- Osborne,Rubinstein-A Course in Game Theory
- Model Building in Mathematical Programming(5e)
- Hayashi - Econometrics
- Gujarati-Essentials of Econometrics計量精要
- Akira Takayama - Mathematical Economics
- A Handbook of Time-Series Analysis, Signal Processing, and Dynamics - 1999
- 2013年金融數學
- Angel de la Fuente 經濟數學方法與模型(上財版2003)
- 《經濟學的結構--數學分析的方法(清華版)》Eugene Silberberg, Wing Suen
- Kamien Schwartz, Dynamic Optimization(2ed,1991)
- CSZ - An Introduction to Mathematical Analysis for Economic Theory and Econometrics(草稿版)
研究報告
- 國信證券金融工程
- 大券商2016年年度投資策略報告
- 光大證券
- 海通證券
- 申萬大師系列
- 他山之石系列
- 中信證券
- 廣發證券
用python的交易員和親愛的龍哥 兩位大神都答的差不多了,過來補充一些細節的東西,為了很多Quant熟悉Python,UQER.IO團隊(華爾街量化團隊和本土量化團隊的合體,我們也知道國內有多少老鼠洞^_^)原創了「量化分析師的Python日記系列」, 希望可以循序漸進的讓大家熟悉已經在華爾街非常流行的Python在量化領域(P Quant和Q Quant)的應用
另外補充一下,UQER的基因是基於高盛的slang/secdb以及JPM的athena還有BOA的quartz,從一開始的架構就非常先進,王婆賣瓜的說這是國內很多競品暫時很難追上的(包括某java轉python平台),最多做到形似而已
量化知識篇
1. 《入門系列》
可以參考 第1天:誰來給我講講Python 和 第2天:再接著介紹一下Python唄,講了Python的基本語法、操作,以及幾種主要的容器類型,以及Python的函數、循環和條件、類等,可以很快的入門這門量化領域日益重要的語言2. 《numpy與scipy》
接下來是Python中很重要兩個基礎庫numpy和scipy 第3天:一大波金融Library來襲之numpy篇 和 第4天:一大波金融Library來襲之scipy篇 這個兩個數學的庫是很多其他重要庫的基礎,NumPy提供了大量的數值編程工具,可以方便地處理向量、矩陣等運算,極大地便利了人們在科學計算方面的工作,SciPy基於NumPy提供了更為豐富和高級的功能擴展,在統計、優化、插值、數值積分、時頻轉換等方面提供了大量的可用函數,基本覆蓋了基礎科學計算相關的問題。3.《數據處理的瑞士軍刀pandas》
參考 第5天:數據處理的瑞士軍刀pandas 和 第6天:數據處理的瑞士軍刀下篇 pandas是Python在數據處理方面功能最為強大的擴展模塊。在處理實際的金融數據時,一個條數據通常包含了多種類型的數據,例如,股票的代碼是字元串,收盤價是浮點型,而成交量是整型等。在C++中可以實現為一個給定結構體作為單元的容器,如向量(vector,C++中的特定數據結構)。在Python中,pandas包含了高級的數據結構Series和DataFrame,使得在Python中處理數據變得非常方便、快速和簡單。強烈推薦掌握!!!4. 《P Quant系列》
阿爾法對沖中單一信號研究的過程 量化入門進階之葵花寶典:因子如何產生和回測 在關於pandas的前兩篇介紹中,我們已經接觸了不少關於Series和DataFrame的操作以及函數。本篇將以實際的例子來介紹pandas在處理實際金融數據時的應用。因子選股是股票投資中最常用的一種分析手段,利用量化計算的因子從成百上千的股票中進行快速篩選,幫助投資者從海量的數據中快速確定符合要求的目標,我們在本篇以量化因子計算過程的實例來展示如何利用pandas處理數據5. 《Q Quant系列》
a.第7天:Q Quant之初出江湖 如何使用python內置的數學函數計算期權的價格,利用 numpy 加速數值計算,利用 scipy 進行模擬模擬和求解器計算隱含波動率,使用matplotlib繪製精美的圖表b.第8天:Q Quant兵器之函數插值 如何在scipy中使用函數插值模塊:interpolate;波動率曲面構造的原理;將interpolate運用于波動率曲面構造。c.二叉樹,偏微分方程與BSM系列: 第9天:Q Quant兵器譜之二叉樹 和 第10天: Q Quant兵器譜之偏微分方程在這裡也想聽聽各位的反饋,我們後續會繼續原創內容
量化策略篇
社區里有很多大牛的策略,在這裡摘選幾個有特點的
1. 互聯網+量化投資 大數據指數手把手 實現了一個開源的大數據指數,可以pk百度大數據和阿里大數據指數
2. 通過神經網路進行交易 使用了著名的pybrain
~~~~~~~~~~~~~~~~~~~~~華麗的分割線~~~~~~~~~~~~~~~~~~~~~
碼了那麼多字,也該來打個廣告了,quant會python以後就可以無敵的來參加國內第一個基於瀏覽器的眾包版對沖基金了
優礦 - 通聯量化實驗室
數據分析的python軟體包不能算是嚴格的Python知識吧?嚴格來說,熟練使用那些軟體包更多的還是依賴於金融市場,數理統計方面的知識,因為軟體包的API通常都是這些領域知識的術語。
作為一個quant, 這個問題(一個這時候的quant應該學習哪些Python知識)的必要性在於,Python在這個領域真的是很火,一句不過分的話說「華爾街以前運行在Excel上,今後會運行在Python上」 (當然技術上來講,這並非事實,要說這個可能性的基礎,從編程語言上來講,還得是C/C++,這裡的說法更多是體現在Python語言作為一種最接近用戶層面的語言的流行度而來的, 同時即便從這個意義上來講,現在流行的還有R, Matlab, Q(在一些知名銀行很流行)等)。
以熟練掌握Python為目標,可以這樣來關注Python:
- Python是一門什麼編程語言,它的顯著優勢和劣勢分別是什麼
- Python編程環境的快速搭建(包括包管理(現在pip正在被標準化),編輯器,以及調試工具)
- Python最被廣泛認同的編碼規範和最佳實踐是什麼 (e.g., ("a" + "b") VS. "".join(["a", "b"], 這一點被很多初學者所忽略(「為什麼不呢?反正我的代碼運行正確了。」),但是如果學習者最初花多一點時間來回答這個問題(「雖然有多種選擇,但是哪種選擇在這個時候最合適」),或者說建立起來這樣一種思考方式,你將很快的超越自己,成為別人眼中的專家。)
- Python內建的主要的數據類型(int, long, str, tuple, list, dict, heapq, deque - 內建的標準庫中並不包含像C++裡面那樣豐富的數據結構,Search Tree, Binary Search Tree, AVL/Splay/Red Black Tree, Graph等, 不過這些非線性的數據結構都可以在PyPI中找到),以及它們的常用API(這也正是Python的閃光點之一,即最初的編程效率的來源)。
- Python的常用標準庫(Python擁有非常易用和功能完備的標準庫,使得Python在安裝之後就能應付大量問題,如字元處理,文件系統,HTTP, 常見數據文件處理等。語言的維護者早期應該是希望賦予Python以明朗的模塊組織結構,對於某類具體問題都存在一個明確的甚至是唯一的模塊,但是隨著這些年Python的流行,第三方包的大量增加,這種初衷現在面臨不少挑戰。直觀的結果是,在Python 2.X的版本里,你會找到像urllib2這樣命名的模塊。現在的Python 3所作出的眾多努力中就包括對這些模塊組織上的歧義進行整理。總的來說,用戶仍然還是可以迅速的回答「我該使用哪個模塊」這個通常需要不少經驗的問題。)
- Python的面向對象範式怎麼使用(如何在此理解上可靠的實現封裝,重用,繼承,覆蓋)
- Python在處理網路編程上的常見方案,常用標準包及第三方包(這本身是一個豐富的話題,同時也幾乎不可避免,熟練掌握這個話題需要多年的經驗,深層次的理解更需要系統的計算機科學知識,但是你可以從其中某一個具體的方案開始。Python內建標準包提供幾乎所有層次的網路編程術語,你可以工作在從IP到應用的所有層面。)
- Python在處理CPU密集型運算時候採用的流行解決方案,以及它們的工作原理大致是什麼(這個理解可以幫助你以不變應萬變的從眾多第三方方案中選擇合適的候選者。流行的方案一般是通過Python &<-&> C/C++/Fortran互操作,可能會使用一些元編程語言(比如Cython)來進行language translation/generation,也有可能直接從C/C++/Fortran編寫的軟體中來生成二進位編程界面或者應用編程界面(取決於生成的過程是利用二進位文件(.lib, .so)還是源文件),甚至更新的嘗試會利用到一個多階段的源代碼處理管道,從Python源代碼,中間C/C++代碼,再到LLVM將Python代碼(目前比較成功的方案似乎支持到Python的一個理想子集)實時生成對應的機器碼。理解這一原理將幫助你克服Python在CPU密集運算時所遇到的瓶頸,同時我認為如果你將為你所在的部門構建一個基於Python的數據分析平台(幾個華爾街的投行有在做這件事情),理解這個是至關重要的。)
謝邀,blpapi
# ------------------ 更新 2017.07.27 ----------------- #
又過了一年多,過來更新一下。
Quant應該打好演算法與數據結構的基本功。
改變編程的大局觀。
# ------------------ 更新 2016.09.30 ----------------- #
過了三個月,再來更新一下:之前說的那些Python庫更多是做Quant Researcher用的多。如果是做Quant Developer還需要補充一些其他的知識(現在這兩個角色的界限也越來越不清晰,除非做一些性能需求特別高的交易平台)作為一個Quant Developer,我認為如下知識是必備的:
0. 面向對象。對絕大多數情況,性能不是瓶頸,維護和拓展才是瓶頸。
0. 學會Markdown,寫好函數的doc。1. 在可能的情況下遵守:PEP8。附上最佳實踐:PEP8: The Style Guide for Python Code2. 良好的(典型的)Python項目結構,避開常見的Python坑,比如字元編碼,可變參數的傳遞。3. 可能的情況下,視同Python的典型用法,比如用字典Map函數,而不是很長的if...elif...else.。附上最佳實踐:The Hitchhiker』s Guide to Python!4. Web框架。因為很多時候quant需要跟Trader配合,給他們提供工具。這時候就需要一個好用的Interface供trader使用。別指望他們都會在Terminal 下面使用你的工具。附上強大的輕質高強web框架:Welcome | Flask (A Python Microframework)5. PyQt。同於跨平台窗口界面。一方面是給Trader提供操作界面,另一方面給自己提供方便。6. Fabric(Welcome to Fabric!):給Terminal下工作的Python Quant提供的福音。誰用誰知道。7. 資料庫的Python介面。常見的兩類SQL類和NoSQL,分別對應兩個典型的庫:MySQL for Python download和PyMongo 3.4rc0 Documentation。在推薦一個Mongodb的高性能python庫:https://github.com/manahl/arctic。這個庫是Man Group開源出來的高性能資料庫介面,易用性能好,親測有效,千萬級別數據無任何不良反應,介面簡單。8. Unit test。 特別是當項目變大的時候,這個可以防止項目退化。25.3. unittest9. Git (好吧,這個跟Python沒啥關係,但是應該會的)哦,最後在安利一下:jetbrains.com 的頁面
放下你手中七七八八的IDE吧,放下Emacs吧,乖乖的PyCharm。不久你就會發現上面說的1,2,3自動被IDE教給你了。哦,你可以繼續你的Emacs鍵位。。。。。哦,git也幫你搞定。。。。。
哦,學點機械鍵盤的知識,買一個,然後生活就變的更簡單了。Easy coding
# ----------------------------- 以下是原文 ------------------------ #
嘻嘻,見到了知乎上各大quant的發言,感覺特別激動!我是轉行過來的,一點點經驗:首先是Python本身:
- 推薦幾個quant會經常用的collection: list, dict, defaultdict, Orderdict, Queue
- 並行處理 Pool.map()然後是實用的庫:
1. Pandas
這個誰用誰知道哈,特別適合處理時間序列。DataFrame 和 Series 兩個數據結構是核心,有很多方便的功能。列舉幾個非常給力的:
- pct_change(): 計算簡單回報
- shift(): 偏移數據
- rolling(): 滾動計算,可以自定函數
- groupby(): 分組
經驗就是:想實現某個功能之前先google已有的method,效率非常的高。
2. Numpy
這個庫幾乎是所有Python數值計算庫的基礎,經驗就是,用好mask索引和reshape。想辦法把問題矩陣化,然後用自帶方法計算,不寫循環。3. StatsModels
傳統統計模型庫, 中規中舉,功能很全,而且輸出的結果非常具體。4. PyMC3
Bayesian 統計模型。 如果你是Bayes派。。。這玩意我剛發現的,感覺異常給力!5. CVXOPT
這個是優化分析的庫,一般做allocation的時候會用,很快。6. 雜七雜八的庫
Python就是好在,基本上你所有的需求。。。都能找到一個庫。。。
推薦一門coursera的公開課 https://class.coursera.org/course/compinvesting1
喬治亞理工的公開課,主要介紹了qstk軟體包, http://wiki.quantsoftware.org/index.php?title=QuantSoftware_ToolKit#Documentation 目前正在學習中。我可以做一個大膽的預測,Bloomberg 的Bquant 發布後,用python 的quant 會越來越多。關於Bquant 的介紹,可以看我的介紹Bquant的兩篇文章。
如果你對傳統工程師怎麼轉行quant 感興趣話,可以看我另一個回答:傳統工科怎麼轉行quant。
我沒做過量化交易,但是我隔壁的哥們在做這方面的東西,他用的R語言,用到的技術嘛,我也打聽到了,非實戰人員,說的不對別打我。
1.說到量化交易,肯定會用到數學,統計知識,那numpy這個包就不可少,當然像scipy也是可以用到的,還有一些你接收的網上很多公司提供的介面數據喜歡用pandas包裝,所以pandas你也需要去學習一下,最近又知道一個叫numba的包也不錯。
2.剛剛提到說接收網上很多公司的介面,那如果自己想做一些數據保存,你可以存到excel 中,那這時 xlrd,xlwt就必不可少了,當然csv你也需要了解。有時公司又來個新的方案,比如新聞數據的分析什麼的,他們都放在非關係型資料庫里讓你使用,此時你需要pymongo進行讀取(我司是這麼放的),當然你也可以把你每天的數據存入到mongodb中。
3.然後說了這麼多還沒到怎麼寫量化演算法,說到演算法包,我想你應該要記住一個牛逼的scikit-learn的包,各種碉堡的演算法一應俱全,省的你再去造輪子。
4.說了這麼多,想給老大交差,說你的這個策略回測結果咋咋牛逼。你總不能拿個資料庫,excel表給老大看吧。所以此時你需要用上matplotlib這個可視化的包,當然了seaborn這個也不錯,底層是matplotlib。
可能會有遺漏,比如量化方面的專門的包,這個我沒接觸,所以也不是很清楚。我覺得熟悉python內各種繪圖命令很有必要
python相關的庫/項目/資料庫里,投入產出性價比在第一梯度的有numpy,pandas,vn.py;性價比第二梯度有statsmodel,scipy,pyqt,matplotlib,re,mongodb,SQL,tushare;性價比第三梯度的有zmq,pyqtgraph,redis。
建議從vn.py和pandas開始入手。python我學過最簡單的計算機語言了glue language加油 好好學了
和python相關的就是pandas,numpy,以及talib這套寫好的指標庫,也可以自己寫策略,或者對talib進行擴充,反正我就不太習慣talib.另外我覺得市面上還缺乏圖形模式識別的庫,比如headshoulder, breakout resistence line等等, 最後題外話,關鍵的是開發策略。工具什麼的都在其次。我很好奇世上真有能用的全自動化策略?
推薦閱讀:
※在投行或券商當數據科學家 (Data Scientist) 是什麼體驗?
※金融風險管理 (Financial Risk Management) 對編程的要求有多高?
※在策略參數優化時,如果無法得知參數集的目標函數分布,如何判斷參數是否穩健?
※結構化(多因子)風險模型中,怎樣理解因子暴露度,在實踐中如何得到它?
※程序狗沒有金融學位申請Quant職位會遇到瓶頸么?