
MATLAB马科维茨均值-方差/CVaR模型实现(投资组合优化问题)”
今天咱们来点实际的,手把手用Matlab搞投资组合优化。金融圈的老司机们肯定熟悉马科维茨的均
值-方差模型,不过实际应用中CVaR(条件风险价值)可能更带劲——毕竟亏钱的时候谁不想知道自己会多惨
呢?
先准备个三支股票的小剧场。假设它们的年化收益率在8%-20%之间波动,用随机数生成三年历史数
据(现实中建议用真实数据,这里咱们先玩起来):
```matlab
returns = [0.12 + randn(36,1)*0.05,
0.15 + randn(36,1)*0.1,
0.20 + randn(36,1)*0.15];
mu = mean(returns)';
Sigma = cov(returns);
```
**均值-方差模型**的核心是找收益与风险的平衡点。咱们先设定目标收益率,然后找最小方差组
合。Matlab自带的`quadprog`简直就是为这种二次规划问题定制的:
```matlab
targetReturn = 0.18;
Aeq = [mu'; ones(1,3)];
beq = [targetReturn; 1];
lb = zeros(3,1); % 禁止做空
weights_mv = quadprog(Sigma, [], [], [], Aeq, beq, lb);
```
这里有个坑:协方差矩阵必须是正定的。如果遇到数值问题,试试`nearcorr`函数处理数据。
接下来**CVaR模型**更刺激。假设咱们用95%置信水平,需要把历史数据转换成损失场景:
```matlab
alpha = 0.95;
losses = -returns; % 把收益转为损失
n = size(losses,1);
```
构建CVaR优化问题时,得引入两个新变量:VaR值和每个场景的超额损失。这时候`linprog`可能更
顺手: