【FinE】PortfolioCVaR实现CVaR投资组合优化分析

本文详细介绍了如何使用PortfolioCVaR对象进行投资组合优化,包括创建CVaR对象、设定资产收益率和场景、设置约束、验证投资组合、估计有效前沿以及结果处理。通过示例展示了如何使用Monte-Carlo模拟生成场景,并利用这些场景构建投资组合的有效前沿。此外,还涵盖了CVaR优化问题的要素和约束条件,以及如何从有效前沿获取组合权重。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

PortfolioCVaR object workflow

建立PortfolioCVaR流程如下

  1. 创建CVaR对象
  2. 定义资产收益率(returns)和场景(scenarios)
  3. 设置CVaR的约束
  4. 验证CVaR投资组合
  5. 估计投资组合的有效前沿
  6. 结果处理

Creation

p = PortfolioCVaR % empty portfolio
p = PortfolioCVaR(Name, Value) % For example, p=PortfolioCVaR('AssetList', Assets(1:12))
p = PortfolioCVaR(p, Name, Value) % p is a previouslu constructed PortfolioCVaR object

PortfolioCVaR的属性如下表所示

ItemsMeaning
AssetListNames or symbols of assets in universe
InitPortInitial portfolio
NameName for instance of PortfolioCVaR object
NumAssetsNumber of assets in the universe

Constraints

CVaR模型中的约束条件如下表所示

ConstraintsMeanings
AEqualityLinear quality constraint matrix
AInequalityLinear inequality constraint matrix
bEqualityLinear equality constraint vector
bInequalityLinear inequality constraint
GroupAGroup A weights to be bounded by weights in group B
GroupBGroup B weights
GroupMatrixGroup membership matrix
LowerBoundLower bound constraint
LowerBudgetLower bound budget constrant
LowerGroupLower bound group constraint
LowerRatioMinimum ratio of allocations between Groups A and B
UpperBoundUpper bound constraint
UpperBudgetUpper bound budget constraint
UpperGroupUpper bound group constraint
UpperRatioMaximum ratio of allocations between Groups A and B
BoundTypesimple or conditional
MinNumAssetsMinimum number of assets allocated in portfolio
MaxNumAssetsMaximum number of assets allocated in portfolio
TurnoverTurnover constraint
SellTurnoverTurnover constraint on sales
BuyTurnoverTurnover constraint on purchases

Portfolio Object Modeling

objectsMeanings
BuyCostProportional purchase costs
RiskFreeRate无风险利率
ProbabilityLevel水平为1-loss prob.的在险价值
NumScenarios场景的数量
SellCostProportional sales costs

Demos

PortfolioCVaR Object build

设置资产的收益率和方差-协方差矩阵参数,使用Monte-Carlo模拟nscenarios. 模拟可以使用函数mvnrnd完成

R=mvnrnd(mu, sigma, n) returns a matrix R of n random vectors chosen from the same multivariate normal distribution, with mean vector mu and covariance matrix sigma

%% CVaR object using single step setup
m = [0.05; 0.1; 0.12; 0.18]; % 设置资产年收益率
C = [ 0.0064 0.00408 0.00192 0;  % 设置资产的方差-协方差矩阵
    0.00408 0.0289 0.0204 0.0119;
    0.00192 0.0204 0.0576 0.0336;
    0 0.0119 0.0336 0.1225 ];

m = m/12;
C = C/12;
N = 20000;
AssetScenarios=mvnrnd(m, C, N); % 模拟20000种scenarios
p = PortfolioCVaR('Scenarios', AssetScenarios, 'LowerBound', 0, 'LowerBudget', 1, 'UpperBudget', 1, 'ProbabilityLevel', 0.95);

也可以分步骤建立

p = PortfolioCVaR;
p = setScenarios(p, AssetScenarios);
p = PortfolioCVaR(p, 'LowerBound', 0);
p = PortfolioCVaR(p, 'LowerBudget', 1, 'UpperBudget', 1);
p = setProbabilityLevel(p, 0.95);

绘制有效前沿(由于mean-CVaR在求解QP规划时用到了和mosek中的同名函数,但是函数接口不同,为了解决冲突,可以在设置路径中将mosek至于底端,提高quadprog系统函数的优先级)

%%
p = PortfolioCVaR;
p = setSolver(p, 'fmincon');
p = setScenarios(p, AssetScenarios);
p = PortfolioCVaR(p, 'LowerBound', 0);
p = PortfolioCVaR(p, 'LowerBudget', 1, 'UpperBudget', 1);
p = setProbabilityLevel(p, 0.95);

plotFrontier(p);

Frontier
也可以使用属性名称的简写

m = [ 0.05; 0.1; 0.12; 0.18 ];
C = [ 0.0064 0.00408 0.00192 0;
0.00408 0.0289 0.0204 0.0119;
0.00192 0.0204 0.0576 0.0336;
0 0.0119 0.0336 0.1225 ];

m = m/12;
C = C/12;
AssetScenarios = mvnrnd(m, C, 20000);
p = PortfolioCVaR('scenario', AssetScenarios, 'lb', 0, 'budget', 1, 'plevel', 0.95)

或者显式使用属性设置

AssetScenarios = mvnrnd(m, C, 20000);
p = PortfolioCVaR;
p = setScenarios(p, AssetScenarios);
p.ProbabilityLevel = 0.95;
p.LowerBudget = 1;
p.UpperBudget = 1;
p.LowerBound = zeros(size(m));

Case

读入12只股票的历史数据集,使用函数simulateNormalScenariosByData模拟场景

%% case
load CAPMuniverse.mat
N = 20000;
p = PortfolioCVaR('AssetList', Assets(1: 12)); % 读入股票数据
% 根据历史数据产生场景
p = simulateNormalScenariosByData(p, Data(:, 1:12), N, 'MissingData', true);
p = setDefaultConstraints(p);
p = setProbabilityLevel(p, 0.95);
plotFrontier(p); 

f从有效前沿上得到组合权重

% display
pwgt = estimateFrontier(p, 5); % 得到5种权重
pnames = cell(1,5);
for i = 1:5
	pnames{i} = sprintf('Port%d',i);
end
Blotter = dataset([{pwgt},pnames],'obsnames',p.AssetList);
disp(Blotter);

CVaR optimization

CVaR优化问题有以下四种要素:

  • A universe of assets with scenarios of asset total returns for a period of interest, where scenarios comprise a collection of samples from the underlying probability distribution for asset total returns. This collection must be sufficiently large for asymptotic convergence of sample statistics. Asset return moments and related statistics are derived exclusively from the scenarios(场景需要包括资产收益率的概率分布情况)

  • A portfolio set that specifies the set of portfolio choices in terms of a collection of constraints.

  • A model for portfolio return and risk proxies, which, for CVaR optimization, is either the gross or net mean of portfolio returns and the conditional value-at-risk of portfolio returns.

  • A probability level that specifies the probability that a loss is less than or equal to the value-at-risk. Typical values are 0.9 and 0.95, which indicate 10% and 5% loss probabilities.

% valid portfolio optimization problem
[lb, ub, isbounded]=estimateBounds(p);
pwgt = estimateFrontier(p);

属性简写对照表如下
table

References

PortfolioCVaR

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Quant0xff

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值