backtrader高级walk forward多股滚动回测

许多朋友在做策略参数优化时,都陷入了一个误区,那就是简单地在历史数据上执行参数优化,发现最优参数下,策略绩效极好,然后使用这个最优参数投入实盘,这样做基本等于自杀,过拟合的可能性太大了。

稍微好一点的做法,是将历史数据分层成两部分,一部分是训练集,另一部分是测试集。在训练集上做参数优化,然后拿到最优参数后,在测试集上回测,看看回测效果如何,如何好,就投入实盘,如何回测效果不好,就继续修改策略。这样做,比较浪费数据,测试量也不够大。

更好的评价参数优化效果的方法,是所谓walk forward滚动回测的方法。

这里,以上图所示这个小例子,介绍滚动回测的原理。

(1)训练阶段

首先,把数据按时间顺序划分为5组,然后开始迭代,进入训练阶段:在迭代1,组1,2作为训练集,组3作为测试集,在训练集上执行参数优化回测,确定最佳参数(注意,这时暂时不在测试集上执行回测)。然后在迭代2,在训练集组2,3上执行参数优化回测,确定最佳参数。在迭代3,在训练集组3,4上执行参数优化回测,确定最佳参数。这样就得到对应三次迭代的三组最佳参数。

(2)测试阶段

把3,4,5组测试数据连接起来,作为一组数据送入策略,策略内next方法迭代到每根bar时,要识别该bar的时间,如果是组3的数据,则应用迭代1确定的最佳参数来计算指标,如果是组4的数据,则应用迭代2的最佳参数来计算指标,如果是组5的数据,则应用迭代3的最佳参数,来计算指标。测试集回测结束得到的绩效指标作为参数优化的最终绩效评价指标。

虽然网上有一些backtrader做滚动回测的文章和代码,但都没有正确实现如上算法。特别是有些算法是在每个测试集上单独进行测试回测,这样例子中要进行3次回测,这种回测是有问题的,比如在进行测试集组3的回测时,在结束日临近下的单,可能要到组4才能成交,单独回测无法很好地处理这个问题。再比如在进行组5的回测时,一开始会缺少计算指标所需的历史数据,因此会浪费一部分起始数据来预热指标。网上另外一些滚动回测只能处理单股的情况,无法处理多股场景。

我们在
《扫地僧 Backtrader 给力教程系列二:量化回测与实盘交易高级篇》已完美实现了高级walk forwalk多股滚动回测,大家可参考教程学习使用。

猜你喜欢

转载自blog.csdn.net/qtbgo/article/details/125225612