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

更多精彩内容,欢迎关注公众号:数量技术宅,也可添加技术宅个人微信号:sljsz01,与我交流。

我们在进行量化策略回测的时候,免不了要做一些时间序列的操作,比如计算过去一段时间的某个技术指标、因子等等,即时是横截面的策略,也需要在横截面数据准备后,进行时间序列的回测,用以确定因子在回测周期内的表现。

在进行时序相关的回测操作时,我们通常有两种编写方式可供选择。第一种是循环回测,即按照时间序列由远及近,每次进入循环后计算指标或因子,并判断是否触发交易信号;第二种是利用矩阵进行数值计算,即先调用矩阵运算所有可能用到的指标或因子,再通过矩阵筛选的方式选出符合条件的交易信号并回测。

那么,这两种方式,相对来说哪种更能提高我们的回测效率?

如果数据量级比较小,这两种方式的差别不大。但是随着数据量级的增加,比如需要回测分钟k,甚至是逐笔的数据,或者需要回测过去很长一段时间跨度的数据,两者之间的运算速度(效率)差距会越来越明显。

这次的文章,我们就将以策略回测最常用的Python语言为例,来比较两种方法之间的效率差异。

普通数值计算比较

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

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

一起来看实现的具体代码。对于矩阵运算,我们直接调用numpy库中的dot方法即可,而循环,则是通过100万次循环依次获取每个数组中对应的元素后不断加总。

我们特意在代码中记录了需要比较代码模块的运行起始和终止时间,通过这两个时间的差值,可以比较两种算法在执行时间上的差异。

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

量化策略回测比较

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

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

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

我们同样在两种实现方式的起始和终止位置增加了时间戳的记录,以此来比较两种算法的执行耗时。

并且,我们对比两种算法得到的回测结果,回测结果也是完全一样的,说明算法可互相替代,我们没有理由不选择效率更高的算法来实现。

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

结论

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

1 量化策略回测与大规模数值计算一样,矩阵运算效率高于循环运算。

2 随着处理数据量级的增大,两者之间的速度差异将越来越大。

3 尽可能使用矩阵运算方式回测策略。如某些复杂逻辑策略无法完全做到矩阵运算,也可以用矩阵运算计算必须变量或做初步测试,如果初测结果理想,再加入循环算法逻辑做精细化测试。

4 涉及到大规模机器学习算法,通过矩阵运算模式优化代码,解决耗时问题。

 

 

 


往期干货分享推荐阅读

数字货币中短线策略(数据+回测+实盘)

数字货币稳定币对网格做市策略

数字货币资金费策略

分享一个年化15%以上的无风险套利机会

网格交易系统开发

通过深度学习股价截面数据分析和预测股票价格

Omega System Trading and Development Club内部分享策略Easylanguage源码

一个真实数据集的完整机器学习解决方案(下)

一个真实数据集的完整机器学习解决方案(上)

如何使用交易开拓者(TB)开发数字货币策略

股指期货高频数据机器学习预测

如何使用TradingView(TV)回测数字货币交易策略

如何投资股票型基金?什么时间买?买什么?

【数量技术宅|量化投资策略系列分享】基于指数移动平均的股指期货交易策略

AMA指标原作者Perry Kaufman 100+套交易策略源码分享

【 数量技术宅 | 期权系列分享】期权策略的“独孤九剑”

【数量技术宅|金融数据系列分享】套利策略的价差序列计算,恐怕没有你想的那么简单

【数量技术宅|量化投资策略系列分享】成熟交易者期货持仓跟随策略

如何获取免费的数字货币历史数据

【数量技术宅|量化投资策略系列分享】多周期共振交易策略

【数量技术宅|金融数据分析系列分享】为什么中证500(IC)是最适合长期做多的指数

商品现货数据不好拿?商品季节性难跟踪?一键解决没烦恼的Python爬虫分享

【数量技术宅|金融数据分析系列分享】如何正确抄底商品期货、大宗商品

【数量技术宅|量化投资策略系列分享】股指期货IF分钟波动率统计策略

【数量技术宅 | Python爬虫系列分享】实时监控股市重大公告的Python爬虫

 

posted @ 2022-12-08 18:55  数量技术宅  阅读(291)  评论(0编辑  收藏  举报