这个是前段有一个读者咨询过的问题,记录下来了,一直没有写成文章,主要是感觉太简单了,没有必要写成一个单独的文章。想了想,还是写出来吧,避免大家碰到同样的问题。
在原先的讲解策略的文章中:7、backtrader的一些基本概念—Strategy讲解对策略的一些关键函数做了讲解,重新copy到这里,可以看到,在策略初始化的时候,会运行__init__中的一些代码,接下来会运行start,一般情况下,是只运行一次,接下来就是比较关键的prenext了,如果多数据的时候,这些数据的日期并不一致,将会导致不会进入到next中,会一直在prenext中运行,直到所有的数据日期都有了之后,才会进入到next中。
现实情况是,存在很多数据开始日期不一致的情况,这个时候就需要在prenext中人为调用self.next()这样进入next中做一些策略的数据,这个时候进入到next中,有些数据还没有开始,日期并不是当前的,需要做过滤,这个很关键,当时这位读者就是因为没有做过滤,剔除那些还没有上市的股票,出现了问题。