量化交易学习(五十三)backtrader多周期回测(2)resample

前面那篇文章讲了怎么通过加载多个周期的数据源实现多周期回测,这一篇讲通过单一数据源,利用backtrader的resample功能合成大周期数据源实现多周期回测。

下面以上篇文章的例子,讲一下怎么实现。

比如我只有1分钟k线,想实现这样的一个日内择时的策略:若当前分钟线的收盘价小于前一天的日线最低价则买入,若当前分钟线的收盘价大于前一天的最高价则卖出,怎么做呢?

可以这样,把1分钟线添加到cerebro中,然后通过1分钟线合成日线,策略启动后,每次执行next方法时self.datas都会调用下一根分钟线和分钟线所在日期的日线,这样在next方法中只用考虑当前分钟线和前一天日线就可以了。

下面是具体的代码,用的恒生科技ETF2024年3月份的数据:
main.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import backtrader as bt

import strategy

cerebro = bt.Cerebro()

cerebro.addstrategy(strategy.MyStrategy)

data0=bt.feeds.BacktraderCSVData(dataname='SHSE.513180_1min.csv',timeframe=bt.TimeFrame.Minutes)

cerebro.adddata(data0)
cerebro.resampledata(data0,'SHSE.513180_1day',timeframe=bt.TimeFrame.Days)

cerebro.broker.setcash(100000)

print('初始时资金持仓:%.2f' % cerebro.broker.getvalue())
cerebro.run()
print('结束时资金持仓:%.2f' % cerebro.broker.getvalue())
cerebro.plot(style='candle',barup='red',bardown='green',volup='red',voldown='green',voloverlay=False,valuetags=False)


strategy.py的代码没有改动,和之前那篇中的一样。

代码中只有一处不一样:

1
cerebro.resampledata(data0,name='SHSE.513180_1day',timeframe=bt.TimeFrame.Days)

cerebro.resampledata会对data0重采样,然后把重采样得到的数据添加到cerebro中。之后的处理和添加多个数据源的处理是一样的了。

回测结果也是一样的:

Snipaste_2024-04-19_21-43-45.png

Snipaste_2024-04-19_21-41-29.png


这一篇就到这里啦。欢迎大家点赞、转发、私信。还没有关注我的朋友可以关注 江达小记

江达小记