一、再平衡基础:什么是指数增强组合、为什么需要再平衡、再平衡的核心目标
1.1 什么是指数增强组合
先说说指数增强组合是个什么东西。
说白了,它就是一种「既要又要」的投资策略。你想想看,买指数基金吧,省心是省心,但收益也就那样,跟指数走。主动管理基金呢,收益可能高,但风险也大,搞不好还跑不赢指数。
指数增强组合,就是在这两者之间找个平衡点。它的目标是:在跟踪指数的基础上,争取多赚一点超额收益。
我个人的理解是,它像是一个「带翅膀的指数」。主体是指数,但加了一些主动管理的翅膀——比如选股、择时、行业轮动这些手段,让组合能飞得更高一点。
具体来说,指数增强组合通常包含两部分:
- β收益:来自指数本身的涨跌,这是基础
- α收益:来自主动管理带来的超额收益,这是增强部分
举个例子,沪深300指数今年涨了10%,你的指数增强组合涨了13%,那多出来的3%就是α收益。嗯,这就是我们做增强的目的。
核心公式:组合收益 = 指数收益(β) + 超额收益(α)
α > 0,说明增强有效;α < 0,说明增强反而拖了后腿。
1.2 为什么需要再平衡
好,现在你有了一个指数增强组合。但问题来了——市场在变,股票在涨跌,组合的权重会慢慢偏离原来的设定。
我记得刚入行那会儿,做过一个回测。初始权重设定好了,觉得万事大吉。结果三个月后一看,组合里涨得好的股票占比越来越大,跌得多的占比越来越小。整个组合的风险暴露完全变了样。
为什么会这样?
因为市场不是静止的。股票A涨了50%,股票B跌了20%,它们的权重自然就变了。如果不做调整,组合就会慢慢「漂移」——偏离你最初设定的目标。
再平衡,就是要把这个漂移拉回来。
具体来说,需要再平衡的原因有这几个:
- 价格变动导致权重偏离:涨得多的股票占比变大,风险集中
- 因子暴露发生变化:比如原本低波动的股票变得高波动了
- 指数成分股调整:指数公司会定期调整成分股,你得跟着换
- 资金流入流出:申购赎回会影响组合的持仓比例
我的经验:我曾经做过一个回测,半年不做再平衡,组合的跟踪误差从0.5%扩大到了2.3%。别小看这个数字,对于机构投资者来说,跟踪误差超过2%基本就属于「失控」了。
1.3 再平衡的核心目标
再平衡不是随便调调仓就完事了。它有三个核心目标,我一个个说。
目标一:控制跟踪误差
跟踪误差,就是组合收益跟指数收益之间的偏差。你想想看,指数增强的前提是「跟踪指数」,如果偏差太大,那就不叫增强,叫主动管理了。
我一般把跟踪误差控制在1%-2%之间。太低了吧,说明你没做什么增强;太高了吧,风险又太大。
目标二:维持风险暴露
每个组合都有它的风险模型——行业暴露、风格暴露、因子暴露。再平衡就是要让这些暴露保持在预设的范围内。
举个例子,你本来设定组合里科技股的权重是20%,结果因为科技股大涨,变成了30%。这时候你就得卖掉一部分科技股,买点别的,把权重调回20%。
目标三:实现超额收益
这才是增强的最终目的。再平衡不是简单地「卖高买低」,而是要结合你的选股模型、因子模型,把那些预期收益高的股票加进来,把预期收益低的减出去。
说白了,再平衡就是一次「优胜劣汰」的过程。
避坑指南:我曾经犯过一个错误——为了追求超额收益,频繁做再平衡。结果交易成本吃掉了一大半收益,得不偿失。再平衡不是越频繁越好,要找到那个「最优频率」。
1.4 再平衡的知识体系
下面这张图,是我自己梳理的再平衡知识框架。你看一眼,心里就有数了。
1.5 再平衡的两种基本方式
再平衡怎么做?主要有两种思路。
方式一:定期再平衡
固定时间点做调整,比如每个月、每个季度。好处是简单、可预期,交易成本也容易控制。坏处是——如果市场波动大,中间这段时间组合可能已经偏离得很厉害了。
方式二:阈值触发再平衡
设定一个偏离阈值,比如某个股票权重偏离超过2%就触发调整。好处是能及时纠偏,坏处是交易频率可能很高,成本上去了。
我个人比较喜欢用混合策略:定期做一次全面再平衡,中间如果偏离太大就触发阈值调整。这样既控制了成本,又不会让组合失控。
实战建议:对于A股市场,我一般建议月度再平衡。太频繁了成本高,太少了跟踪误差大。月度是个不错的平衡点。
1.6 再平衡的代码实现
最后,给一段简单的Python代码,演示再平衡的核心逻辑。你感受一下。
import pandas as pd
import numpy as np
def rebalance_portfolio(holdings, target_weights, threshold=0.02):
"""
指数增强组合再平衡函数
Parameters:
-----------
holdings : dict
当前持仓,格式 {股票代码: 市值}
target_weights : dict
目标权重,格式 {股票代码: 权重}
threshold : float
触发再平衡的偏离阈值
Returns:
--------
trades : dict
需要执行的交易,格式 {股票代码: 交易金额}
"""
total_value = sum(holdings.values())
current_weights = {k: v/total_value for k, v in holdings.items()}
trades = {}
need_rebalance = False
# 检查是否有股票偏离超过阈值
for stock in target_weights:
current_w = current_weights.get(stock, 0)
target_w = target_weights[stock]
deviation = abs(current_w - target_w)
if deviation > threshold:
need_rebalance = True
# 计算需要调整的金额
target_value = total_value * target_w
current_value = holdings.get(stock, 0)
trades[stock] = target_value - current_value
if not need_rebalance:
print("组合偏离在阈值范围内,无需再平衡")
return {}
print(f"触发再平衡,共需调整 {len(trades)} 只股票")
return trades
# 示例用法
holdings = {'000001': 1000000, '000002': 800000, '000003': 1200000}
target_weights = {'000001': 0.3, '000002': 0.3, '000003': 0.4}
trades = rebalance_portfolio(holdings, target_weights, threshold=0.03)
print(trades)
这段代码的核心逻辑很简单:算当前权重,跟目标权重比,超过阈值就触发交易。实际生产中要考虑的东西更多——交易成本、流动性、冲击成本等等。但核心思想就是这个。
我的习惯:在实际项目中,我会在再平衡函数里加一个「成本收益分析」模块。如果调整带来的预期收益覆盖不了交易成本,那就先不动。别为了再平衡而再平衡。
公众号:蓝海资料掘金营,微信deep3321