基于聚宽平台进行量化交易策略(三重滤网)回测

发布于: 雪球转发:0回复:0喜欢:0

基于通达信进行交易策略回测

基于TradingView进行交易策略回测

前面已经介绍了在通达信、TradingView上的回测,但是显然,这些基于平台专用脚本进行的回测会受到支持功能、技术架构、交易品种、策略周期等各方面的限制。因此,如果想要实现对跨品种、跨周期的更复杂策略的回测,就有必要转战到量化策略平台。

目前国内的量化平台有聚宽、掘金、米筐、优矿、真格、发明者等等,基本囊括了股票、期货、期权、数字货币等交易品种。大家可以针对自己需要选择其中之一即可。

这里以三重滤网策略为例,分享一下在聚宽平台进行股票交易策略的编写、回测、优化过程。

量化交易

首先简单介绍一下什么是量化交易。

量化交易是指借助现代统计学和数学的方法,利用计算机技术来进行交易的证券投资方式。

见底三绝为例: 长阴+长腿、极阴次阳、百日低量。显然,寥寥数语,只能靠交易者自己去悟。到底多大的幅度才算长阴,连跌多久才算极阴?如果没有一个可以量化的标准,显然计算机是无法发出交易信号的。

有了明确的数字标准,还要将其转换为计算机程序,这样才能够根据历史数据进行回测以验证策略的有效性。

从以上过程中我们就可以看到量化交易的价值:

提升效率

见底三绝,从字面上感觉应该靠谱,都属于市场底部的一些重要特征。但牛市不言顶、熊市不言底,究竟是反弹还是反转?这几个条件放在更长的时间范围去看,成功率能达到多少?用手一直滑动K线用肉眼去看?显然是不现实的。而通过程序,就可以对任意标的在任意时间进行回测,瞬间就可以得到各种分析数据来评估其有效性。

更多机会

假设见底三绝已经通过回测验证了有效性,那么如何去寻找满足这些条件的股票?在PC端、Web端、手机端一个一个的去人眼识别?显然也不现实。此时仍可以通过编写程序实现对自定义股票池的监控,从而及时发现交易机会。

交易策略

对量化交易有了一个大概的了解后,在编写程序时首先要理清交易策略的处理逻辑。虽然在前面的文章中已经就指标的构建对三重滤网交易系统做了一些介绍,但在程序实现的过程中,仍然有一些细节需要注意。

顺大势

为避免重复计算,在每周的第一个交易日开盘前获取上一周的MACD、EMA等趋势指标的数值,比较后得到动力系统的状态。

逆小势

在每个交易日开盘前获取上一个交易日的强力指数、KDJ等震荡指标的数值,比较后判断是否可以进行交易。

如果可以交易,则根据前面的交易数据获取平均EMA下跌穿透的数值,来确定买入价。

找突破

当股价跌破平均EMA下跌穿透的数值后并开始反弹突破时进行买入。

以上尤其要注意:前面两步都需要引用上一个周期的数据,否则将会引入未来数据。

基础功能

交易策略有了基本的思路,接下来就要逐步验证数据,以保证引用的数据符合预期。

Jupyter 是一个基于网页的交互式计算平台,它将代码、方程、文本、可视化内容等整合在一起。而在聚宽平台上已经集成了 Jupyter,打开“策略研究”下的“研究环境”,即可看到笔记列表,在这个界面可以新建一个笔记,然后在新建的笔记页面点击左上角的“文件”,然后“重命名”,将其命名为“三重滤网”,用于在编写策略的过程中进行数据验证。

指标数据

富途上测试发现目前尚未支持跨周期的数据引用,但即使是通达信,引用跨周期的数据时仍然有诸多限制。

在量化平台,提供各种数据是最基本的功能,但这里可能并不包括指标数据。因此在某些平台可能需要自己根据股票数据去计算想要的指标数据,而且还要注意计算指标时经常用到的Ta-Lib库中SMA算法与国内使用的模式并不相同,且基于 EMA 算法的指标因为要从股票上市之日开始算起(加大周期会降低误差),因此基于开源库计算得到的指标与国内股票软件会有数据不一致情况。

好在,聚宽平台已经提供了技术分析指标,由平台来保证了在回测的过程中获取到的指标数值与主流软件一致。

在数据验证阶段,设置回测周期为 2023-11-20 ~ 2023-11-24,则在回测的过程中,第一个交易日为 2023-11-20,为其所在周的第一个交易日,因此需要获取上一周的状态。

周线指标

首先从交易软件上查询,得到 $沪深300(SH000300)$ 上一周的 MACD 值为(-99.052, -83.522, -31.061),EMA 值为 3663.44。

然后基于平台提供的函数获取指标数据,可以看到,两者数据完全一致。

这里要注意的是富途的周线是按周一的日期来标识一周,而国内主流A股的软件都是按周五的日期来标识一周。

日线指标

首先从交易软件上查询,得到上一个交易日的强力指数为 -73866.80,买入价为 3567.14。

这两个指标属于自定义指标,需要自行实现。这里就要用到Ta-Lib库,且因为涉及到 EMA 算法,所以只能是尽量获取更长周期的数据以减少误差。

可以看到,强力指数因为涉及到成交量,数值较大,误差也较大;平均EMA下跌穿透涉及的天数较小,误差也较小。

策略编写

经过以上在 Jupyter NoteBook 中的测试后,已经验证了数据基本符合预期,那么接下来就要开始编写策略的具体实现代码了。

每个平台都有自己的策略框架,以便于用户在盘前、盘中、盘后进行相关策略逻辑的处理。我们只需要在对应的函数中添加自己的处理逻辑即可。

策略框架

点击“策略研究”下的“策略列表”,然后“新建策略”,选择“空白模板”,然后点击它的默认名字“这是一个简单的策略-XX”,将其修改为“三重滤网”

可以看到,模板里已经提供了最基本的函数,其中在初始化函数 initialize 中设置了用于比较收益的基准、股票交易的手续费、是否开启动态复权等。然后还通过 run_daily 分别设置了盘前、盘中、盘后的触发函数。剩下的,就是按照自己设想的交易逻辑来往这个框架里塞入具体的代码了。

逻辑实现

首先需要设置一些全局变量,用于记录全局状态。

策略源码