QMT 回测速度慢?九成是数据加载方式不对
发布时间:1小时前阅读:7
很多人第一次跑回测,几分钟的历史区间跑了半个小时还没完,第一反应是电脑不行。其实绝大多数情况是数据加载的方式出了问题,改几个习惯,速度能翻好几倍。
1、一次性加载全部数据是大坑。策略开头就把几年的日线或全部标的的分钟线读进来,内存和读取时间都会爆。正确做法是按需加载:只读策略实际用到的字段、只读池子里的标的、只读回测区间内的数据。范围缩小一个量级,速度提升不止一个量级。
2、循环里重复取数。信号计算里每个周期都去取一次行情数据,同样的请求重复了上千次。应该把数据取出来后转成高效的结构,比如用向量化操作代替逐行循环。Python 里逐行循环处理几万条数据,速度是向量化方式的几十分之一。
3、数据频度用错了。做日线策略却加载分钟线,做完了只用收盘价,白白多处理几十倍的数据量。反过来,需要分钟级判断的策略用日线跑,逻辑又不成立。先确认策略真正需要的频度,再决定加载什么。
4、别忽略磁盘和缓存。数据文件放机械硬盘和固态硬盘的读取速度差好几倍;频繁重跑同一区间的回测,可以用缓存把已处理的数据存下来,第二次直接读缓存。
判断标准:优化前先定位瓶颈——跑一次回测,观察内存占用和读取阶段耗时的比例。内存占用高就缩小加载范围,读取占比高就换磁盘或加缓存,计算占比高才轮到优化代码。对着症状改,比盲目升级硬件有效得多。".
再补一个容易被忽略的消耗:日志输出本身也有代价。回测循环里每个周期都写一条长日志,几万次循环下来,光是格式化字符串就占掉可观的时间。调试期开详细日志,正式回测时把日志降到关键节点,这个开关切换一下,速度常有明显改善。优化永远先看数据流,再看代码,最后才看硬件。
补充一个数据加载的实战建议:把常用的历史数据提前整理成自己固定的格式存本地,回测时直接读自己整理过的文件,不再依赖接口实时拉取。这样做有两个好处,一是速度稳定,二是数据口径完全自己掌控,不会因为上游数据源调整而让两次回测结果不可比。准备工作做一次,后面每个策略都受益。
股票开户欢迎找我!可以申请万0.854的股票佣金、etf 可转债佣金万0.5、国债逆回购一折(百万分之一)!量化软件QMT+ptrade免费使用!还有888、999资金靓号等你选!
温馨提示:投资有风险,选择需谨慎。



问一问
从业认证

+微信
分享该文章
