做资产组合优化,谁都会背一句"不要把所有鸡蛋放在一个篮子里",但真到了要把这句老话变成一串可执行的投资权重时,事情就完全不是直觉能扛住的了。你需要回答的问题是:每个资产配多少比例,才能在给定风险水平下拿到最高的期望收益?这个问题最早被马科维茨用均值-方差框架数学化,后面几十年,无数人在这套框架上做统计改良。我最早接触这个课题时,天真地以为难点在求解器或者优化算法,真正做下去才发现,卡脖子的从来都是输入参数——期望收益率怎么估、协方差矩阵怎么估、相关性结构在极端行情下还成不成立。这篇文章是系列第一篇,我会先把组合优化的统计地基讲透,包括资产组合收益与风险的统计语言、参数估计的坑、有效前沿的求解逻辑,以及一个在实战中最容易被忽略的问题:相关性结构在压力场景下的突变。内容适合有基本统计和线性代数基础、想真正理解组合优化原理并准备上手实操的读者,我会尽量把推导背后的直觉也讲清楚。
1. 均值-方差框架:组合优化的统计地基到底说了什么
1.1 从收益率到风险:为什么风险必须用方差来刻画
在进入组合优化之前,先把单个资产的统计画像说清楚。任何资产的收益都可以视为一个随机变量 (R),它的期望值 (E(R)) 就是投资者最关心的"回报",通常用历史样本均值来估计。而风险的定义相对复杂:金融学的标准做法是用方差或者标准差(波动率)来衡量,也就是 (\sigma^2 = E[(R - E(R))^2])。
为什么是方差?一方面,它简单、可解析,均值-方差框架下组合的方差可以直接用协方差矩阵表达,方便后续求导和优化;另一方面,如果假设资产收益近似服从正态分布,那么均值和方差就完全刻画了整个分布,风险和收益的权衡退化成两个数字之间的权衡。实操中大家都知道收益分布有肥尾特征,但在建模的第一步,正态假设至少给我们一个合理的起点——所有更复杂的模型(Copula、GARCH类波动率、极值理论)都是在某种程度上修正这个起点带来的偏差。
这里要提一个常见误区:风险并不是"亏钱的可能性",方差衡量的其实是"收益偏离期望的程度",无论偏离方向是正是负,都会算进风险里。所以两个期望收益相同、波动率相同的资产,哪怕一个总是小赚大亏、一个总是小亏大赚,在均值-方差框架里风险是一样的。这正是很多实战派诟病马科维茨模型的地方,但理解这个设定,你才能真正看懂后面所有"改良版模型"到底在改良什么。
1.2 组合收益的传递与风险的非线性叠加
当你持有 (N) 个资产,权重向量为 (\mathbf{w} = (w_1, w_2, ..., w_N)^T),其中 (\sum w_i = 1),组合的期望收益是各资产期望收益的加权平均:
[
\mu_p = \mathbf{w}^T \boldsymbol{\mu}
]
这很直观。但组合的方差就不是加权平均了,它的表达式是:
[
\sigma_p^2 = \mathbf{w}^T \Sigma \mathbf{w}
]
其中 (\Sigma) 是资产收益的协方差矩阵,第 (i) 行第 (j) 列的元素是 (\mathrm{Cov}(R_i, R_j))。展开来写就是:
[
\sigma_p^2 = \sum_{i=1}^N w_i^2 \sigma_i^2 + \sum_{i=1}^N \sum_{j \neq i} w_i w_j \sigma_i \sigma_j \rho_{ij}
]
这个式子是整个组合优化最核心的统计表达。它清楚地告诉我们三件事:
- 单项资产自身波动 (\sigma_i^2) 对组合风险的贡献按 (w_i^2) 递减,所以分散持有大量资产时,单项资产的特质风险会被有效摊薄。
- 组合风险里很大一部分来自资产之间的协方差项,也就是 (\rho_{ij})。相关性越低,协方差项越小,分散化的效果越好。
- 如果所有资产之间的相关系数都为1,协方差项无法被摊薄,组合的风险就是各资产风险的加权平均,组合优化就失去了意义。
我当年看这个公式时最有触动的一点在于:市场风险和管理风险在统计上的区分本质上是相关性的问题——特质风险(与市场无关的个股风险)可以通过分散化消除,因为它们的相关性趋于0;系统性风险(市场整体波动带来的风险)对所有资产都有影响,相关系数不会降为0,所以你永远无法通过组合化消除它。这个区分不是经验总结,而是直接从这个公式推出来的结论。
1.3 有效前沿:从"有没有可行集"到"哪个组合最优"
在均值-方差框架下,每个组合都对应 ((风险, 收益)) 平面上的一个点。全部可能组合构成的区域叫做可行集,而它的左上边界线就是有效前沿(Efficient Frontier)。有效前沿上的每一个点,都对应着"给定风险水平下,最大期望收益"或者"给定期望收益下,最小方差"的组合。
用户真正想解决的往往不是"画出完整前沿",而是这个前沿上的某一个点。最常用的选择标准是最大化夏普比率:
[
\max_{\mathbf{w}} \frac{\mathbf{w}^T \boldsymbol{\mu} - r_f}{\sqrt{\mathbf{w}^T \Sigma \mathbf{w}}}
]
也就是"每单位风险能换来多少超额收益"的最优解,这个点通常被称为最大夏普组合,也是很多量化投顾策略的参考基准。
但要注意,有效前沿的求解结果非常依赖输入的 (\boldsymbol{\mu}) 和 (\Sigma)。输入参数变了,最优权重会剧烈变化。所以整个组合优化的统计建模,真正的工作量不是"解这个优化问题",而是"把输入参数估准"。很多人做了半天优化器,发现输出的权重在样本外表现一塌糊涂,根因几乎都在参数估计环节。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 参数估计的细节:期望收益、协方差矩阵与估计误差
2.1 期望收益的估计是最难的部分
如果说协方差矩阵还能用较高频率的数据估得相对稳定,期望收益就是组合优化里最不确定的输入。用历史平均收益作为期望收益的估计,理论上是无偏的,但问题是估计量的方差太大。假设年化收益的标准差为20%,你用5年(约1250个交易日,或60个月)的日频数据估计均值,均值估计的标准误是多少?
[
SE(\hat{\mu}) = \frac{\sigma}{\sqrt{T}} = \frac{20%}{\sqrt{1250}} \approx 0.57%
]
也就是年度化后约0.57%?这个数值看起来不大,但如果用月频数据,60个样本的均值标准误差是:
[
SE(\hat{\mu}) = \frac{20%/\sqrt{12}}{\sqrt{60}} \approx 0.74%
]
直观上说,你连"这个资产历史平均年化收益到底是8%还是9%"都不敢确定,但优化器会把这种差异放大成权重的剧烈调仓。更麻烦的是,历史均值对未来的预测能力很差,资产收益的均值本身就不稳定,行业轮动、宏观环境变化都会让期望收益发生结构性的迁移。
所以在实操中,我建议尽量不要让模型纯粹依赖历史均值作为 (\boldsymbol{\mu}) 的输入。常用的改良思路包括:
- 用隐含收益率(从衍生品价格反推的市场预期)替代历史均值。
- 对历史均值做收缩处理(把均值向某一个先验值收缩,比如向所有资产的均值收缩),降低极端值的影响。
- 引入多因子模型的预测值。也就是先用宏观因子、风格因子对资产收益做回归,用模型预测值作为期望收益。
但无论用什么方法,期望收益永远是组合优化链条里误差最大的部分。这不是统计技巧能完全解决的问题,而是金融数据本身的信噪比太低。理解了这一点,你就能理解为什么很多机构宁愿用风险平价或者等权重组合,因为它们在降低对 (\boldsymbol{\mu}) 估计误差的敏感度。
2.2 协方差矩阵的估计与维度灾难
协方差矩阵的估计在统计上相对好办,但也有一个杀手级问题:维度灾难。假设你有 (N) 个资产,协方差矩阵中需要估计的参数个数是 (N(N+1)/2)。当 (N = 50) 时,需要估计1275个参数;当 (N = 200) 时,需要估计20100个参数。
如果你的样本只有252个交易日(一年),用样本协方差矩阵直接估计,这个矩阵在数学上可能是奇异的(不可逆),或者即使可逆,估计精度也非常差。更麻烦的是,样本协方差矩阵会把噪声当成信号,导致优化器疯狂利用这些虚假的"低相关"或"负相关"结构,输出极端的权重。
解决这个问题的标准路线是收缩估计(Shrinkage Estimation),最典型的做法是Ledoit-Wolf收缩。它的核心思想很简单:把样本协方差矩阵 (S) 向一个结构化目标矩阵 (F) 收缩,得到:
[
\Sigma_{\text{shrink}} = \delta F + (1-\delta) S
]
目标矩阵 (F) 通常取对角线矩阵(各资产方差,协方差为0)或者常数相关系数矩阵。收缩强度 (\delta) 需要根据数据自动估计,Ledoit-Wolf方法给出了一个解析最优解,可以在不引入过多偏差的情况下大幅降低估计方差。
在实际操作中,我通常会在组合优化前,对协方差矩阵做三件事:
- 如果数据量不足或矩阵条件数过大,优先用Ledoit-Wolf收缩。
- 至少用指数加权移动平均(EWMA)来处理波动率,对近期数据赋予更高权重。
- 检查协方差矩阵的特征值分布,如果最大特征值占比过高,说明市场单一因子主导,分散化效果会被削弱。
2.3 到底用日频还是月频数据?
这不是一个无所谓的建模选择,它会直接影响协方差矩阵的估计质量。统计上有两个相关的权衡:
- 样本量越大,估计越稳定,所以日频数据更受欢迎。
- 但日频收益会受到微观结构噪声的影响,尤其是流动性较差的资产,日收益序列存在明显的自相关;此外,日频数据对"低频相关性"的刻画偏弱,比如股票和债券在日频上的相关性可能在正负之间震荡,但月频上呈现稳定的负相关。
我的经验法则是:如果资产池主要是大盘股和利率债这类流动性较好的品种,日频数据配合EWMA或收缩估计是合理选择;如果资产池里有非上市地产、私募信贷或者小市值股票,尽量用月频或季频数据去估计长期相关性,日频数据会把短期噪声误认为长期结构。
另一个容易忽略的点是数据的异步性。不同市场、不同资产类别的交易时间不完全重合,直接用收盘价拼接日频序列会在协方差估计中引入严重的向下偏差(因为非同步交易会让两只实际同涨同跌的资产在日频上表现出较低的相关性)。处理办法是引入滞后协方差修正项:
[
\rho_{\text{adj}} = \frac{\mathrm{Cov}(R_i, R_j) + \mathrm{Cov}(R_i, R_{j,lag}) + \mathrm{Cov}(R_{i,lag}, R_j)}{\sigma_i \sigma_j}
]
实操中,很多成熟的Quant工具会默认做这种调整。
3. 有效前沿求解:从二次规划到代码落地
3.1 问题的数学形式
组合优化的标准形式可以写成一个带线性约束的二次规划问题。以"给定期望收益 (\mu_0),最小化组合方差"为例:
[
\min_{\mathbf{w}} \frac{1}{2} \mathbf{w}^T \Sigma \mathbf{w}
]
[
\text{s.t.} \quad \mathbf{w}^T \boldsymbol{\mu} = \mu_0, \quad \mathbf{w}^T \mathbf{1} = 1
]
如果不允许做空,还要加上 (\mathbf{w} \ge 0)。这类问题用求解器非常好解,实际难点不在求解本身,而在问题设置。比如:
- 是否允许做空?做空限制会显著改变有效前沿的形状,也会影响最优权重的分布。
- 是否有行业暴露约束、个股权重上限?这类线性约束会让问题更接近实盘约束,但也更容易让求解器产生"边界堆积"现象。
- 是否有交易成本约束?考虑交易成本后,优化问题会变成"扣费后的期望收益最大化",这是一个完全不同的模型。
3.2 用Python求解最小方差组合和最大夏普组合
以下是一个可复现的最小示例,假设你已经准备好了收益矩阵 returns(形状为 [样本期数, 资产数])。
python复制import numpy as np
import pandas as pd
import cvxpy as cp
from sklearn.covariance import LedoitWolf
# 假设 returns 是 DataFrame,每列是一个资产的收益率序列
mu = returns.mean() * 252 # 年化期望收益
sigma = LedoitWolf().fit(returns).covariance_ * 252 # 年化协方差矩阵
n_assets = returns.shape[1]
w = cp.Variable(n_assets)
# 最小方差组合(不允许做空)
risk = cp.quad_form(w, sigma)
constraints = [cp.sum(w) == 1, w >= 0]
prob = cp.Problem(cp.Minimize(risk), constraints)
prob.solve()
print("最小方差组合权重: ", w.value)
print("组合年化波动率: ", np.sqrt(prob.value))
如果要解最大夏普组合,可以用一个技巧:把目标函数转成凸二次规划。过程不复杂,但要注意必须在目标函数里引入无风险利率 (r_f),否则解出来的权重可能完全偏向某一个资产。
python复制rf = 0.02 # 无风险利率,2%年化
# 最大化夏普比率等价于在一个可行集上最大化超额收益/风险
# 可以转换为一个凸优化问题
mean_excess = mu - rf
prob2 = cp.Problem(cp.Minimize(risk), constraints + [mean_excess @ w == 1])
prob2.solve()
w_sharpe = w.value / np.sum(w.value) # 归一化回权重
print("最大夏普组合权重: ", w_sharpe)
这段代码里的关键是 mean_excess @ w == 1,这一行人为规定了"单位超额收益",把夏普最大化问题转成了方差最小化问题。但这种转换有一个前提:目标组合必须在有效前沿上,而且市场中必须存在一个无风险资产。如果这两个条件不成立,求解结果需要谨慎解读。
3.3 权重约束的细节:边界堆积与稀疏性
实际做组合优化时,如果不加权重上限约束,经常出现的结果是:某个资产权重是0,某个资产权重是0.8,另一个是-0.3。这在纯数学上是有效的,但实盘里你很难执行这种极端仓位。
一个常规做法是加入权重上限约束,比如单品不超过10%:
python复制constraints = [cp.sum(w) == 1, w >= 0, w <= 0.10]
加了上限之后,会出现一个有意思的现象:很多资产的权重会"粘"在上限位置上,模型变成了"雨露均沾"式的配比。这说明约束条件已经主导了优化结果,输入参数的影响被削弱了。在实盘中,这未必是坏事——当你对输入参数没有足够信心时,强约束等于人为地做了正则化。
还有一个处理办法是把 (L1) 范数惩罚加入目标函数。对于允许做空的组合,这会促使权重稀疏化(很多资产权重归零),减少交易标的数量,降低换手率和成本。对于不允许做空的组合,(L1) 惩罚的作用会弱很多,因为非负约束本身已经施加了某种稀疏性。
4. 相关性结构的隐痛:为什么危机中组合总是"不够分散"
4.1 相关系数不是常数,它是状态依赖的
这是组合优化统计建模里最容易被低估的问题。我们估计协方差矩阵时,用的是全样本或者滚动窗口,得到的是一个"平均相关性"。但在真实市场中,资产相关性会随市场状态发生剧烈变化,而且在极端下跌行情中,几乎所有风险资产的相关性会同时抬升,趋向于1。这个现象在业内被称为"危机相关性"或者"相关性崩塌"。
举个我实测过的例子:股票和国债在大部分时间里相关性接近于0甚至是负的,股票暴跌时资金涌入国债避险,两者负相关,组合能有效对冲。但某些特殊阶段(比如流动性挤兑、保证金螺旋),投资者会抛售一切可以抛售的资产来换取现金,股票和国债会同步下跌,相关性瞬间转正。如果你在构建组合时用的是常态下的负相关性,那么压力场景来临时,你的"分散化"会瞬间失效。
更一般化地说,资产收益的联合分布不是多元正态分布,它的尾部依赖结构比正态假设下更强。用专业的统计语言说:极端下跌的联合概率高于多元正态分布给出的概率。一个比较直观的理解是胖尾分布——每个资产自己都有肥尾,而这些肥尾通常是同步出现的(共同受宏观冲击驱动),所以"所有资产一起大跌"的概率远高于均值-方差假设下的估计。
4.2 应对思路一:用更保守的相关系数做压力测试
构建组合时,不能只输入一个"常态"的相关系数矩阵。实操中我会额外构建一个压力场景的相关系数矩阵,比如:
- 历史压力期相关性矩阵:选取2008年、2015年、2020年这几个公认的危机区间,分别估计各自的相关性矩阵。
- 条件相关性矩阵:以市场指数下跌超过两个标准差为条件,重新估计资产间的相关性。
- 相关性平移方法:将所有相关系数向1方向整体移动,观察组合风险的变化幅度。
然后用压力场景的相关性矩阵重新求解组合,看权重是否"过拟合"常态场景。如果某个组合在常态下很漂亮,但在压力场景下波动率翻倍甚至更高,这个组合的风险预算就是不健康的。
4.3 应对思路二:引入非高斯依赖结构(简单讨论)
更严格的统计做法是用Copula模型直接建模资产收益的联合分布。Copula的核心思想是把每个资产的边际分布和它们之间的依赖结构拆开建模:边际分布可以用t分布或者经验分布描述尾部肥度,依赖结构用t-Copula或者Gaussian Copula刻画相关性。
t-Copula比Gaussian Copula的好处在于它允许尾部依赖:极端下跌时,资产之间的同步性比常态更强。业界有不少论文和开源库实现了这个模型,但它在组合优化中的实用性一直受限,原因有两个:高维Copula的参数估计难度很大;Copula的蒙特卡洛模拟耗时较长,高频更新困难。所以更常见的做法是把"相关性的非线性变化"简化为"压力场景测试",而不是端到端的Copula优化。
5. 输入参数的敏感性分析与统计模型的边界
5.1 最优化权重对输入参数的不稳定性
一个我亲眼见过很多次的现象:用同一批数据,把样本窗口从"最近5年"换成"最近6年",优化出的权重会发生剧烈变化。这不是代码bug,而是均值-方差优化器天然的特性:当资产间的相关性较高时,协方差矩阵近似奇异,矩阵求逆的数值稳定性很差,输入参数的微小扰动会被放大成权重的巨大变化。
学术上这个现象有严格的解释:最优权重对 (\Sigma) 的逆有直接的依赖,而矩阵求逆会把小特征值对应的方向放大。如果样本协方差矩阵中存在极小的特征值,对应的特征向量方向上的估计噪声就会被急剧放大。解决这类问题的手段就是之前提到的收缩估计、因子模型降维(先用PCA或者因子模型把协方差矩阵压缩到低维空间),或者干脆用等权重组合作为稳健基准。
5.2 蒙特卡洛模拟:不要只相信一组最优权重
我在做组合优化时,几乎不会直接使用优化器输出的那一组权重,而是会做以下的事情:
- 对期望收益的每个分量施加一个带有不确定性范围的随机扰动(比如:在上一步估计值的基础上加一个正态噪声,噪声标准差等于该参数的标准误)。
- 对协方差矩阵做同样的扰动(需要保证扰动后的矩阵仍然正定对称,可以重复做Bootstrap拟合并重新估计)。
- 在每次扰动下重新运行优化器,得到一组权重。
- 对所有权重做平均或取分位数,观察哪些资产的权重稳定地为正、哪些资产权重频繁在0附近跳跃。
这个方法本质上是对参数不确定性做一次敏感度传播,输出的是一组"稳健性较强"的配置思路,而非单一最优解。实际效果非常明显:它大幅降低了换手率,也避免了组合在某个参数估计误差的驱动下重仓某个资产。
5.3 因子模型:简化协方差结构,降低估计误差
如果你面对的资产池很大(比如几百只股票),直接估计协方差矩阵是不现实的。实用的替代方案是使用因子模型:
[
R_i = \alpha_i + \sum_{k=1}^K \beta_{ik} F_k + \epsilon_i
]
资产的收益被拆解为因子暴露乘以因子收益再加上特质收益。在这种设定下,组合协方差矩阵可以写成:
[
\Sigma = B \Sigma_F B^T + \Delta
]
其中 (B) 是因子载荷矩阵,(\Sigma_F) 是因子收益的协方差矩阵,(\Delta) 是特质收益方差的对角矩阵。这个结构大大减少了待估参数的个数——你不用再直接估计资产两两之间的相关性,只需要估计资产对因子的暴露((B))和因子之间的相关性((\Sigma_F))。因子数量通常取5到10个,例如市场因子、规模因子、价值因子、动量因子、利率因子。
因子模型另一个显著优点是它让风险分解变得非常直观。你可以直接回答"这个组合的风险里,市场因子贡献了多少,行业因子贡献了多少"这类问题。对于资产配置的决策和风控团队的风险归因,这种透明度非常实用。
6. 一个实战小工具的搭建思路:从样本数据到组合建议
6.1 整体流程设计
把上面的方法论串起来,一个最小可选代的组合优化工具流程可以这样设计:
text复制1. 数据获取与清洗
- 获取各资产的历史价格序列
- 转换为一阶对数差分(对数收益率)
- 处理缺失值和不同交易日历的问题
2. 参数估计
- 期望收益:EWMA均值 / 历史均值 + 收缩
- 协方差矩阵:Ledoit-Wolf收缩,或因子模型分解
- 无风险利率:短期国债收益率
3. 场景构建
- 常态场景:使用全样本估计
- 压力场景:使用危机子样本估计相关性矩阵
4. 优化求解
- 设置约束(权重上下限、行业暴露上限、是否允许做空)
- 求解最小方差组合、最大夏普组合、风险平价组合
- 输出权重和组合风险分解
5. 稳健性检查
- 蒙特卡洛扰动重估
- 压力场景下的风险复核
- 换手率评估
这个流程看起来不复杂,但每一步都有相当多的细节。以数据清洗为例,不同资产的交易日历不同(比如美股和A股),如果你把两个市场简单按日期对齐,会丢失大量数据;更合理的做法是用基于交易时间的异步相关修正。参数估计环节如果要做得更细,还需要考虑波动率聚集效应,用GARCH模型族对波动率建模,而不是简单用历史标准差。
6.2 用什么指标去评估组合的好坏
很多刚开始做组合优化的人会把夏普比率作为终极指标,但实盘中这只是一个维度。我自己的评估习惯是重点看三样东西:
- 最大回撤:用滚动优化得到的组合在历史上的回撤幅度。组合优化模型天然容易过拟合上涨行情(因为高收益资产的权重会被放大),导致回撤控制不佳。
- 换手率与成本:如果每周再平衡一次,权重调整幅度很大,年化交易成本可能直接吃掉超额收益。
- 压力场景表现:用几个典型危机事件的子样本去回测组合,看当时的日度净值下跌幅度。普通市场环境下的夏普比率再高,也经不起极端行情里一次30%的回撤。
这三项看下来,你就大概知道这个模型的实用性和边界在哪里。
6.3 代码框架的简版演示
我在这里给一个最简化的框架性代码,不追求最优,只展示流程,方便你理解每一步是做什么的。
python复制import numpy as np
import pandas as pd
from sklearn.covariance import LedoitWolf
import cvxpy as cp
def estimate_parameters(returns):
"""估计年化期望收益与协方差矩阵"""
mu = returns.mean() * 252
sigma = LedoitWolf().fit(returns).covariance_ * 252
return mu, sigma
def optimize_minvar(returns, upper_bound=0.15):
"""最小方差组合优化"""
mu, sigma = estimate_parameters(returns)
n = returns.shape[1]
w = cp.Variable(n)
risk = cp.quad_form(w, sigma)
constraints = [cp.sum(w) == 1, w >= 0, w <= upper_bound]
prob = cp.Problem(cp.Minimize(risk), constraints)
prob.solve()
return w.value, np.sqrt(prob.value)
def stress_test(returns, crisis_mask):
"""压力场景下的相关性分析"""
_, sigma_normal = estimate_parameters(returns)
crisis_returns = returns[crisis_mask]
sigma_crisis = LedoitWolf().fit(crisis_returns).covariance_ * 252
corr_normal, corr_crisis = ...
# 比较两个相关矩阵的差异,特别是对角之外的显著变化
return corr_normal, corr_crisis
进一步的生产级工具还需要做回测框架和组合再平衡逻辑:每次再平衡时,不能简单按最新权重全部调仓,要考虑交易成本、冲击成本、权重偏离阈值等因素。常用的做法是设置一个"阈值再平衡"规则——只有当权重偏离目标权重超过某个百分比(比如2%)时才触发调仓,否则保持不动。这个规则可以显著降低换手率和交易成本。
结尾:我在实操里踩过最深的坑
真要说这套统计建模方法给我最大的教训,就是"别把模型输出当圣旨"。参数估计有误差、模型有假设、市场有状态切换,任何一个环节都会让理论最优权重在实盘里栽跟头。我现在做组合优化的习惯是:在意"稳健区间"多过"精确数值"——用蒙特卡洛扰动看权重在什么范围波动,而不是只记录一个点估计;在压力场景下做压力测试,而不是只在常态场景下看夏普比率。另外,强烈建议每一版组合方案都做一次换手率评估,你会发现很多理论漂亮的解根本没法落地执行。这个系列的第一篇先写到这里,后面我会继续展开风险平价模型、Black-Litterman模型以及因子模型下的组合优化细节,也会给出更完整的回测实战。如果你正准备上手组合优化,我建议你先从最小方差组合和风险平价做起,把协方差矩阵的估计和压力测试跑熟,再逐步加入更复杂的期望收益模型。
