最近有读者resample形成不同周期的数据的时候,有时候访问其他较大周期的数据会报错,仔细看了它代码之后,发现有一个地方设置的有问题:
如果是多个周期的数据同时运行的话,需要把交易周期最小的数据放到第一个,交易周期较大的,放到后面。举例说明,如果有两个周期,1分钟和5分钟,那么就需要先resample形成1分钟的数据,然后resample形成5分钟的数据。
如果加载的数据是存在多个周期,或者数据开始的时间不一致,backtrader的机制是想要运行到next的话,需要这些数据都已经开始。所以一般在使用过程中,会在prenext中调用next的方法,提前进入next,但是进入之后,其实可能有一些数据并没有准备好,数据长度是0,这个时候访问数据就可能会报错。解决方法是要么就不在prenext中调用next方法,要么就需要自己去判断当前数据的长度是否大于0。
在使用过程中,一定要明白获取数据的时候传递的参数的意义。一般情况下,初始化的时候,最好能够下载一些过去的历史数据,能够很快计算好一些指标的值,避免实盘的时候,要等待很久才能满足实盘需要的bar的数目。
一个修改过后的可以获取多周期数据的例子:
如果不会使用,参考前几篇backtrader实盘交易教程。