PyAlgoTrade量化交易回测框架官方示例详解
我们来学习如何利用PyAlgoTrade
开源库定义获取数据和跑策略。
打开PyAlgoTrade
官网可以看到他提供了一些案例。
http://gbeced.github.io/pyalgotrade/docs/v0.20/html/tutorial.html
通過这段代码可以拿到数据:
python -m "pyalgotrade.tools.quandl" --source-code="WIKI" --table-code="ORCL" --from-year=2000 --to-year=2000 --storage=. --force-download --frequency=daily
拿到的数据格式如下图:是csv
文件格式。
如果你想做一个简单的交易策略,这是示例的代码:
from pyalgotrade import strategy
from pyalgotrade.barfeed import quandlfeed
class MyStrategy(strategy.BacktestingStrategy):
def __init__(self, feed, instrument):
super(MyStrategy, self).__init__(feed)
self.__instrument = instrument
def onBars(self, bars):
bar = bars[self.__instrument]
self.info(bar.getClose())
# Load the bar feed from the CSV file
feed = quandlfeed.Feed()
feed.addBarsFromCSV("orcl", "WIKI-ORCL-2000-quandl.csv")
# Evaluate the strategy with the feed's bars.
myStrategy = MyStrategy(feed, "orcl")
myStrategy.run()
首先需要引用strategy
和quandlfeed
,strategy
用于计算指标和回测数据,quandlfeed
是提供数据的。
然后定义了一个叫做MyStrategy
的类,它继承于strategy.BacktestingStrategy
,可以通过设置一些数据集,设置股票代码,设置技术指标就可以运行了。
init函数传递2个参数,feed表示数据集,instrument表示股票代码。
super(MyStrategy, self).__init__(feed) #调用父类的构造函数。
self.__instrument = instrument #将股票代码传递给当前的类
def onBars(self, bars): #设置一些K线的数据
bar = bars[self.__instrument] #接收股票代码
self.info(bar.getClose()) #打印一些信息
上面就完成了策略的定义,接下来需要传递数据。
feed = quandlfeed.Feed() #构造feed类
feed.addBarsFromCSV("orcl", "WIKI-ORCL-2000-quandl.csv") #从csv的文件里面加载股票代码
WIKI-ORCL-2000-quandl.csv
这个csv
文件待会我们通过quandlfeed
获取。我们用这个开源的框架提供的数据来测试,因为有一些格式,比如date和datetime格式不一样,数据的格式不一样,如果你的数据来源和它给的格式不一样,你可能就需要自己去修改它的数据读取的代码来适配你的数据格式了。
myStrategy = MyStrategy(feed, "orcl") #评估交易策略,实例化MyStrategy类,然后传递数据集和"orcl"这个数据代码的唯一标识
myStrategy.run() #跑策略
運行这个例子 你就会看到数据结果长这样
我们直接将这段代码拿过来,放到我们的项目里:
现在运行会报错
提示没有这个数据文件,那怎么获取这个数据文件
谷歌搜索一下:Pyalgotrade
量化交易
首先需要安装:
pip install pyalgotrade_tushare
from pyalgotrade_tushare import tools, barfeed
# Load the bar feed from the CSV file
instruments = ["000001"]
feeds = tools.build_feed(instruments, 2016, 2018, "histdata")
print(feeds)
# Evaluate the strategy with the feed's bars.
myStrategy = MyStrategy(feeds, instruments[0])
myStrategy.run()
运行可以看到成功输出了数据:
回到官方文档往下看:让我们继续使用打印收盘 SMA 价格的策略,以说明如何使用技术指标:
SMA
就是Simple Moving Average
#使用pyalgotrade进行数据回测
import pyalgotrade
from pyalgotrade import strategy
from pyalgotrade.barfeed import quandlfeed
from pyalgotrade_tushare import tools, barfeed
from pyalgotrade.technical import ma
def safe_round(value, digits):
if value is not None:
value = round(value, digits)
return value
class MyStrategy(strategy.BacktestingStrategy):
def __init__(self, feed, instrument):
super(MyStrategy, self).__init__(feed)
# We want a 15 period SMA over the closing prices.
self.__sma = ma.SMA(feed[instrument].getCloseDataSeries(), 15)
self.__instrument = instrument
def onBars(self, bars):
bar = bars[self.__instrument]
self.info("%s %s" % (bar.getClose(), safe_round(self.__sma[-1], 2)))
# Load the bar feed from the CSV file
instruments = ["000001"]
feeds = tools.build_feed(instruments, 2016, 2018, "histdata")
print(feeds)
# Evaluate the strategy with the feed's bars.
myStrategy = MyStrategy(feeds, instruments[0])
myStrategy.run()
运行:
到这里 我们就完成了数据获取到数据定义,以及创建自己策略的过程。