CVaR 的计算与优化投资组合权重

条件风险价值(CVaR,Conditional Value at Risk) 是一种衡量投资组合尾部风险的指标,特别适用于优化投资组合权重,以在控制风险的同时最大化收益。

1. CVaR 的计算

CVaR 是在给定置信水平下,投资组合损失超过 VaR(Value at Risk)的期望值。以下是 CVaR 的计算公式:

CVaRα=E[L∣L>VaRα]\text{CVaR}_\alpha = \mathbb{E}[L | L > \text{VaR}_\alpha]CVaRα=E[LL>VaRα]

其中:

  • LLL是投资组合的损失。
  • α\alphaα 是置信水平(例如 95%)。
  • VaRα\text{VaR}_\alphaVaRα 是在 α\alphaα 置信水平下的风险价值。

2. MATLAB 实现代码

2.1 数据准备

假设我们有一组历史收益率数据,用于计算 CVaR。

clc;
clear;
close all;

% 假设历史收益率数据
returns = randn(1000, 5); % 1000 个样本,5 个资产
returns = returns * 0.01; % 转换为百分比

% 置信水平
alpha = 0.95;

% 计算 VaR
VaR = prctile(returns, (1 - alpha) * 100, 1); % 每个资产的 VaR

% 计算 CVaR
losses = returns;
losses(losses > VaR) = NaN; % 只保留超过 VaR 的损失
CVaR = nanmean(losses, 1); % 计算 CVaR
2.2 优化投资组合权重

使用 CVaR 作为目标函数,优化投资组合权重,以最小化 CVaR。

% 优化目标:最小化 CVaR
numAssets = size(returns, 2);
weights = optimvar('weights', numAssets, 'LowerBound', 0, 'UpperBound', 1);
sumWeights = sum(weights) == 1; % 权重和为 1
portfolioReturns = returns * weights; % 投资组合收益率
portfolioLosses = -portfolioReturns; % 损失为负收益

% 定义 CVaR 作为目标函数
VaR = prctile(portfolioLosses, (1 - alpha) * 100);
losses = portfolioLosses;
losses(losses < VaR) = NaN; % 只保留超过 VaR 的损失
CVaR = nanmean(losses);

% 优化问题
prob = optimproblem('Objective', CVaR, 'Constraints', struct('sumWeights', sumWeights));
[sol, fval] = solve(prob);

% 输出优化结果
optimizedWeights = sol.weights;
disp('优化后的投资组合权重:');
disp(optimizedWeights);

参考代码 CVaR的计算,以及cvar最优化的投资组合权重问题 www.youwenfan.com/contentcsd/77962.html

3. 代码说明

  1. 数据准备:假设有一组历史收益率数据,用于计算 CVaR。
  2. CVaR 计算:计算每个资产的 VaR 和 CVaR。
  3. 优化投资组合权重
    • 定义优化变量(权重)。
    • 确保权重和为 1。
    • 定义目标函数为最小化 CVaR。
    • 使用 optimproblemsolve 函数求解优化问题。
Logo

加入社区!打开量化的大门,首批课程上线啦!