正文
1.2 依据贝叶斯定理将先验收益率与投资者主观观点相结合
显然市场市值组合并无法实现固收+的目标,甚至绝大部分基于量价历史数据的资产配置模型在国内市场实践中都会出现一定“水土不服”。
BL模型的好处就在于可以通过贝叶斯定理,将先验收益率与投资者的主观观点整合,来为资产配置提供更为“恰当”的输入值。
例如利用历史数据所计算的先验收益率对于股票的判断是5%,而主观判断有10%,那么贝叶斯定理能够两者整合,资产配置模型能在预期波动不变的情况下,提高股票的仓位。
所谓贝叶斯定理是指,在已知相关事件A的情况下,事件B发生的概率,等于事件A和事件B同时发生的概率,除以事件A发生的概率。专注到资产收益上,则表达为基于投资者观点,资产表现处于某一水平的概率如何。
其中P(mu)为资产表现为市场均衡收益的概率,我们假设市场均衡收益服从正态分布概率;而投资者针对资产收益率的观点向量 Q=P*mu+epsilon. 经过概率密度函数展开、对mu求导后设其为0解方程、以及运用矩阵恒等式简化后,我们可以得到资产的后验收益率,
对于矩阵处理等不太熟悉的投资者,可以简单将这一步理解成,通过假设资产收益率分布,并给出资产历史表现和投资者观点,BL模型能够输出对于资产新的期望收益率。
我们可以简单理解,投资者观点会使得组合中各资产的权重偏离“市场均衡”的权重配置,
例如更看多资产A(无论是通过对于A收益率的绝对值,还是对于A相较别的资产收益率的相对值),A的权重会高于其市值在组合的占比。
对于投资者更关切的其实就是观点如何设置?
► 绝对观点:
投资者可以直接设置对于某个资产未来收益率的绝对预期,例如投资者认为沪深300未来一年收益率将达到30%(均衡为21.06%),中债综合债指年化收益率会达到4%(均衡为2.04%)。以2024年年末数据为例,在市场风险系数不变的情况下,股票仓位从11.9%提高到12.3%。动态来看,假设我们能够准确预测未来一段时间资产的表现,则我们能够实现如下的净值回报。
注:数据为2024年12月31日
资料来源:Wind,中金公司研究部
注:数据自2017年12月29日至2025年3月24日
资料来源:Wind,中金公司研究部
► 相对观点:
投资者也可以对于两个或多个资产设置相对收益预期,例如认为中证转债指数未来年化收益率或高于中债综合债指3%,较沪深300低5%。
这里值得点出,我们使用的协方差矩阵是经过收缩估计——其目标是保持资产间相关性一致。在相对观点和协方差对组合有约束的情况下,资产权重的条件可能更不直接。
注:数据为2024年12月31日
资料来源:Wind,中金公司研究部
► 观点准确的概率:
投资者对于其主观观点准确率的判断,可能不是100%。在绝对相信观点的情况下,我们可以预期BL模型后验收益率会更偏向主观观点,而随着置信区间下降,BL模型后验收益率则会贴近先验收益率。
注:数据为2024年12月31日
资料来源:Wind,中金公司研究部
1.3 将期望收益率向量与协方差矩阵带入组合优化模型中
在获取期望收益率和协方差矩阵后,我们则可以将其放在组合优化算法中,计算当前的“最优”配置。但是用什么组合优化算法是值得讨论的。我们将通用的组合优化算法如下表所统计:
资料来源:Wind,中金公司研究部,PyPortfolioOpt
对于固收+而言,相对常用的是后两者。
我们仅用市场均衡收益率进行基准BL模型测算,可以看到 (1) 不同目标波动下,组合基本能够实现波动目标;但是由于权益资产长期表现相对偏弱,波动容许度放大,并没有换来组合收益的提高;(2)目标收益若采用纯债收益率加点的方式,从历史来看加2-2.5%有效果,而更大幅度预期调整的性价比较低。
注:数据自2017年12月29日至2025年3月24日
资料来源:Wind,中金公司研究部
对于固收+应用BL模型而言,我们认为需要关注四个问题:(1)“市场均衡”组合是否应该调整为基准组合;(2)组合如何制定各类资产的上下限;(3)组合如何控制换仓频率和换手率;(4)组合如何使用杠杆?在具体问题讨论中,为进一步简化,我们通过一个由股(沪深300)债(中债综指)两类资产构成的组合来做示意:
2.1 先验模式中“设定”可以变为基准设定
传统BL模型在“市场均衡”假设下,依据资产市值加权来构建基准组合。而对于固收+产品而言,本身就有明确的基准指数,从投资者预期而言,本身也看的是管理人相较于基准在择时择券上的超额。因此,对于后续固收+组合,我们直接固定大类资产的基准权重,例如股一债九。当组合可投池中属于同一类的资产数量不止1个时,我们暂以等权进行基准分配。例如,一个由红利ETF,科创ETF和1-3年国开债ETF构建的组合,在股一债九的约束下,股票ETF在基准组合中的权重均为5%,而债券ETF则为90%。
注:数据为2024年12月31日
资料来源:Wind,中金公司研究部
def sectWgtsDistribute(sector_mapper, sector_wgt_mapper):
# sector_mapper 为子资产的一级分类; sector_wgt_mapper为各类一级分类的基准权重
df = pd.DataFrame(list(sector_mapper.items()), columns=['Asset', 'Category'])
df['CategoryWeight'] = df['Category'].map(sector_wgt_mapper)
category_counts = df.groupby(