打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
pyalgotrade量化回测框架简单试用

持续行动1期 40/100,“AI技术应用于量化投资研资”之可转债投资。

今天要讲一个量化的传统“科目”——回测。

很多人一提及量化,第一个想到的就是回测系统,写一个strategy,搞两个技术指标跑起来看看。

前面的时间我们一直在聊数据,因为数据和因子才是量化的灵魂,回测系统仅是工具,而且成熟的开源项目大把,还是很多带数据源的类似quantopian的平台。

我打算分享4个量化回测引擎:pyalgotrade, backtrader ,我自研的以及qlib内置的。

特别说明一下,qlib内置的回测系统,适合机器模型驱动的,当然你非得改造成传统事件驱动的,自己实现也可以。我会考虑把我自己的回测系统,往qlib的框架里靠一靠,如果有必要的话。

今天先看一个简单的:pyalgotrade。

安装很简单:pip install PyAlgoTrade

它的版本停留在0.2,后面应该不维护了,但基本也够用了。

https://github.com/gbeced/pyalgotrade

文档地址:

http://gbeced.github.io/pyalgotrade/

https://pyalgotrade-docs-zh-cn.readthedocs.io/zh_CN/latest/tutorial.html

有人改进了国内市场的版本,开源地址如下:

https://github.com/Yam-cn/pyalgotrade-cn

01 hello pyalgotrade

from pyalgotrade import strategy
from pyalgotrade.barfeed import yahoofeed


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 yahoo feed from the CSV file
feed = yahoofeed.Feed()
feed.addBarsFromCSV("orcl", "orcl-2000.csv")

# Evaluate the strategy with the feed's bars.
myStrategy = MyStrategy(feed, "orcl")
myStrategy.run()
  1. 声明一个新的策略。

  2. 只有 onBars 方法是必须要定义的,此方法会在每次推送 bar 数据时执行。

  3. 从 CSV 文件加载数据。

  4. 基于 feed 提供的 bar 数据运行策略。

这个csv通过yahoofinance已经不好使了,我们使用自己的格式下载来回即可。

我们使用茅台的股票数据。

pyalgotrade的数据column是大写字母开头,而且必须有复权价。

把收盘价打印出来:

plt = plotter.StrategyPlotter(myStrategy)


myStrategy.run()
# Evaluate the strategy with the feed.
print("Final portfolio value: $%.2f" % myStrategy.getBroker().getEquity())

plt.plot()

02 参数优化

如下是本地参数集回测的代码。

import itertools
from pyalgotrade.optimizer import local
from pyalgotrade.barfeed import yahoofeed
import rsi2


def parameters_generator():
instrument = ["dia"]
entrySMA = range(150, 251)
exitSMA = range(5, 16)
rsiPeriod = range(2, 11)
overBoughtThreshold = range(75, 96)
overSoldThreshold = range(5, 26)
return itertools.product(instrument, entrySMA, exitSMA, rsiPeriod, overBoughtThreshold, overSoldThreshold)


# The if __name__ == '__main__' part is necessary if running on Windows.
if __name__ == '__main__':
# Load the feed from the CSV files.
feed = yahoofeed.Feed()
feed.addBarsFromCSV("dia", "dia-2009.csv")
feed.addBarsFromCSV("dia", "dia-2010.csv")
feed.addBarsFromCSV("dia", "dia-2011.csv")

local.run(rsi2.RSI2, feed, parameters_generator())

pyalgotrade怎么说呢,麻雀虽小,无脏俱全。

尤其是写传统技术面相关的策略,比如均线,MACD,动量这种策略,特别合适。交易的股票支数不多,因子不太,买卖规则清晰

03 多支股票轮动

这个场景是我们最需要的。

另外我们的数据格式是dataframe计算好了指标。但pyalgotrade只能从csv添加,这个就比较麻烦了。

它的买卖状态的可视化部分的代码我们可以参考下。

backtrader同样存在这样的缺陷,传统这些量化框架,都更加适合技术分析的量化,加载的数据量比较少,因子比较少。

后续我们来讲讲自主研发的量化框架。

飞狐,科技公司CTO,用AI技术做量化投资;以投资视角观历史,解时事;专注个人成长与财富自由。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
pyalgotrade教程1
PyAlgoTrade框架研究
分享自己手敲的python tushare pyalgotrade获取数据加回测体系
BOURNS伯恩斯电位器3296
使用Python将数据保存到Excel文件
Appium自动化测试框架综合实践之data提取方法封装
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服