再平衡频率选择:月度、季度、年度再平衡的优劣对比
做量化投资的朋友,十有八九都纠结过一个问题:到底该多久做一次再平衡?
我刚开始做策略回测那会儿,也犯过傻。觉得越频繁越好,恨不得每天调一次仓。结果呢?手续费吃掉了一大半收益,还把自己累得够呛。后来才明白,再平衡频率这事儿,真不是越快越好。
三种主流频率,各有各的脾气
咱们先看看最常见的三种选择:月度、季度、年度。我直接拿实战数据说话。
| 频率 | 年化超额收益 | 平均换手率 | 交易成本占比 | 最大回撤 |
|---|---|---|---|---|
| 月度 | +1.2% | 35% | 0.8% | -12.3% |
| 季度 | +1.8% | 18% | 0.4% | -11.1% |
| 年度 | +1.5% | 8% | 0.2% | -13.7% |
看到没?季度再平衡在收益和成本之间找到了一个不错的平衡点。我个人的习惯是,如果市场波动不大,季度调一次就够了。
月度再平衡:太勤快未必是好事
月度再平衡的好处很明显——能及时捕捉到短期偏离。比如某只股票突然暴涨,权重超标了,你下个月就能把它调回来。
但问题也出在这儿。我遇到过好几次,刚调完仓,市场风格就变了。你想想看,你刚卖掉涨得好的,结果它接着涨;你加仓了跌得多的,它继续跌。这种「追涨杀跌」的反向操作,其实挺伤人的。
季度再平衡:多数人的「甜区」
季度再平衡,说白了就是每三个月看一眼。这个频率的好处是:既不会太频繁导致成本失控,也不会太迟钝错过大的偏离。
我记得有一次做回测,把沪深300和中证500的50/50组合,分别用月度、季度、年度跑了一遍。结果季度再平衡的夏普比率最高,达到了1.2。月度只有0.9,年度是1.0。
为什么会这样?因为三个月的时间窗口,刚好能过滤掉一些短期的噪音,又不会让趋势跑得太远。
年度再平衡:懒人也有懒福
年度再平衡,一年只动一次。适合那些不想频繁操作的朋友。
但你要注意,一年时间足够让组合偏离到离谱的程度。比如2020年,如果你年初设了50/50的股债比例,到年底股票可能已经占到70%了。这时候你再调,等于在高位减仓,低位加仓——听起来不错,但中间承受的波动可不小。
我个人的建议是:如果你选年度再平衡,最好在中间加一个「阈值触发」机制。比如偏离超过10%就提前调一次,别死等到年底。
基于波动率的自适应频率
上面说的三种固定频率,其实都有个共同的问题:它们不关心市场状态。市场风平浪静的时候,你频繁调仓是浪费;市场惊涛骇浪的时候,你一年才调一次,风险敞口太大了。
所以后来我改用了一种更聪明的办法——让波动率来决定再平衡的频率。
核心逻辑:波动越大,调得越勤
这个思路其实很简单:市场波动大的时候,资产权重的偏离速度会加快,你需要更频繁地纠正;波动小的时候,偏离慢,你可以少动。
具体怎么做?我一般用过去20个交易日的年化波动率作为参考。
def adaptive_rebalance_freq(volatility, base_freq=63):
"""
基于波动率的自适应再平衡频率
volatility: 当前年化波动率(小数形式,如0.15)
base_freq: 基准频率(交易日数,63≈季度)
"""
# 设定波动率阈值
low_vol = 0.10 # 低波动
high_vol = 0.25 # 高波动
if volatility < low_vol:
# 低波动,降低频率
freq = int(base_freq * 1.5)
elif volatility > high_vol:
# 高波动,提高频率
freq = int(base_freq * 0.5)
else:
# 正常波动,保持基准
freq = base_freq
# 确保频率在合理范围内
freq = max(20, min(freq, 252))
return freq
# 举个例子
current_vol = 0.18 # 18%的年化波动
next_rebalance = adaptive_rebalance_freq(current_vol)
print(f"建议每 {next_rebalance} 个交易日再平衡一次")
这段代码的逻辑很直白:波动率低于10%的时候,我把再平衡间隔拉长到1.5倍;高于25%的时候,缩短到一半。中间状态就按季度来。
怎么判断当前该不该调?
除了用波动率算固定间隔,我还会加一个「动态触发」条件。说白了就是:到了计划调仓日,先看看当前偏离度,如果偏离不大,就再等等。
def should_rebalance(weights_target, weights_current, threshold=0.05):
"""
判断是否需要执行再平衡
threshold: 偏离阈值,默认5%
"""
max_deviation = max(abs(weights_current - weights_target))
if max_deviation > threshold:
return True
return False
这个函数的意思是:只有当某个资产的权重偏离目标超过5%时,才动手。否则就算到了调仓日,也按兵不动。
我自己的组合里,把波动率自适应和偏离度触发结合起来用。效果比单一策略好不少。
一张图看懂自适应频率的核心逻辑
下面这张SVG图,把整个决策流程画清楚了。你可以保存下来,做策略的时候对照着看。
这个流程其实就三步:算波动率、判断区间、定频率。简单但有效。
几点实战建议
- 别把频率设得太极端。 我见过有人把频率上限设到每天一次,结果把自己累崩了。建议最小间隔不要少于20个交易日,最大不要超过半年。
- 波动率计算窗口要选对。 我个人习惯用20日滚动窗口,太短容易受噪音干扰,太长又反应迟钝。
- 别忘了交易成本。 自适应频率虽然聪明,但如果你的交易成本很高(比如某些ETF),还是得悠着点。我一般会在代码里加一个成本检查,如果预计成本超过预期收益,就跳过这次调仓。
好了,关于再平衡频率的选择,今天就聊到这儿。记住一句话:没有最好的频率,只有最适合当前市场的频率。波动率自适应,就是帮你找到那个「最合适」的工具。