在量化平台,提供各种数据是最基本的功能,但这里可能并不包括指标数据。因此在某些平台可能需要自己根据股票数据去计算想要的指标数据,而且还要注意计算指标时经常用到的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 分别设置了盘前、盘中、盘后的触发函数。剩下的,就是按照自己设想的交易逻辑来往这个框架里塞入具体的代码了。
首先需要设置一些全局变量,用于记录全局状态。