backtrader好慢,提速法(调试、参数回测)
本文是引子,核心方法见付费文章。耗时几天完成此文,挺贵介意付费勿点。
该文主要解决backtrader使用者调试代码,耗时费力、编码生产效率奇低的问题。
耗时来源分析及解决
重复计算耗时
backtrader其实最耗时的地方是自定义的Strategy的__init__方法中对各种指标线的计算,比如笔者曾今使用沪深300股票池,在策略中初始化了5条均线,就需要计算1500根移动均线,这些均线的值理论上是稳定不变的,所以思路是:
把均线提前计算保存,存db用时取 或
数据插入到自定义的datafeed中作为datafeed的一个字段(本质就是第一种)。
那上面的思路解决的是计算数耗费的时间,在争分夺秒、或者反复使用的场景下有价值。
但,我们这里不提供不讨论不展示具体的示例代码。
获取数据耗时
数据存本地,数据存本地,数据存本地,数据存本地。
网络IO是最慢的,对于需要重复的取数据行为,放本地,放db、csv随意。
怼硬件也能提速
给CPU换代升级
机械盘换SSD
扩内存容量
backtrader框架提供的提速手段
大佬写的文章:optMaster:再次实测backtrader回测速度,提速要点stdstats=False,含源码
还有官方文档提供的:

红框中的官方文档地址:
Cerebro - Memory Savings - Backtrader
Cerebro - Optimization - Improvements - Backtrader
中文翻译文档地址(付费的亲,介意勿点,打搅了):
Backtrader官方中文文档:第五章Cerebro大脑
框架耦合带来的耗时
这个核心技巧,就不细说了~~~
backtrader实战:如何提高backtrader调试及回测的代码执行速度
付费文章适合以下场景的读者:
要求读者已经解决基本的backtrader安装和使用问题,可以编写策略
读者策略使用数据量大以及指标计算量大,需要将数据完整加载执行策略,但是回测跑代码十分耗时,比如调试一次代码,加载和预处理数据要十几分钟甚至几十分钟的
参数调优场景下的倍数级计算量以及规避耗内存的问题
非用backtrader不可(潜台词其他框架也不是不能用,但各有各的坑)
理论上节约的时间是以你回测或调试的次数来算的,拍个脑袋,以前1个小时可以调试4次,用了此法调个20次不在话下。时间就是金钱我的朋友!
文档扫码可得,再次强调,挺贵介意勿点
