大类资产与动量轮动,年化24.3%,回撤不到20%

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

原创文章第80篇,专注“个人成长与财富自由、世界运作的逻辑, AI量化投资”。

昨天的入门级的动量策略,但确实有效。长期年化20%到底难不难呢?量化给你看

今天做一个通道策略——布林带。

01 布林带通道突破策略

布林带指标的逻辑简单且直接,布林带有三条线,中线就是20日均线,上轨是中线加上2倍的移动标准差,下轨是中线减去2倍的移动标准差。

这里相当于“4个希格玛”,从概率的角度,已经包含95%+的取值范围。也就是说如果突破了上轨,我们认为动量很强,则入场,反之出场。

指标准备:

class StrategyBolling(StrategyBase):
def __init__(self):
self.inds = {}
for data in self.datas:
self.inds[data] = {}
top = bt.indicators.BollingerBands(data, period=20).top
self.inds[data]['buy'] = data.close - top
bot = bt.indicators.BollingerBands(data, period=20).bot
self.inds[data]['sell'] = data.close - bot

def next(self):
# 判断当前已经持仓
to_buy = []
to_sell = []
holding = []
for data, ind in self.inds.items():
if ind['buy'][0] > 0:
to_buy.append(data)

if ind['sell'][0] < 0:
to_sell.append(data)

if self.getposition(data).size > 0:
holding.append(data)
for sell in to_sell:
if self.getposition(sell).size > 0:
logger.debug('清仓' + sell.p.name)
self.close(sell)

new_hold = list(set(to_buy + holding))

for data in to_sell:
if data in new_hold:
new_hold.remove(data)

K = 1
if len(new_hold) > K:
data_roc = {}
for item in new_hold:
data_roc[item] = self.inds[item][0]
#排序
new_hold = sorted(data_roc.items(), key=lambda x: x[1], reverse=True)
new_hold = new_hold[:K]
new_hold = [item[0] for item in new_hold]


# 等权重分配 todo: 已持仓的应应该不变,对cash对新增的等权分配
if len(new_hold) > 0:
weight = 1 / len(new_hold)
for data in new_hold:
self.order_target_percent(data, weight*0.99)

年化17.48%,最大回撤30%。

创业板指数的十年年化本身就是15%,只是回撤达到了46.7%。

对比一下创业板的动量策略:

动量策略完胜,且动量策略是有明显alpha的。

动量策略是我们改进的重要一环,我们可以把动量和大类资产结合起来。

02 动量+大类资产轮动

长期优秀的ETF和LOF,城投债,医药,黄金,消费,纳指,另外两支lof,兴全商业模式万家行业优选

这七支基金按动量0.08入场,低于0出场,选择动量最大的:

年化24.2%,回撤才19.39%。

小结:

布林带通道从回测看是没有明显效果的,但更加简单的动量alpha明显。

但趋势对于单边市场有效,震荡市场会长时间回撤。

大类资产的优点是波动低,缺点是收益偏低。

所以把大类资产与动量有机结合起来。

后续继续改进方向: 大类资产并不需要按动量一刀切,非黑即白,而是配置权重。比如你的风险偏好是股债20:80,那么在股市动量强时,可以变成股债30:70等等。另外股市本身可以通过“行业轮动”来增厚收益。

最近文章:

长期年化20%到底难不难呢?量化给你看