问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

如何提高量化策略回测的效率

创作时间:
作者:
@小白创作中心

如何提高量化策略回测的效率

引用
CSDN
1.
https://blog.csdn.net/sljsz/article/details/128241897

在量化策略回测中,我们常常需要进行时间序列操作,比如计算过去一段时间的技术指标或因子。这些操作可以通过循环回测或矩阵运算两种方式实现。本文将通过具体代码示例和实验数据,比较这两种方法的效率差异。

循环回测 vs 矩阵运算

循环回测是按照时间序列由远及近,每次进入循环后计算指标或因子,并判断是否触发交易信号。而矩阵运算则是先调用矩阵运算所有可能用到的指标或因子,再通过矩阵筛选的方式选出符合条件的交易信号并回测。

当数据量较小时,两种方法的差别不大。但随着数据量的增加,比如需要回测分钟K线或逐笔数据时,两者之间的运算速度差距会越来越明显。

普通数值计算比较

我们先从数据量级增加的视角,比较循环和矩阵运算的效率差异。这个比较的例子很简单,我们分别生成两个100万数据量级的数组,计算这两个数组每个对应元素的乘积,即A数组第一个元素与B数组第一个元素相乘,并将所有得到的乘积相加。

对于这个例子,我们既可以使用矩阵运算的方式,也可以使用循环的方式来实现。一起来看实现的具体代码。

对于矩阵运算,我们直接调用numpy库中的dot方法即可,而循环,则是通过100万次循环依次获取每个数组中对应的元素后不断加总。我们特意在代码中记录了需要比较代码模块的运行起始和终止时间,通过这两个时间的差值,可以比较两种算法在执行时间上的差异。

可以看到,两种方法计算出了相同的结果,说明方法在功能上是完全可替代的,但是执行时间相差很大,矩阵运算的执行用了3秒钟,而循环运算则使用了493秒,在处理这个量级的数据上,两种算法的效率相差了100多倍,不可谓不大。

量化策略回测比较

我们再回到量化策略的回测,举一个简单的例子进行比较,我们使用股指期货IF的分钟K线,策略规则分钟K是连续上涨3次,或连续下跌3次开仓,持有固定分钟后平仓。这样的规则,我们同样可以使用循环运算以及矩阵运算两种方式,进行回测的编写。

先来看循环模式的实现逻辑,我们逐K线遍历、在循环内,单独计算每一个K线的指标、判断是否满足开仓条件、并且将每一笔交易在平仓的结果逐一加入到利润记录列表变量中。

再来看矩阵运算的实现逻辑,通过矩阵运行一次性计算得到使用指标,筛选出所有满足开仓条件的行,并根据筛选得到的子表统计计算回测结果。

我们同样在两种实现方式的起始和终止位置增加了时间戳的记录,以此来比较两种算法的执行耗时。并且,我们对比两种算法得到的回测结果,回测结果也是完全一样的,说明算法可互相替代,我们没有理由不选择效率更高的算法来实现。

因此,在具体的量化策略回测中,矩阵算法的执行效率仍然是大大优于循环算法的,循环算法回测共耗时16409秒,而矩阵算法仅耗时809秒,两者差距在20倍。可以说,随着数据量级、算法复杂程度的增大,两者的差距还会进一步的扩大。

结论

通过对大数据量级的运算速度比较,以及一个具体量化策略的回测速度比较,我们可以得到以下结论:

  1. 量化策略回测与大规模数值计算一样,矩阵运算效率高于循环运算。
  2. 随着处理数据量级的增大,两者之间的速度差异将越来越大。
  3. 尽可能使用矩阵运算方式回测策略。如某些复杂逻辑策略无法完全做到矩阵运算,也可以用矩阵运算计算必须变量或做初步测试,如果初测结果理想,再加入循环算法逻辑做精细化测试。
  4. 涉及到大规模机器学习算法,通过矩阵运算模式优化代码,解决耗时问题。

本文原文来自CSDN

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号