Python量化交易实战-35PyAlgoTrade量化交易回测框架官方示例详解

auto-trade 虚幻 1085℃ 0评论

PyAlgoTrade量化交易回测框架官方示例详解

我们来学习如何利用PyAlgoTrade开源库定义获取数据和跑策略。

打开PyAlgoTrade官网可以看到他提供了一些案例。

http://gbeced.github.io/pyalgotrade/docs/v0.20/html/tutorial.html

20210630183019 - Python量化交易实战-35PyAlgoTrade量化交易回测框架官方示例详解

通過这段代码可以拿到数据:

python -m "pyalgotrade.tools.quandl" --source-code="WIKI" --table-code="ORCL" --from-year=2000 --to-year=2000 --storage=. --force-download --frequency=daily

拿到的数据格式如下图:是csv文件格式。

20210630183133 - Python量化交易实战-35PyAlgoTrade量化交易回测框架官方示例详解

如果你想做一个简单的交易策略,这是示例的代码:

20210630183331 - Python量化交易实战-35PyAlgoTrade量化交易回测框架官方示例详解

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()

首先需要引用strategyquandlfeedstrategy用于计算指标和回测数据,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() #跑策略

運行这个例子 你就会看到数据结果长这样

20210630185905 - Python量化交易实战-35PyAlgoTrade量化交易回测框架官方示例详解

我们直接将这段代码拿过来,放到我们的项目里:

现在运行会报错

20210701061344 - Python量化交易实战-35PyAlgoTrade量化交易回测框架官方示例详解

提示没有这个数据文件,那怎么获取这个数据文件

谷歌搜索一下: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()

运行可以看到成功输出了数据:

20210701063409 - Python量化交易实战-35PyAlgoTrade量化交易回测框架官方示例详解

回到官方文档往下看:让我们继续使用打印收盘 SMA 价格的策略,以说明如何使用技术指标:

20210701063616 - Python量化交易实战-35PyAlgoTrade量化交易回测框架官方示例详解

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()

运行:

20210701064415 - Python量化交易实战-35PyAlgoTrade量化交易回测框架官方示例详解

到这里 我们就完成了数据获取到数据定义,以及创建自己策略的过程。

转载请注明:虚坏叔叔 » Python量化交易实战-35PyAlgoTrade量化交易回测框架官方示例详解

喜欢 (32)

您必须 登录 才能发表评论!