已有過去十多年所有A股的日線資料(資料大概也就幾百兆大小),想對一些策略進行回測,看下其收益率,最大回撤等等。python正在自學,學了大概一個多月,會一些基本的編程。matlab沒接觸過。想問下策略回測用哪個工具效率更高?
--- --- ---
補充一下,下面有人提到幾百兆資料不大,然而我在用python處理這些資料的時候經常提醒我memoeyError,請問應該怎麼解決這個問題?
回複內容:
首先十年的日層級資料量的確不大,使用Python來說的話不應該出現memoryerror,應該是在編程方面需要再多留意,我們在Ricequant上使用的分鐘資料大概是200-300個GB左右,也是Python和Java共同合作完成的。
語言只是一個語言,興許會有各種文法的不同,但是在談語言的時候我們需要瞭解背後的工具箱和社區,以及它為什麼處理一些事情比另外的一些語言要好。
本身Python初期用來做金融回測等是應該被放棄的,用來開發策略也應該是被放棄的,因為相比matlab的矩陣運算來做開發,實在是太方便了。只不過後來Python推出了series、pandas等一系列的強悍library,pandas的文法基本在“無恥”地模仿matlab和R,而pandas的開發人員正是美國大名鼎鼎的對沖基金AQR,因此使data crunching和對資料的一些操作大大便利,此外,又封裝了海量的開源社區的數學和科學計算庫,也能處理各種的machin learning等等的問題。
從科學計算的語言的發展來看,從最初的人們對浮點數計算的需求加入了fortran,再一路進行,讓工具更加的讓科學計算容易再容易(Python也封裝了大量早期的數學家們用fortran寫的數學計算基礎庫,這些經曆了幾十年的考驗、加速等等):
我們來看下python目前的科學技術棧:
- numpy: basic array manipulation - 基礎的數組處理
- scipy: scientific computing in python, including signal processing and optimization - 科學計算,包括訊號處理和最佳化等
- matplotlib: visualization and plotting - 幾行代碼就可以做圖形化顯示了
- IPython: write and run python code interactively in a shell or a notebook - 互動式編程環境,這是能將來替代掉matlab的一個必備,即在一行一行代碼的輸入、顯示過程中學習、改進
- pandas: data manipulation - 最重要的矩陣運算等
- scikit-learn: machine learning - 機器學習
但是隨著以後的發展Python的開源屬性就會體現的越來越強大,可以讓更多的人享受到其便利和貢獻進來,包括Quantopian也放出了zipline的python回測架構,只需要引入yahoo資料即可進行回測,並且Python的速度由於跟C的很好的結合可以達到非常快的速度,而且可以將來和其他系統很容易整合對接實盤交易介面。
由於歐美已經有很多的投行和對沖基金在往Python的技術棧靠攏,因此選擇了Python即掌握了一門重要的工具,並且無需跟一家私人化公司進行捆綁。
當然,最後的最後,所有的python回測你都可以來Ricequant - Beta
上完成,我們支援海量的市場、財務資料,還有不斷加入的和大資料公司合作的輿情資料等等,同時策略回測完還可以做即時類比交易,享受到即時資料的計算。在雲平台上已經支援了幾乎所有的Python科學計算庫,無需花時間安裝、測試等等。我沒錢,支援免費開源
拋開著作權不說,初期入手策略測試、資料分析用matlab非常方便
但是策略測試方法、架構弄清楚後,要做正規的回測,還是Python方便,這裡的正規是指嚴格的事件流驅動,雖然速度慢,但是避免未來函數影響、接近實盤的邏輯。Python在這方面已經有很多庫了,quantopian的zipline應該算鼻祖了,國內的優礦網和ricequant都跟zipline很像,另外還有知乎大神的vn.py,PyAlgoTrade等語言就是用來幹活的,中間檔案用HDF5或者csv轉存,需要時間序列分析的時候上R.畢竟Python的sm庫還是很爛的,但是PCA和大量的多因子計算,Python R MATLAB都差不多。
回測講究並發效率和一些多參數回測的參數調優以及一些MC方法的估計時,py運行效率(相對於MATLAB)會高一些
總體來說,別太把語言當回事,就跟吃飯用筷子還是勺子還是叉子,要根據食材來幾百兆資料算個錘錘啊……64位下的Python吃個幾GB記憶體也不會咋地啊……如果真報錯,記得檢查一下代碼和演算法有沒有什麼問題。萬一未經處理資料幾百兆但是演算法裡來個空間複雜度指數級那也沒救不是麼……
同樣的東西,如果matlab上跑得起,Python一般也跑得起;萬一跑不起,拆分一下跑並行,兩者也都能做到。建議對編程不瞭解同時也沒打算怎麼學編程的用matlab之類;反之對編程有興趣想學的選Python。隨便用什麼,幾百G的資料很小了,當然你要是直接readfile之類讀整個檔案。。。
最簡單的就是資料匯入到資料庫裡,mysql,postgresql之類,然後就easy了。我有兩個員工用matlab,但我自己一般用python和R如果有錢買授權可以選matlab,如果沒錢建議不要用盜版,python非常好用2個都可以,但是沒有資料,所以用天軟吧!就題主的介紹,我建議選擇python,
一、Python已經在學習了,matlab還沒有學習
二、Python是開源的,並且也有很多量化交易平台使用python語言,比如我在使用的
https://www.joinquant.com
,之前自己在本地做回測時也經常出現題主說的memoeyError ,現在我不再需要擔心,JoinQuant的工程獅們已經幫我解決了,並且這裡的回測不限制記憶體,而且還有我最喜歡的類比交易提醒功能。
三、必須要說Python是量化投資利器,優點慢慢介紹。
題主主要目的是想對一些策略進行回測,看下其收益率,最大回撤等,其實這就是所謂的Quant Researcher,對他們來說,編程和量化策略缺一不可。和Quant dev不同,Researcher需要的更多是一種量化策略的解讀、分析、開發新策略的能力。
題主還需要增加自己的python編程能力,最基礎的是資料分析是必須的。一些參考資料分享給你
推薦一些量化投資學習資料(持續添加中...)
推薦一些Python入門學習資料(持續添加中...)
【資料分享】Python、研究報告、計量經濟學、投資書籍、R語言等!(Book+Video)
【散沙】Python科學計算系列
我是從matlab轉過來的初級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 — Numpy
1. NumPy Basics: Arrays and Vectorized Computation
可以參考書Python科學計算之numpy
SciPy
SciPy是一款方便、便於使用、專為科學和工程設計的Python工具包。它包括統計,最佳化,整合,線性代數模組,傅裡葉變換,訊號和影像處理,常微分方程求解器等等。
SciPy.org — SciPy.org
可以參考書Python科學計算之scipy
Pandas
Python 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-LIB
TA-Lib 用中文可以稱作技術分析庫,是一種廣泛用在程式化交易中進行金融市場資料的技術分析的函數庫,提供了多種技術分析的函數,可以大大方便我們量化投資中編程工作。
Ta-Lib用法介紹!
指標計算和形態識別的編程利器——TA-Lib
talib在量化投資中具體的使用例子
量化投資學習【TA-LIB】之MACD
量化投資學習【TA-LIB】之Bollinger Bands
量化投資學習【TA-LIB】之STOCH(KD指標)
量化投資學習【TA-LIB】之ATR
量化投資學習【TA-LIB】之RSI
Scikit-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年年度投資策略報告
- 光大證券
- 海通證券
- 申萬大師系列
- 他山之石系列
- 中信證券
- 廣發證券
Matlab做矩陣計算超級方便,幾乎就跟手寫方程式一樣簡單,基本不用學習太多程式設計語言的東西,而且它畫各種二維三維的曲線圖也非常的簡單,是演算法研究的不二之選。
但是Matlab死貴,實際使用的人少,如果你想找開源的資源比較難。
Python用起來方便,開源的資源多,但是文法比Matlab複雜好多,要自己實現很多演算法,畫圖更加是軟肋。
實際上用 python + Matlab 可能會更好。
Python可以用於未經處理資料的採集和預先處理。
Matlab用於資料分析和演算法研究。