比较CVaR最优投资组合与均值-方差投资组合以及其他模型,包括全局最小方差(GMVP)和市场投资组合(Matlab代码实现)

 💥💥💞💞欢迎来到本博客❤️❤️💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

📋📋📋本文目录如下:🎁🎁🎁

目录

 ⛳️赠与读者

💥1 概述

📚2 运行结果

🎉3 参考文献

🌈4 Matlab代码、数据、文章


 ⛳️赠与读者

👨‍💻做科研,涉及到一个深在的思想系统,需要科研者逻辑缜密,踏实认真,但是不能只是努力,很多时候借力比努力更重要,然后还要有仰望星空的创新点和启发点。当哲学课上老师问你什么是科学,什么是电的时候,不要觉得这些问题搞笑。哲学是科学之母,哲学就是追究终极问题,寻找那些不言自明只有小孩子会问的但是你却回答不出来的问题。建议读者按目录次序逐一浏览,免得骤然跌入幽暗的迷宫找不到来时的路,它不足为你揭示全部问题的答案,但若能让人胸中升起一朵朵疑云,也未尝不会酿成晚霞斑斓的别一番景致,万一它居然给你带来了一场精神世界的苦雨,那就借机洗刷一下原来存放在那儿的“躺平”上的尘埃吧。

     或许,雨过云收,神驰的天地更清朗.......🔎🔎🔎

💥1 概述

摘要:我们的研究基于 Pavlo Krokhmal、Jonas Palmquist 和 Stanislav Uryasev 的论文《Portfolio optimization with conditional Value-at-Risk objective and constraints》。因此,我们遵循了他们关于优化条件风险价值(CVaR)以在回报和对大幅下跌(或潜在损失)的保护之间取得最佳投资组合的建议。在 Krokhmal 等人的论文中,他们将自己的模型,即在 CVaR 约束下最大化回报,与均值方差最优投资组合进行了对比。在此基础上,我们通过创建另外两个模型,包括 CVaR 和论文中的一个模型,来扩展研究。然后,我们将它们与几种最优投资组合进行对比,如全局最小方差投资组合、市场投资组合和均值方差投资组合。最后,我们的案例研究是 Fama 和 French 的 17 个行业投资组合。

自马科维茨(1952年)以来,投资组合优化理论已经有了很大的改进。大量论文提出了新的方法和改进,这些基本方法仍然被广泛使用。事实上,马科维茨提出的经典优化理论使用了一些限制性假设。在实际世界的实施中,这些假设往往明显被违反,比如收益的iid特性和正态性。此外,投资者可能不仅关心平均值和方差,还可能偏好不对称度量。经典优化方法没有考虑到收益尾部分布中的大事件。如今,人们可能对构建考虑这些极端风险的投资组合非常感兴趣。

本报告旨在展示在下行风险度量约束下的投资组合优化实施。我们使用条件风险价值构建了一个围绕该度量的投资组合。在这项研究中,我们对收益分布不做任何假设,因此不假设正态性。

至于我们的研究,我们将首先介绍用于执行模型的选择数据。然后,我们将转向使用的不同模型参数和约束。接下来,与论文中一样,我们将比较CVaR最优投资组合与均值-方差投资组合以及其他模型。其中包括全局最小方差(GMVP)和市场投资组合。之后,我们将对我们的三个CVaR模型进行敏感性分析。

风险值(VaR)是在一定时间内可能达到的最大损失。这个阈值由百分位数α表示。例如,95%的VaR是超过这个阈值的损失的上限估计,其发生概率为5%。在金融行业中,VaR是用来衡量金融衰退风险的最常用基准。

条件风险价值(CVaR)也是一种极端负收益的度量。事实上,它是严格高于VaR的损失的加权平均值。与VaR相反,CVaR在保险业广泛使用(CVaR在金融界并非标准)。事实上,CVaR代表的是预期的损失值。因此,CVaR和VaR都是潜在下行收益的度量。

然后,Krokhmal等人的论文方法是将CVaR约束应用于投资组合优化过程。然后,他们选择将结果与标准的马科维茨均值-方差(MV)最优投资组合进行比较。比较它们的一个挑战是,均值-方差投资组合包含负值和正值,而CVaR最优投资组合通过总结不同时间范围的结果来重新塑造其分布,以使所有可能的值都在可能收益值的负区域内。

总的来说,在论文中,他们发现均值-方差最优投资组合的有效前沿比CVaR最优投资组合更高,从这个意义上说,前者表现更好。不过,值得一提的是,在更低的显著性水平下,MV最优投资组合与CVaR最优投资组合之间的差距会扩大。

📚2 运行结果

部分代码:

%% Performance
%cumulative performance
modeltest.cumperf=cumprod(1+modeltest.perf);
modeltest3.cumperf=cumprod(1+modeltest3.perf);
modeltest5.cumperf=cumprod(1+modeltest5.perf);
GMVP.cumperf=cumprod(1+GMVP.perf);
MV.cumperf=cumprod(1+MV.perf);

%Comparative table
Names_ESportfolio={'Model 1','Model 2','Model 3'};
ReturnAllPortfolio=[modeltest.perf,modeltest3.perf,modeltest5.perf];
SumStat_ESp=Portfoliostatistics(ReturnAllPortfolio,RF,Const.conflvl95,Names_ESportfolio);
SumStat_ESp=table([SumStat_ESp;TOmodel]);

