matlab使用Copula仿真优化市场风险数据VaR分析

科技   科技   2025-01-06 15:20   浙江  


全文链接:http://tecdat.cn/?p=4305


此示例探讨了如何使用多因素copula模型模拟相关的交易对手违约点击文末“阅读原文”获取完整代码数据


使用Copula建模相关默认值


相关视频

鉴于违约风险敞口,违约概率和违约信息损失,估计交易对手组合的潜在损失。一个Copula对象用于每个债务人的信用与潜在变量模型。潜在变量由一系列加权潜在信用因子以及每个债务人的特殊信用因子组成。潜在变量根据其默认概率映射到每个方案的债务人的默认或非默认状态。Copula对象支持投资组合风险度量,交易对手级别的风险贡献以及模拟收敛信息。

这个例子还探讨了风险度量对用于模拟的copula(高斯copula与t copula)类型的敏感性。

加载和检查投资组合数据

投资组合包含100个交易对手及其相关的信用风险敞口(默认值EAD),违约概率(PD)和默认损失(LGD)。使用Copula对象,您可以模拟某个固定时间段(例如,一年)的默认值和损失。

在此示例中,每个交易对手都使用一组权重映射到两个基础信用因子。Weights2F变量是一个,其中每一行包含一个单一的对方的权重。前两列是两个信用因子的权重,最后一列是每个交易对手的特殊权重。此示例中还提供了两个基本因子的相关矩阵。

加载投资组合信息

使用c投资组合信息和因子相关性初始化对象。

rng('default');
cc = creditDefaultCopula(EAD,PD,LGD,Weights2F,'FactorCorrelation',FactorCorr2F);

cc.VaRLevel = 0.99;
DISP(CC)
creditDefaultCopula with properties:

FactorCorrelation:\[2x2 double\]
VaRLevel0.9900
PortfolioLosses:\[\]
cc.Portfolio(15,:)
ans =
5x5
ID EAD PD LGD重量
__ ______ _________ ____ ____________________
1 21.627 0.0050092 0.35 0.35 0 0.65
2 3.2595 0.060185 0.35 0 0.45 0.55
3 20.391 0.11015 0.55 0.15 0 0.85
4 3.7534 0.0020125 0.35 0.25 0 0.75
5 5.7193 0.060185 0.35 0.35 0 0.65

模拟模型和绘制潜在损失

模拟多因素模型。默认情况下,使用高斯copula。此函数在内部将已实现的潜在变量映射到默认状态,并计算相应的损失。

cc = simulate(cc,1e5);
DISP(CC)
creditDefaultCopula with properties:

FactorCorrelation:\[2x2 double\]
VaRLevel0.9900
PortfolioLosses:\[1x100000双\]

函数返回总投资组合损失分布的风险度量和置信区间。VaRLevel报告风险值(VaR)和条件风险值(CVaR)。

\[pr,pr_ci\] = portfolioRisk(cc);
fprintf('投资组合风险指标:\ n');
DISP(PR)
fprintf('\ n \ n风险衡量的保密间隔:\ n');
DISP(pr_
ci)
投资组合风险衡量
EL Std VaR CVaR
______ ______ ______ ______
24.774 23.693 101.57 120.22
风险衡量的置信区间:
EL Std VaR CVaR
________________ ________________ ________________ _______________
24.627 24.92 23.589 23.797 100.65 102.82 119.1 121.35

看看投资组合损失的分布。预期损失(EL),VaR和CVaR标记为垂直线。由VaR和EL之间的差异给出的经济资本显示为EL和VaR之间的阴影区域。

plotline = @(x,color)plot(\[xx\],ylim,'LineWidth'2'Color'color);

cvarline = plotline(pr.CVaR,'m');
%遮蔽预期损失和经济资本的领域。
plotband = @(x,color)patch(\[x fliplr(x)\],\[0 0 repmat(max(ylim),1,2)\],...
color'FaceAlpha'0.15);
elband = plotband(\[0 pr.EL\],'blue');
ulband = plotband(\[pr.EL pr.VaR\],'red');


点击标题查阅往期内容


【视频】Copula算法原理和R语言股市收益率相依性可视化分析


左右滑动查看更多


01

02

03

04



找出交易对手的集中风险

使用riskContribution函数查找投资组合中的集中度风险。riskContribution返回每个交易对手对投资组合EL和CVaR的贡献。这些附加值贡献与相应的总投资组合风险度量相加。

rc = riskContribution(cc);
报告EL和CVaR的风险贡献百分比。
RC(15,:)
ans =
5x5表
ID EL Std VaR CVaR
__ _________ __________ _______ _________
1 0.038604 0.02495 0.10482 0.12868
2 0.067068 0.036472 0.17378 0.24527
3 1.2527 0.62684 2.0384 2.3103
4 0.0023253 0.00073407 0 0.0026274
5 0.11766 0.042185 0.27028 0.26223

通过CVaR贡献找出风险最大的交易对手

\[rc_sorted,idx\] = sortrows(rc,'CVaR','descend');
rc_sorted(15,:)
ans =
5x5表
ID EL Std VaR CVaR
__ _______ ______ ______ ______
89 2.261 2.2158 8.1095 9.2257
22 1.5672 1.8293 6.275 7.4602
66 0.85227 1.4063 6.3827 7.2691
16 1.6236 1.5011 5.8949 7.1083

绘制交易对手风险和CVaR贡献。具有最高CVaR贡献的交易对手以红色和橙色绘制。

