这里相当于“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等等。另外股市本身可以通过“行业轮动”来增厚收益。
最近文章: