这个例子展示了如何计算单边信贷价值(估值)调整(CVA)的银行持有一个投资组合的香草利率掉期与几个交易对手。CVA是由于交易对手违约而导致的场外合约或合约组合的预期损失。特定交易对手的CVA定义为每一时刻的预期风险折现乘以该交易对手在该时刻违约的概率,所有这些乘以1减去回收率。CVA公式为:
在哪里R
经济复苏,discEE
贴现的预期风险敞口t,PD
违约概率分布。
通过首先模拟给定合同或投资组合的许多未来风险因素情景来计算预期风险敞口。风险因素可以是利率,如本例所示,但根据投资组合的不同而不同,可以包括外汇利率、股票或商品价格,或任何会影响合同市场价值的因素。每年已经模拟了足够多的场景,合同或投资组合可以在每个场景的一系列未来日期上定价。结果是合同价值的矩阵或“立方体”。
这些价格在考虑到银行可能存在的担保协议和净额协议(如在本例中,几份合同的价值可能相互抵消,从而降低它们的总风险)后转换为风险敞口。
对每个情景的合约值进行折现以计算折现的风险敞口。然后,可以通过每个模拟日期的贴现敞口的简单平均值来计算贴现预期敞口。
最后,交易对手违约概率一般由信用违约互换(CDS)市场报价得出,交易对手的CVA可根据上述公式计算。假设交易对手违约独立于其风险敞口(没有错误风险)。
这个例子演示了一个香草利率掉期的投资组合,目标是计算特定交易对手的CVA。
掉期投资组合的价值有时接近于零t=0
.每次掉期都与一个交易对手有关,可能包含在净额协议中,也可能不包含在净额协议中。
从电子表格读取交换swapFile =“cva-swap-portfolio.xls”;交换= readtable(swapfile,“表”,“交换组合”);互换。LegType =[互换。LegType~swaps.LegType]; swaps.LegRate = [swaps.LegRateReceiving swaps.LegRatePaying]; swaps.LegReset = ones(size(swaps,1),1); numSwaps = size(swaps,1);
的交换参数的更多信息CounterpartyID
和NettingID
,请参阅creditexposures
.的交换参数的更多信息主要
,成熟
,LegType
,LegRate
,LatestFloatingRate
,期
,腿复位
,请参阅swapbyzero
.
解决= datenum (的14 - 12月- 2007);期限= [3 6 12 5*12 7*12 10*12 20*12 30*12]';ZeroRates = [0.033 0.034 0.035 0.040 0.042 0.044 0.048 0.0475]';男高音ZeroDates = datemnth(解决);复合= 2;基础= 0;RateSpec = intenvset (startdate可以的解决,“EndDates”ZeroDates,...“利率”ZeroRates,“复合”复合,“基础”,基础);图形绘图(零日期、零利率、,“啊——”);包含(“日期”);datetick(“keeplimits”);伊莱贝尔(“零率”);网格在…上;标题(“结算日的收益率曲线”);
您可以改变生成的模拟利率场景的数量。本示例首先将模拟日期设置为更频繁的日期,然后在将来变得更不频繁。
%蒙特卡罗模拟次数numScenarios = 1000;%计算每月的模拟日期,然后再计算季度的日期。0:12 simulationDates = datemnth(解决);simulationDates = [simulationDates datemnth(simulationDates(end),3:3:74)]';numDates =元素个数(simulationDates);
对于每个模拟日期,计算每个交换之前的浮动重置日期。
floatDates = cfdates(解决- 360,swaps.Maturity swaps.Period);互换。FloatingResetDates = zeros(numSwaps,numDates);为i = numdates:-1:1 thisdate =仿真程序(i);Floatdates(Floatdates> thisdate)= 0;swaps.floatingresetdates(:,i)= max(floatdates,[],2);结束
模拟为合约估值的风险因素是零曲线。对于本例,您使用单因素赫尔-怀特模型对利率期限结构进行建模。这是一个短期利率模型,其定义为:
哪里
:在时间上发生微小变化后,短期利率发生变化,
:平均回归率
:短期利率的波动性
:韦纳过程(标准的正常过程)
:漂移函数定义为:
:某一时刻的瞬时转发速率
:的偏导数 关于时间
模拟短期利率路径后,使用以下公式在每个模拟日期生成完整收益率曲线:
:零利率在时间 一段时间
:零息债券在同一时期的价格 每次一美元
每个场景都包含了整个期限结构,并在我们选择的每个模拟日期进行建模。
指的是利用市场数据校准赫尔白模型金融工具工具箱中的示例™ 有关船体白色单因素模型校准的更多详细信息,请参阅用户指南。
α= 0.2;σ= 0.015;hw1 = HullWhite1F (RateSpec、ασ);
对于每个场景,使用Hull-White单因子兴趣率模型模拟每个估值日期的未来利率曲线。
%使用可重复随机数生成器(改变种子以产生%不同的随机场景)。prevRNG = rng (0,“旋风”); dt=差异(年分数(结算、模拟日期,1));n周期=努美尔(dt);场景=hw1.simTermStructs(n周期,...“nTrials”numScenarios,...“deltaTime”, dt);%恢复随机数生成器状态rng (prevRNG);%通过每个实际利率计算贴现系数%的场景。数据因素=一(numDates,numCenarios);为i = 2:numDates tenorDates = datemnth(simulationDates(i-1),Tenor);rateAtNextSimDate = interp1 (tenorDates挤压(场景(张,,,:)),...simulationDates(我),“线性”,“extrap”);%计算D (t1, t2)dfactors(我)= zero2disc (rateAtNextSimDate,...repmat(模拟日期(i),1,numScenarios),模拟日期(i-1),-1,3);结束dfactors = cumprod (dfactors, 1);
创建一个特定场景的收益率曲线演变的表面图。
i=20;图;surf(期限、模拟日期、场景(:,:,i))轴紧datetick (“y”,“mmmyy”);包含(的男高音(个月));伊莱贝尔(“观察日期”);zlabel (“利率”);甘氨胆酸ax =;斧子。6ew = [-49 32]; title(sprintf(“情景%d收益率曲线演变”\n”,i));
对于每个情景,掉期组合在未来的每个模拟日期定价。价格使用价格近似函数计算,hswapapprox
.由于这些蒙特卡罗模拟的性能要求,在定价合同时,在CVA应用中使用简化的近似函数。
由于模拟日期与掉期现金流日期(浮动利率重置时)不一致,因此在最近的模拟利率曲线之间插入1年期利率(所有掉期的周期均为1年),以估计最新的浮动利率。
然后将掉期价格聚合成一个值的“立方体”,其中包含每种情景的每个模拟日期的所有未来合约值。合同价格的立方体是一个三维矩阵,其中每一行代表一个模拟日期,每一列代表一个合同,每一“页”代表一个不同的模拟场景。
%计算此场景的所有按市价计算的值。使用一个%近似函数在这里改善性能。值= hcomputeMTMValues (simulationDates互换,场景,男高音);
创建一个特定情景下所有掉期价格演变的图表。
我= 32;图;情节(simulationDates值(:,:,i));datetick;ylabel (“盯市价格”); 头衔(斯普林特)(“按照情景%d互换价格”,我));
绘制模拟每个场景的总投资组合价值。随着每个情景的推移,合约的价值会根据模型利率期限结构的变化而上下波动。当掉期接近到期时,其价值将开始趋近于零,因为所有剩余现金流的总价值将在每个现金流日后减少。
%随时间查看投资组合价值图;totalPortValues=压缩(和(值,2));绘图(模拟日期,totalPortValues);标题(“所有场景的MTM投资组合总价值”);datetick(“x”,“mmmyy”) ylabel (“投资组合价值(美元)”)xlabel(“模拟日期”)
个别合约的曝光(我)在时间t为合约最高金额(6),0
:
而特定交易对手的风险敞口只是单个合同风险敞口的总和:
但是,在有净额协定的情况下,合同是合计在一起的,可以相互抵消。因此,净额协议中所有合同的总风险敞口为:
计算整个投资组合以及每个交易对手在每个模拟日期的风险敞口creditexposures
函数。
未联网合同用a表示南
在NettingID
向量。未净合约的风险敞口,如果为正值,则等于该合约的市场价值,否则为零。
包括在净值协议中的合同的价值加在一起,可以相互抵消。有关按市价计算风险敞口的更多细节,请参阅参考资料。
[exposure, expcpty] =信用风险(价值,掉期。CounterpartyID,...'nettingid',掉期。净额结算);
在我们的模拟中绘制每个场景的总投资组合风险。与合约价值图相似,随着互换到期,每种情况下的风险敞口将接近于零。
%随着时间的推移查看投资组合的风险敞口图;totalPortExposure =挤压(sum(敞口,2));情节(simulationDates totalPortExposure);标题(“所有情况下的投资组合敞口”);datetick(“x”,“mmmyy”) ylabel (敞口(美元))xlabel(“模拟日期”)
在分析银行对交易对手的潜在未来风险敞口时,有几种风险敞口是有用的。在这里,你可以计算每个交易对手的几个(非贴现)风险敞口,以及整个投资组合。
pfizer
(未来潜在暴露量):在未来某一特定日期暴露量分布的高百分位数(95%)(也称为峰值暴露量(PE))
MPFE
(最大潜在未来暴露):所有日期的最大PFE
EE
:(预期曝光率):每个日期曝光率分布的平均值
EPE
(预期正照射量):预期照射量随时间的加权平均值
EffEE
(有效预期暴露量):任何时候的最大预期暴露量,t,或以前的时间
EffEPE
(有效预期的积极曝光):有效预期暴露的加权平均值
有关更多定义,请参见参考资料中的巴塞尔协议II文件。
%计算整个投资组合风险敞口portExposures =总和(曝光,2);%计算每个交易对手和整个投资组合的风险敞口cpProfiles=曝光配置文件(模拟日期,曝光);端口配置文件=曝光配置文件(模拟日期,端口曝光);
可视化风险敞口概况,首先针对整个投资组合,然后针对特定交易对手。
%可视化投资组合暴露概况图;情节(simulationDates portProfiles。工业的...simulationDates portProfiles。MPFE *的(numDates, 1),...模拟日期,portProfiles.EE,...模拟日期,portProfiles.EPE*个(numDates,1),...模拟日期,portProfiles.EffEE,...simulationDates portProfiles。EffEPE *的(numDates, 1));传奇({“PFE(95%)”,“马克斯pfizer”,‘经验暴露(EE)’,“Time-Avg EE (EPE)”,...'Max past EE (EffEE)',“Time-Avg EffEE (EffEPE) '}) datetick (“x”,“mmmyy”)标题(的投资组合风险敞口概要”);伊莱贝尔(敞口(美元))xlabel(“模拟日期”)
可视化特定交易对手的暴露概况。
cpIdx = find(expcpty == 5);图;情节(simulationDates cpProfiles (cpIdx)。工业的...simulationDates cpProfiles (cpIdx)。MPFE *的(numDates, 1),...simulationDates cpProfiles (cpIdx)。情感表达,...simulationDates cpProfiles (cpIdx)。EPE *的(numDates, 1),...simulationDates cpProfiles (cpIdx)。EffEE,...模拟日期,cpProfiles(cpIdx).EffEPE*one(numDates,1));图例({“PFE(95%)”,“马克斯pfizer”,‘经验暴露(EE)’,“Time-Avg EE (EPE)”,...'Max past EE (EffEE)',“Time-Avg EffEE (EffEPE) '}) datetick (“x”,“mmmyy”,“keeplimits”)标题(sprintf (“交易对手%d敞口概况”cpIdx));ylabel (敞口(美元))xlabel(“模拟日期”)
使用来自每个模拟利率场景的折扣因子计算折扣预期曝光。给定方案中给定估值日期的折扣因素是从一个模拟日期到下一个模拟日期的增量折扣因子的产品以及该方案的利率路径。
每个场景,%按对方获得折扣曝光discExp = 0(大小(曝光));为i = 1: numScenarios discExp(:,:我)= bsxfun (@times, dfactors(:,我),曝光(:,:我));结束预期风险折现率discProfiles=曝光配置文件(模拟日期、discExp、,...“ProfileSpec”,“EE”);
绘制总投资组合以及每个交易对手的贴现预期风险敞口。
将每个交易对手的折扣EE汇总成一个矩阵discEE = [discProfiles.EE];投资组合折现EE图;情节(simulationDates sum (discEE, 2)) datetick (“x”,“mmmyy”,“keeplimits”)标题(“投资组合的贴现预期敞口”);伊莱贝尔(“贴现风险敞口($)”)xlabel(“模拟日期”)
%交易对手贴现EE图;绘图(模拟日期,discEE)日期勾选(“x”,“mmmyy”,“keeplimits”)标题(“每个交易对手的预期风险折现”);伊莱贝尔(“贴现风险敞口($)”)xlabel(“模拟日期”)
给定交易对手的违约概率由交易对手CDS的当前市场利差暗示。使用该函数cdsbootstrap
以生成每个模拟日期的累积违约概率。
%进口CDS市场信息为每个交易对手CDS=可读(交换文件,“表”,“CDS利差”);disp (CDS);
Date cp1 cp2 cp4 cp5 _____________ ____________ ___ {'3/20/2008'} 140 85 115 170 140 {'3/20/2009'} 185 120 150 205 175 {'3/20/2010'} 215 170 195 245 210 {'3/20/2011'} 275 215 240 285 265 {'3/20/2012'} 340 255 290 320 310
CDSDates=datenum(CDS.Date);CDSSpreads=表2阵列(CDS(:,2:end));ZeroData=[RateSpec.EndDates RateSpec.Rates];校准每个交易对手的违约概率DefProb=零(长度(模拟日期),大小(CDSSpreads,2));为i=1:size(DefProb,2)probData=cdsbootstrap(ZeroData,[CDSDates-CDSSpreads(:,i)],...解决,“probDates”, simulationDates);DefProb(:,我)= probData (:, 2);结束每个交易对手的违约概率的%曲线曲线。图;情节(simulationDates DefProb)标题(“每个交易对手的违约概率曲线”);包含(“日期”);网格在…上;ylabel (“累积概率”) datetick (“x”,“mmmyy”) ylabel (违约概率的)xlabel(“模拟日期”)
信贷价值(估值)调整(CVA)公式为:
在哪里R
经济复苏,discEE
贴现的预期风险敞口t,PD
违约概率分布。该分布假设风险敞口独立于违约(无错误方向风险),并假设风险敞口是使用风险中性概率获得的。
在估值日期上用有限和近似积分如下:
哪里t_1
是今天的日期,t_2
, ...,t
_n未来估值日期。
假设CDS信息对应于具有索引的对手cpIdx
计算得出的CVA是我们对交易对手的信用风险敞口的当前市场价值cpIdx
.对于本例,将恢复速率设置为40%。
复苏= 0.4;CVA = (1-Recovery) * sum(discEE(2:end,:) .* diff(DefProb)); / /恢复为i = 1:numel(CVA) fprintf('交易对手的CVA %d = $%.2f\n',我,脑血管意外(i));结束
交易对手1的CVA = $2229.38,交易对手2的CVA = $2498.71,交易对手3的CVA = $918.96,交易对手4的CVA = $5521.83,交易对手5的CVA = $5883.77
图;酒吧(CVA);标题(“每个交易对手的CVA”);包含(“对手”);伊莱贝尔(“CVA的美元”);网格在…上;
Pykhtin, Michael和Steven Zhu,交易对手信用风险建模指南,GARP,2007年7月/8月,第37期,第16-22页。
Pykhtin,Michael和Dan Rosen,在交易水平和CVA上为交易对手风险定价, 2010年。
新巴塞尔协议:https://www.bis.org/publ/bcbs128.pdf第256页。
cdsbootstrap
|cdsprice
|cdsspread
|cdsrpv01