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

如何,提高,量化,策略,效率 · 浏览次数 : 218

小编点评

**循环和矩阵运算效率比较** **循环方式** * 逐笔计算指标或因子,并判断是否触发交易信号。 * 效率低,执行时间约为 493 秒。 **矩阵运算方式** * 直接调用 numpy 库中的 dot 方法进行矩阵运算。 * 效率高,执行时间约为 809 秒。 **效率比较** | 方法 | 循环 |矩阵 | |---|---|---| | 运行时间 (秒) | 493 | 809 | | 效率 (倍) | 1.79 | 3.05 | **结论** 矩阵运算效率高于循环运算,特别是对于大规模数据量级的数据。

正文

更多精彩内容,欢迎关注公众号:数量技术宅,也可添加技术宅个人微信号: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爬虫

 

与如何提高量化策略回测的效率相似的内容:

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

更多精彩内容,欢迎关注公众号:数量技术宅,也可添加技术宅个人微信号:sljsz01,与我交流。 我们在进行量化策略回测的时候,免不了要做一些时间序列的操作,比如计算过去一段时间的某个技术指标、因子等等,即时是横截面的策略,也需要在横截面数据准备后,进行时间序列的回测,用以确定因子在回测周期内的表现。

如何选择合适的量化交易服务器

更多精彩内容,欢迎关注公众号:数量技术宅,也可添加技术宅个人微信号:sljsz01,与我交流。 所谓“工欲善其事,必先利其器”,对于量化交易来说,最后也是重要的一步,在于为我们的实盘策略选择一个运行的服务器。那么,应该如何选择合适的量化交易服务器?希望通过这篇分享,给大家提供一些帮助。 策略类型:中

利用ChatGPT提升测试工作效率——测试工程师的新利器(一)

在测试工作中可以辅助功能测试包括需求分析或解读代码(注意代码安全)后生成测试用例,还可以辅助生成代码,接口测试用例,自动化脚本等各个方向起作用。当然实际使用中可能会因为提示词的不同生成的结果需要人工多次对话训练才可以。但是使用chatGPT肯定比不用能提高工作效率。当然具体落地后如何进行量化提效抽象...

SoftReference 到底在什么时候被回收 ? 如何量化内存不足 ?

本文基于 OpenJDK17 进行讨论,垃圾回收器为 ZGC。 提示: 为了方便大家索引,特将在上篇文章 《以 ZGC 为例,谈一谈 JVM 是如何实现 Reference 语义的》 中讨论的众多主题独立出来。 大家在网上或者在其他讲解 JVM 的书籍中多多少少会看到这样一段关于 SoftRefer

腾讯互娱面经,希望别凉

默认参数是指在函数调用时,如果没有提供某个参数的值,那么使用函数定义中指定的默认值。这种语言特性可以减少代码量,简化函数的使用。在Go语言中,函数不支持默认参数。这意味着如果我们想要设置默认值,那么就需要手动在函数内部进行处理。b = 0上面的代码中,如果b参数没有提供值,那么默认为0。通过这种方式...

Llama2-Chinese项目:3.1-全量参数微调

提供LoRA微调和全量参数微调代码,训练数据为data/train_sft.csv,验证数据为data/dev_sft.csv,数据格式如下所示: "Human: "+问题+"\nAssistant: "+答案 举个例子,如下所示: Human: 用一句话描述地球为什么是独

[转帖]按压硬盘能提升几十MB/s 的硬盘读写速度,长见识了

https://www.ittel.cn/archives/6326.html 现在基本每台电脑都配置了 SSD (固态硬盘),但如果用在服务器、NAS 等大容量存储设备中,HDD(机械硬盘)的性价比依然无人能敌。 一方面是因为它便宜量大,一方面是因为它可靠性强,数据存储时间长。而你是否真的了解 H

讯飞有一个可以根据描述文本自动生成PPT的AI接口,有趣

文档:https://www.xfyun.cn/doc/spark/PPTGeneration.html 价格方面提供了免费1000点的额度,生成一次是10点,正好100次,如果要购买的话最低要购买1344元的,没有按量付费的模式,个人小开发者可买不起。 让我们跑起来玩玩,官方提供了python的s

[转帖]如何提高Linux下块设备IO的整体性能?

http://www.yunweipai.com/6989.html 运维派隶属马哥教育旗下专业运维社区,是国内成立最早的IT运维技术社区,欢迎关注公众号:yunweipai领取学习更多免费Linux云计算、Python、Docker、K8s教程关注公众号:马哥linux运维 作者介绍 邹立巍 Li

【如何提高IT运维效率】深度解读京东云基于NLP的运维日志异常检测AIOps落地实践

日志在 IT 行业中被广泛使用,日志的异常检测对于识别系统的运行状态至关重要。解决这一问题的传统方法需要复杂的基于规则的有监督方法和大量的人工时间成本。我们提出了一种基于自然语言处理技术运维日志异常检测模型。