pointSize = 50;
colorVector = rc_sorted.CVaR;
scatter(cc.Portfolio(idx,:)。EAD,rc_sorted.CVaR,...
pointSize,colorVector,'filled'
colormap('jet'

用置信带研究模拟收敛性

研究模拟的收敛性。默认情况下,会报告CVaR置信区间,但使用可选RiskMeasure参数支持所有风险度量的置信区间。

cb = confidenceBands(cc);
%置信带存储在表格中。
CB(15,:)
ans =
5x4表
NumScenarios降低CVaR上限
____________ ______ ______ ______
1000 113.92 124.76 135.59
2000 111.02 117.74 124.45
3000 113.58 118.97 124.36
4000 113.06 117.44 121.81
5000 114.38 118.99 123.6

绘制置信区间查看估算收敛的速度。

获得特定置信区间。

width =(cb.Upper - cb.Lower)./ cb.CVaR;

plot(cb.NumScenarios,width * 100'LineWidth'2;

%找到置信带在
%CVaR的1%(双侧)范围内的点。
thresh = 0.02;
scenIdx = find(width <= thresh,1'first';
scenValue = cb.NumScenarios(scenIdx);
widthValue = width(scenIdx);

比较Gaussian和t Copulas的尾部风险

用t copula会增加交易对手之间的默认关联。这导致投资组合损失的尾部分布更加严重,并且导致更高的潜在损失。

cc_t = simulate(cc,1e5,'Copula','t');
pr\_
t = portfolioRisk(cc\_t);
了解投资组合风险如何随着t copula而变化。

高斯copula的投资组合风险:
EL Std VaR CVaR
______ ______ ______ ______
24.774 23.693 101.57 120.22
t copula的投资组合风险(dof = 5):
EL Std VaR CVaR
______ ______ ______ ______
24.924 38.982 186.33 251.38

比较每种模型的尾部损失。

使用具有五个自由度的t copula,尾部风险测量值VaR和CVaR显着更高。t copulas 的默认相关性较高,因此有多个交易对手默认的情况更多。自由度的数量起着重要作用。对于非常高的自由度,使用t copula的结果与使用高斯copula的结果相似。自由度非常低,因此结果显示出显着的差异。此外,这些结果强调极端损失的可能性对于copula的选择和自由度的数量非常敏感。





本文中分析的数据、代码分享到会员群,扫描下面二维码即可加群! 



点击文末“阅读原文”

获取全文完整资料


本文选自《matlab使用Copula仿真优化市场风险数据VaR分析》。




点击标题查阅往期内容

R语言ARMA GARCH COPULA模型拟合股票收益率时间序列和模拟可视化
ARMA-GARCH-COPULA模型和金融时间序列案例
时间序列分析:ARIMA GARCH模型分析股票价格数据
GJR-GARCH和GARCH波动率预测普尔指数时间序列和Mincer Zarnowitz回归、DM检验、JB检验
【视频】时间序列分析:ARIMA-ARCH / GARCH模型分析股票价格
时间序列GARCH模型分析股市波动率
PYTHON用GARCH、离散随机波动率模型DSV模拟估计股票收益时间序列与蒙特卡洛可视化
极值理论 EVT、POT超阈值、GARCH 模型分析股票指数VaR、条件CVaR:多元化投资组合预测风险测度分析
Garch波动率预测的区制转移交易策略
金融时间序列模型ARIMA 和GARCH 在股票市场预测应用
时间序列分析模型:ARIMA-ARCH / GARCH模型分析股票价格
R语言风险价值:ARIMA,GARCH,Delta-normal法滚动估计VaR(Value at Risk)和回测分析股票数据
R语言GARCH建模常用软件包比较、拟合标准普尔SP 500指数波动率时间序列和预测可视化
Python金融时间序列模型ARIMA 和GARCH 在股票市场预测应用
MATLAB用GARCH模型对股票市场收益率时间序列波动的拟合与预测
R语言GARCH-DCC模型和DCC(MVT)建模估计
Python 用ARIMA、GARCH模型预测分析股票市场收益率时间序列
R语言中的时间序列分析模型:ARIMA-ARCH / GARCH模型分析股票价格
R语言ARIMA-GARCH波动率模型预测股票市场苹果公司日收益率时间序列
Python使用GARCH,EGARCH,GJR-GARCH模型和蒙特卡洛模拟进行股价预测
R语言时间序列GARCH模型分析股市波动率
R语言ARMA-EGARCH模型、集成预测算法对SPX实际波动率进行预测
matlab实现MCMC的马尔可夫转换ARMA - GARCH模型估计
Python使用GARCH,EGARCH,GJR-GARCH模型和蒙特卡洛模拟进行股价预测
使用R语言对S&P500股票指数进行ARIMA + GARCH交易策略
R语言用多元ARMA,GARCH ,EWMA, ETS,随机波动率SV模型对金融时间序列数据建模
R语言股票市场指数:ARMA-GARCH模型和对数收益率数据探索性分析
R语言多元Copula GARCH 模型时间序列预测
R语言使用多元AR-GARCH模型衡量市场风险
R语言中的时间序列分析模型:ARIMA-ARCH / GARCH模型分析股票价格
R语言用Garch模型和回归模型对股票价格分析
GARCH(1,1),MA以及历史模拟法的VaR比较
matlab估计arma garch 条件均值和方差模型
R语言POT超阈值模型和极值理论EVT分析


拓端数据部落
拓端(tecdat.cn)创立于2016年,提供专业的数据分析与挖掘服务,致力于充分挖掘数据价值。
 最新文章