由于最近本身在研究怎么样作期货和股票的交易,其中涉及到对交易系统的测试。能够直接作手工测试,可是为了提升效率仍是想要研究一下怎么作到自动来作历史数据的回测。经过网上搜索找到了Backtrader 这个工具。下面和你们简单介绍一下这个工具。html
Backtrader 是一个基于Python语言的进行自动化回溯测试的平台。能够添加自定义的指标和交易策略,提升对交易系统回测的效率。工具
这个工具能够导入本身的行情数据文件,也能够添加自定义的指标。 测试结束后能显示指标和行情图表,并且能够对指标的不一样参数设置进行批量测试。测试
MA均线应该是最经常使用的指标之一了。那么下面就使用两条简单MA均线的交叉来做为交易策略。 具体代码以下:.net
from datetime import datetime import backtrader as bt #新建均线交叉的交易策略,快线是10周期,慢线是30周期 class SmaCross(bt.SignalStrategy): params = (('pfast', 10), ('pslow', 30),) def __init__(self): sma1, sma2 = bt.ind.SMA(period=self.p.pfast), bt.ind.SMA(period=self.p.pslow) self.signal_add(bt.SIGNAL_LONG, bt.ind.CrossOver(sma1, sma2)) # 新建回测平台实例 cerebro = bt.Cerebro() # 在线下载雅虎的特定时间段的股票行情信息 data = bt.feeds.YahooFinanceData(dataname='YHOO', fromdate=datetime(2011, 1, 1), todate=datetime(2012, 12, 31)) # 添加刚刚获取的股票行情信息 cerebro.adddata(data) # 添加交易策略(交易系统或交易方法) cerebro.addstrategy(SmaCross) # 运行交易回测 cerebro.run() # 显示测试运行后的图表 cerebro.plot()
上面的代码中,首先是创建均线交叉的交易策略,而后获取股票的行情数据,最后加载数据和交易策略并运行,最后显示图表。code
其中获取期货行情数据的方法能够参考这篇文章: 《 利用Python脚原本获取期货行情数据》htm
本身以前阅读过的交易相关书籍《走进个人交易室》,本书做者埃尔德博士的观点是,最好经过手工测试的方法来对本身的交易系统进行检测。而不是经过使用自动化工具来作检测,若是对本身的交易系统不是特别熟悉和了解的状况下,只是使用自动化工具来测试,这样的意义不大。毕竟真实的交易环境是很是复杂的,特别是止盈和止损单的设置等。若是只是经过自动化工具来测试了交易系统,那么有一些细节问题可能只会到实盘的操做时才发现。相比来讲经过手工每次展现一根K线的模拟方式来测试,才更加接近实盘操做,这样也培养了交易的感受和加强了对交易系统的信心。blog
那么Backtrader这样的回测工具备什么用处呢?我理解主要是能够对指标的不一样参数设置作测试。例如MA均线能够设置不一样的时间长度,那么什么样的参数设置的效果更好呢?若是经过人工手动将每一个参数都测试的话,那么就会很繁琐。因此能够经过工具来寻找交易系统中使用到的每一个指标更好的参数数值。get
参考文献:it
https://www.backtrader.com/自动化
https://www.backtrader.com/docu/index.html
《走进个人交易室》 著 亚历山大 埃尔德