PyAlgoTrade框架研究

最近研究量化交易,看了幾個回測的框架,最後盯上PyAlgoTrade這個項目。感受很不錯,支持
策略回測和實盤交易,提供全面的技術分析接口,算是python的量化交易框架裏比較出色的做品。因此對這個框架進行了一番研究。python

程序化交易系統的編程範式:事件驅動的編程

量化交易,通常是採用統計學和數學工具,對資產的各個方面進行定量分析,並制訂程序化的交易策略嚴格執行來得到收益。這裏面有兩大核心任務,
一個是數據分析,一個是程序化交易。git

與純粹的數據分析不一樣,由於有交易動做的存在,同時,在實盤交易中,還要實時更新價格、成交量等數據。這裏面能夠很明顯的看到系統的結構:github

數據分析模塊----行情接口和數據源----交易訂單管理模塊----交易下單API編程

這幾個模塊之間還存在狀態一致性的維護。所以,交易系統的設計,通常採用事件驅動的設計。好比MetaTrader 4的設計,MQL也是採用事件回調來計算指標或者進行EA交易。PyAlgoTrade也是基於這個理念開發的。PyAlgoTrade本身封裝了一套事件分發機制,具體的實現能夠參考:
observer
dispatcher這兩個模塊數據結構

數據結構的取捨

量化交易中的數據以資產價格或者成交量的時間序列爲主,這類序列化數據的分析框架有不少。大部分的科學計算框架,好比:Numpy、SciPy、statsmodels、scikit-learn等等,都支持序列或者Array的分析。在Python的科學計算框架體系中,Numpy是核心,其核心的ndarray數據結構也被普遍使用於其餘數據分析框架之中。可是儘管ndarray適用於分析領域,在程序化交易中,仍然但願數據結構內的變化依然能有一個對外的通知,須要一個帶有事件支持的數據結構。所以PyAlgoTrade並無採用ndarray或者pandas的dataframe做爲基礎數據結構,而是自行封裝了一個DataSeries結構,以及針對每一個K線或者蠟燭圖的Bar結構。框架

與數據分析框架的整合方式

儘管由於需求的緣由,須要單獨實現一套數據結構,可是要使用主流的分析框架,依然須要使用ndarray這樣的數據結構。這裏就存在一個數據轉換的問題。同時,因爲實盤交易的緣由,PyAlgoTrade策略實現上,以複寫onBars方法(其意義與MQL中的onTick方法相似)爲主,所以也是須要每次更新Tick數據就進行一次計算。
這裏就涉及到一個移動窗口問題。PyAlgoTrade也對此作了必定的封裝。這裏能夠參考:
technical.EventWindow這個類。
talibext.indicator模塊中包含了talib的封裝。工具

相關文章
相關標籤/搜索