三标的ETF轮动策略搭配大盘止损的效果

发布于: 修改于: 雪球转发:6回复:26喜欢:56

昨天晚上给大家分享了《三标的ETF轮动策略代码》,网友@洲洲洲洲洲洲 提出了以下的改进思路:
加入量能的过滤。以30日成交量均线作为参考(以上证指数为标的)
买进时:连续3日不过30日量线不进行买入操作。
卖出时:连续3日不过30日量线,无条件卖出,提前出场等待。

把上述思路通过代码实现之后,回测的情况是这样的:

我们可以看到收益发生了大幅的下降,检查日志之后发现,整个回测周期中有554个交易日是因为大盘成交量持续低于30日均线,保持空仓状态。这对于总计1388个交易日来说,止损信号的发出太过频繁。再考虑到三个标的轮动,已经在一定程度上分散了风险。所以,我们可以认为选择30日成交量均线显得过于保守。

关于大盘量线过滤的思考

首先,基于动量的轮动是一种偏进攻型的策略,不追求高胜率,核心逻辑在于“多赚少亏”,整体盈利。连续3日不过量线不进行买入操作虽然可以过滤一些假信号,但是损失的收益可能会更多,这和“多赚”的逻辑有一定抵触。

其次,轮动策略的“少亏”是通过轮动换仓实现的,但是我们发现基础策略的回撤幅度仍然是非常大的(超过35%),通过同时持有多个标的分散风险,我们把回撤控制在了25%以内,但是目前为止我们还未采用任何硬止损手段,这方面应该还有文章可做。

回测验证

针对上述思考,首先取消了对买入条件的限制,先测试止损的情况。通过对30种参数组合进行交叉测试,我们得到了下面这个结果。收益最高,回撤最小的情况是把止损条件设置为以6日成交量均线作为标准,连续7日不达标则全部卖出。

下图是未加大盘量线止损的回测结果,对比上图可以看到选择6,7这组参数的时候,收益在原有基础上提高约50个百分点,回测下降约4个百分点。

在这种基础上,把买入的条件加上连续3日不过成交量均线不进行买入操作,得到下图所示的回测结果。可以看到,设置更为严格的买入条件,策略的效果是受损的。一个能完美过滤假信号但不损害收益的策略是无法实现的,这就是事物的两面性。我们应该以攻为守还是以守为守,这需要结合策略的核心逻辑来进行抉择。

关于策略代码的说明

如下图所示,成交量均线周期及连续低于均线N天空仓,天数通过代码的23和24行设置

大盘止损函数在代码的末尾,如果你不希望以上证指数作为止损参考,也可以选择沪深300或者其他指数,将代码229行中的代码000001.XSHG替换为你想采用的指数代码即可。例如沪深300指数代码为000300.XSHG。

好了,我的基础工作已经完成,接下来就看大家自行发挥了。老规矩向右看→聚宽代码分享链接

因为这个代码是在基础版本的轮动策略上演变而来,所以关于代码的一些基本情况,我不再进行解释,如果对基本使用方法及套路不明白,请参阅之前的文章:
《分享两个简单的基金定投策略代码》
《宽基ETF轮动策略量化代码实现》
《三标的ETF轮动策略代码》

精彩讨论

全部讨论

2019-11-27 16:21

不会用程序,在基金平台建个组合吧,好用就会有人跟

2019-10-21 07:52

有沪深100就好了

2019-10-06 16:29

收益和风险都是对等的,我并不认为会出现低回撤较高收益的策略,对历史走势加太多条件就有过度拟合

2023-03-22 21:47

单边行情,如何破解?设置成多少份,涨跌多少为最佳?

2022-10-16 08:02

这种量化如果能跑赢300,机构早就用了,你换个15年到19年看看,经历两轮熊市,估计收益率就不行了

2022-07-26 19:35

学习了

2021-06-27 02:00

请问如果在三标轮动的基础上想要给13日均线这个条件增加阈值,比如大于13日均线1%才买入,小于13日均线1%才卖出,代码应该如何修改呢?求大神赐教,万分感谢!

2020-11-13 19:20

这轮动看基本上跟沪深300一样,没体现出轮动的优势来呀,如果算上交易费用可能还略低于300

2020-04-18 23:33

智工,94行:if position.value/cash > 1.4是什么逻辑呢?我理解的是cash=(持仓股票价值+现金)/buy清单股票数量=分配到buy清单中每只股票的金额均数。比如持仓a票价值3k+现金9k=1.2w,buy清单是[a,b,c],交易后的结果不应该是abc各4k吗,if position.value/cash>1即可为何是>1.4呢?我看没有注释,特此请教下

2020-02-09 12:05

我刚打赏了这篇帖子 ¥6.00,也推荐给你。
感谢楼主分享。
我也对量化编程比较感兴趣,也参与了云飞的星球,麻烦加你的微信,一同交流。