昨天有读者咨询,使用sckit-learn等包实现机器学习算法的时候,如何滚动进行参数优化的问题,主要考虑到的一个问题就是滚动优化计算量比较大,如何能够更快实现的问题。
实际上,在前面的教程中,也提到过一些如何实现递进优化参数的问题,如果不考虑实现的效率,按照下面这篇文章的思路实现滚动优化是没有问题的。
68、backtrader的一些高级技巧—backtrader参数的可动态修改性与递进参数优化的实现方法
但是考虑到实际的情况,backtrader是基于python的以事件驱动为主的量化框架,python作为 解释性语言,运行效率并不是特别高,离C/C++等语言效率差了很多,所以如果用事件驱动的思路去实现滚动优化的话,耗时是非常大的。
为了提高回测效率,可以尝试一种事件驱动+向量化回测相结合的方式,向量化的回测框架,速度比较快,主要用于测试在一定时间段内,基于特征值和特定参数产生的信号造成的盈亏状况,从而在进行参数遍历之后,根据自己的方法,选择特定的参数,用于未来一段时间。在事件驱动的框架中,作为主要的回测引擎,用于控制什么时间使用向量化的回测框架去做参数优化得到想要的参数,优化得到的参数在未来多长时间内使用。
这就是目前我能想到的比较好的方式,而且理论上来说也比较容易实现。事件驱动的框架当然是最好使用backtrader,向量化回测框架可以考虑使用pandas自己自定义一个,如果不太复杂,几分钟应该就能写出来这个函数,也可以考虑找一个长期使用的向量化的回测框架,比如pybacktest之类的。
最近好多人开始对机器学习的算法感兴趣,我就只在2017年到2018年的时候接触了一些机器学习的算法,也没有深入了解,不知道用在量化中能不能行。谁如果用机器学习算法运行了一年,实现了盈利,欢迎让我知道。
另外推荐一本我还没有时间看的书《Machine Learning for Algorithmic Trading - Predictive models to extract signals from market and alternative data for systematic trading strategies with Python》,这本书中讲了如何使用机器学习 算法设计交易策略,并且介绍了如何一整个流程,最终使用backtrader或者zipline进行回测。