最近研究量化交易,看了几个回测的框架,最后盯上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的封装。工具