backtrader作者在这篇博客里测试了使用pypy能够显著提升backtrader回测速度,至少节约一半时间。
作者看reddit论坛有人说backtrader处理不了160万k线。
作者用backtrader进行了如下测试:
1 数据
作者首先生成100支股票,每支生成20000根k线,这样总共有200万根k线,分别放在100个csv文件里。
2 测试平台
i7 cpu 32G内存, win10
比较了两个python 解释器:传统的CPython 3.6.1 和快速的pypy 3.6.0.0
3 策略
测试策略就是一个简单的双均线策略,所有股票出现金叉买入,死叉卖出。
4 不执行交易的测试结果
所谓不执行交易,也就是策略的next方法为空,相当于只是加载数据。另外,不计算指标,只是简单的迭代。
4.1 在backtrader默认的批运行模式(runonce mode)下
CPython:高峰内存348M,总时间135秒,其中76秒用于预加载数据,其余是迭代时间。平均每秒处理14713根k线。
pypy: 高峰内存269M,总时间57秒,每秒处理34971根k线。相对CPython,时间节约了一半多。
4.2 在exactbars=True模式下
如果不用默认模式,在cerebro运行参数里设置exactbars=True,stdstats=False,则不会一次性预加载所有数据。来看看测试结果。
CPython:高峰内存75M,总时间114秒。平均每秒处理17494根k线。
pypy: 高峰内存49M,总时间66秒,每秒处理30025根k线。
相对4.1 内存节约明显,速度节约不明显。</

最低0.47元/天 解锁文章
8579

被折叠的 条评论
为什么被折叠?



