使用pypy提升backtrader速度

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 内存节约明显,速度节约不明显。

5 执行交易的测试结果pypy
如果在策略next方法中,执行双均线交易逻辑,这是和实际策略一样的测试。运行在批模式下runonce mode。只报告pypy下的结果。
高峰内存消耗:1.3G
执行时间:156秒(含指标计算+交易),每秒处理12743根k线。

6 结论
backtrader默认可以处理百万级k线。
尽量使用pypy(例如,如果你不需要绘图输出的话)

7 测试8000支股票?
pypy下,如果回测8000支股票,每支20000根k线,相当于总计1.6亿根k线。所花时间粗略估计为上述80倍,即156x80=12480秒=3.5小时。内存可能消耗几个G。

扫地僧Backtrader给力教程

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

扫地僧量化

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值