Names_M1={'Model 1','Market','GMVP','MV'};
ReturnModel1=[modeltest.perf,marketportfolio.perf,GMVP.perf,MV.perf];
SumStat_M1=Portfoliostatistics(ReturnModel1,RF,Const.conflvl95,Names_M1);
TOM1=[Model1TO,'-',GMVP.TO,MV.TO];

Names_M2={'Model 2','Market','GMVP','MV'};
ReturnModel2=[modeltest3.perf,marketportfolio.perf,GMVP.perf,MV.perf];
SumStat_M2=Portfoliostatistics(ReturnModel2,RF,Const.conflvl95,Names_M2);
TOM2=[Model2TO,'-',GMVP.TO,MV.TO];

Names_M3={'Model 3','Market','GMVP','MV'};
ReturnModel3=[modeltest5.perf,marketportfolio.perf,GMVP.perf,MV.perf];
SumStat_M3=Portfoliostatistics(ReturnModel3,RF,Const.conflvl95,Names_M3);
TOM3=[Model3TO,'-',GMVP.TO,MV.TO];
%% Weights
modeltest.avgweight=mean(modeltest.W(1:N),1); % take the mean over time for each asset class of the weight
modeltest3.avgweight=mean(modeltest3.W(1:N),1);
modeltest5.avgweight=mean(modeltest5.W(1:N),1);

p1=figure; %show it as the a pie graph
pie(modeltest.avgweight)
legend(names,'Location','northwest')
title('Average weights Model 1 at 95%')
saveas(p1,'results/Average weights Model 1 at 95','png');

p2=figure;
pie(modeltest3.avgweight)
legend(names,'Location','northwest')
title('Average weights Model 2 at 95%')
saveas(p2,'results/Average weights Model 2 at 95','png');

p3=figure;
pie(modeltest5.avgweight)
legend(names,'Location','northwest')
title('Average weights Model 3 at 95%')
saveas(p3,'results/Average weights Model 3 at 95','png');

%% graph
%we represent the evolution of the weight over time for each portfolio
%max return st ES<9.5%
f1=figure;
area(date((1+rollingwindow):end),modeltest.W(1:N,:)','FaceColor','flat');
ylim([0,1])
legend(names)
title('max return st ES<9.5%')
saveas(f1,'results/max return st ES','png');

%max SR st ES<9.5%
f2=figure;
area(date((1+rollingwindow):end),modeltest3.W(1:N,:)','FaceColor','flat');
ylim([0,1])
legend(names)
title('max SR st ES<9.5%')
saveas(f2,'results/max SR st ES','png');

%max expected return -ES
f3=figure;
area(date((1+rollingwindow):end),modeltest5.W(1:N,:)','FaceColor','flat');
ylim([0,1])
legend(names)
title('max expected return -ES')
saveas(f3,'results/max expected return -ES','png');

%MV
f4=figure;
area(date((1+rollingwindow):end),MV.W','FaceColor','flat');
ylim([0,1])
legend(names)
title('MV')
saveas(f4,'results/MV','png');

%GMVP
f5=figure;
area(date((1+rollingwindow):end),GMVP.W','FaceColor','flat');
ylim([0,1])
legend(names)
title('GMVP')
saveas(f5,'results/GMVP','png');

%Expected Shortfall illustration
f6=figure;
Varhist=quantile(modeltest.perf,0.05);
mask=modeltest.perf < Varhist;
histogram(modeltest.perf(mask),25,'FaceColor','r')
hold on
histogram(modeltest.perf(~mask),35,'FaceColor','b')
xline(Varhist,'--r');
xline(mean(modeltest.perf(modeltest.perf<Varhist)),'--r');
title('Expected Shortfall illustration')

🎉3 参考文献

文章中一些内容引自网络,会注明出处或引用为参考文献,难免有未尽之处,如有不妥,请随时联系删除。

🌈4 Matlab代码、数据、文章

  • 20
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MATLAB均值-CVaR投资组合模型代码是用于计算投资组合的平均收益和条件风险价值(Conditional Value at Risk)的方法。下面是一个基本的MATLAB代码示例: ``` % 设置收益率数据 returns = [0.05, 0.10, 0.08, -0.05, 0.04]; weights = [0.2, 0.3, 0.1, 0.15, 0.25]; % 计算投资组合的平均收益 portfolio_returns = returns * weights'; % 计算投资组合的协方差矩阵 covariance_matrix = cov(returns); % 按照投资组合权重计算投资组合方差和标准差 portfolio_variance = weights * covariance_matrix * weights'; portfolio_std = sqrt(portfolio_variance); % 设置风险水平(如95%) alpha = 0.95; % 使用快速排序找到按收益率排序的所有可能组合的条件风险价值(CVaR) sorted_returns = sort(returns); index = floor((1-alpha) * length(sorted_returns)); cvar = mean(sorted_returns(1:index)); % 输出结果 disp(['投资组合平均收益:', num2str(portfolio_returns)]); disp(['投资组合标准差:', num2str(portfolio_std)]); disp(['投资组合条件风险价值(CVaR):', num2str(cvar)]); ``` 以上代码示例中,首先设置了收益率数据和投资组合权重。然后利用公式计算了投资组合的平均收益、协方差矩阵、方差和标准差。接下来,根据设定的风险水平,使用快速排序找到了按照收益率排序的所有可能组合的条件风险价值(CVaR)。最后,输出了计算结果。 这是一个基本的MATLAB均值-CVaR投资组合模型代码示例,可以根据具体需求和数据进行进一步的修改和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值