宽基ETF轮动策略量化代码实现

发布于: 修改于: 雪球转发:15回复:37喜欢:152

上次给大家分享了基金定投的量化回测代码,《分享两个简单的基金定投策略代码》,如果大家想尝试稍微复杂一点的策略,那就可以从这个轮动策略着手了。这个轮动策略是把雪球认证用户“宜昌白云飞”的算法在聚宽平台上通过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)$

精彩讨论

全部讨论

2019-09-30 10:20

今天的涨跌不需要太在意,国庆节不出门的可以抽空研究一下我们的策略代码,这大把的时间就是要拿来做点正事

2022-03-25 22:08

哪里可以下载完整的源代码?

2021-10-28 18:50

学习

2021-09-23 12:07

设置上升通道打开的话,收益应该能增强很多,可以应对目前行业etf单边暴涨的情况

2021-06-02 19:44

代码怎么改成自己喜欢的ETF

学习ing

2020-11-04 15:58

这个好

2020-04-13 14:33

请问一下,实盘得话,ETF得滑点一般设置成多少比较好??按固定得来算?还是百分比??set_slippage(FixedSlippage(0.00246)) PriceRelatedSlippage(0.002) 这两个哪个合理一点? 我用百分比得测,发现很多策略直接凉凉

2019-10-15 12:35

马克

2019-10-06 20:13

有个疑问?
用这个代码跑出来的策略收益结果比较低。有290.99%
我用Excel回测的策略收益有约390%(手续费万分之四计算)。
白云飞老师回测的策略收益也是比较高的。

到底问题出在哪里???