相信很多投资者在做量化投研时都会有一种共识:量化投资领域里,成本最大的毫无疑问就是研发策略所消耗的时间成本,其中90%的时间都被消耗在因子挖掘、策略回测与优化等大型运算上。
如何提高运算程序的效率,成为了众多量化投资者面临的难题。
而在Python编程中,有许多方法可以提高量化交易策略的回测速度,使用向量化操作就是一种行之有效的方法。
向量化操作是一种在整个数组或矩阵上执行操作的技术,可以大大提高代码的效率。在Python中,NumPy是一种非常流行的向量化操作库,可以加速数学计算和数据处理。当涉及到大量的计算时,我们可以尝试使用NumPy、Pandas或者其他库来进行向量化操作。
此处,我们以掘金量化终端中提供的示例策略【双均线策略(期货)】为例,尝试对其进行提速。
移动平均线是一种常用的技术分析指标,用于平滑价格数据。使用NumPy的向量化操作,可以进一步提升计算速度。
示例策略第59行以及60行中,原策略代码中用到了rolling来进行滚动计算。我们可以考虑使用numpy.convolve对向量进行卷积计算,并与原策略代码进行回测对比:
1、向量化:使用np.array对prices进行向量化操作,再使用flatten进行降维;
2、卷积:使用np.convolve进行卷积计算长短均线,边缘的点进行无效化处理;
3、回测:运行回测并进行耗时比对。
修改后的代码如下:
我们开始进行回测。
-
回测时间:2023-04-17至2023-07-26
-
回测品种:螺纹钢主力合约
-
初始资金:10万
-
手续费:0.0007(双边万二佣金+单边千一印花税,共千1.4,即双边万7)
-
滑点:万分之一(双边)
结果如下图:
通过对比发现,原均线策略回测耗时为44秒;但经过向量化操作以后,耗时降低至34秒,速度提升了22.7%,提速效果明显。但是,最大回撤以及夏普比率出现了微小的偏差。我们将均线结果print出来进行比对,结果如下:
上图为均线数据的部分片段。左边是原策略的均线数据,右边是向量化操作后的均线数据。不难发现,向量化后均线数据精度更高,因此在回测结果中虽微小差异,但不会对策略总体效果造成较大影响。
除了Python内置的库之外,还有许多第三方库可以帮助加速代码。例如,当需要执行高性能数学计算时,可以尝试使用SciPy或NumPy等库;需要处理大量数据时,可以尝试使用Dask或Apache Spark等分布式计算框架。大家可以根据具体需求进行取舍。
完整代码的文件已分享至掘金量化社区,可通过下方链接前往自取:https://bbs.myquant.cn/thread/3509