上次给大家分享了基金定投的量化回测代码,《分享两个简单的基金定投策略代码》,如果大家想尝试稍微复杂一点的策略,那就可以从这个轮动策略着手了。这个轮动策略是把雪球认证用户“宜昌白云飞”的算法在聚宽平台上通过Python代码实现,方便大家进一步研究和完善。代码的源文件请从这里下载:量化策略源代码。 关于代码的一些说明 1、计算结果 为了方便大家检查计算结果,我在每天的交易信号确认函数中设置了日志输出行情表格,便于大家核实计算结果,第1列是序号,第2列是对应的基金代码,第3列是涨幅百分比,第4列是11:30收盘价与均线差值。 2、轮动标的 和之前的代码类似,为了让代码可以根据大家的意愿增减标的,我还是采用的一个单独的数组设置参与轮动的指数和基金,用法不在赘述,请参考《分享两个简单的基金定投策略代码》。关于比价周期和均线周期,都是可以自行设置的,代码中有注释,一看便知。 3、信号确认时间为11:30,下单交易时间为14:40,这个可以根据需要自行修改。交易成本统一设置为万五(不再设置滑点),最低佣金5元。 4、策略逻辑 为了便于大家理解,我尽量把策略逻辑写得容易理解一些,但是完全没有代码基础可能还是看起来比较困难。如果有兴趣继续专研量化交易,可以试着学学Python。 5、持仓逻辑 这个策略的持仓逻辑基本忠实白云飞的算法,除了加入涨幅大于0这个条件,如果把87行的代码改为: if df.iloc[0,2] > 0: 这相当于只判断11:30收盘价是否高于均线,df.iloc[0,2]方括号数字对应输出结果表格中的第1行第3列,即均线差值。df.iloc[0,1]表示第1行第2列,即涨幅。因为编号是从0开始编起,这点大家要注意。 6、回测结果 之前因为回测环境参数设置问题,导致回测收益异常,现在已经修正。如果有已经下载了代码的网友,请大家重新下载一下。下面是创业板、沪深300、中证500三个指数基金轮动的回测结果。因为我这个策略代码不包括闲置资金投资国债或者货币基金的收益,遇到不符合持仓条件时,仅仅是保持空仓状态,大家务必注意这个区别。对于单纯研究轮动策略本身的效果来说,这种处理方式更简洁一些。 7、一些可能的改进思路 以下是关于策略的一些值得探讨的改进思路,有些处理不需要编程,单纯调整参数就可以回测验证,希望大家有机会都参与一下,一起讨论交流。 不同的交易时间对结果有多大的影响? 调整比价和均线周期天数,对结果有多大的影响? 如何过滤震荡造成的反复打脸?单纯比较当日11:30收盘价和13日前收盘价,在震荡行情中会产生趋势误判。
如何过滤不必要的调仓?当排名第一的基金和持仓基金涨幅几乎相同时,是否要调仓? 是否要设置涨幅阈值,当涨幅高于一个设定值时,我们才认为这个指数处于上升趋势? 纳入爆发力更强的行业基金是不是对收益带来正面影响? $创业板(SZ159915)$ $500ETF(SH510500)$ $300ETF(SH510300)$
|