这个例子展示了如何计算单边信贷价值(估值)调整(CVA)的银行持有一个投资组合的香草利率掉期与几个交易对手。CVA是由于交易对手违约而导致的场外合约或合约组合的预期损失。特定交易对手的CVA定义为每一时刻的预期风险折现乘以该交易对手在该时刻违约的概率,所有这些乘以1减去回收率。CVA公式为:
在哪里R.
是恢复,dis
贴现的预期风险敞口T., 和PD
违约概率分布。
预期风险敞口的计算首先是模拟给定合同或投资组合的许多未来风险因素情景。风险因素可以是利率,如本例所示,但会根据投资组合而异,包括外汇汇率、股票或商品价格,或任何会影响合约市场价值的因素。一旦模拟了足够多的情景,合约或投资组合就可以在每个情景的一系列未来日期进行定价。结果是一个由契约值组成的矩阵或“立方体”。
这些价格在考虑到银行可能存在的担保协议和净额协议(如在本例中,几份合同的价值可能相互抵消,从而降低它们的总风险)后转换为风险敞口。
每种方案的合同值都会折扣以计算折扣曝光。然后可以通过每个模拟日期的折扣曝光的简单平均值来计算折扣预期的预期曝光。
最后,对手Party默认概率通常来自信用违约交换(CDS)市场报价,并且可以根据上述公式计算对方的CVA。假设交易对手默认与其曝光(没有错误的风险)无关。
此示例演示了Vanilla兴趣率掉的组合,其目标是计算特定对手的CVA。
掉期投资组合的价值有时接近于零T.=0.
.每个交换都与交易对手相关联,可能或可能不包括在网状协议中。
从电子表格读取交换swapfile =“cva-swap-portfolio.xls”;掉期= readtable (swapFile,“表”那“交换组合”);swaps.legtype = [swaps.legtype〜swaps.legtype];swaps.legrate = [swaps.legraphereceiving swaps.legratepaying];swaps.legreset =那些(尺寸(掉掉,1),1);numswaps =尺寸(掉掉,1);
有关交换参数的更多信息抵押品
和Nettingid.
, 看creditexposures.
.有关交换参数的更多信息主要
那到期
那legtype.
那封尾
那RoplyFloatingrate.
那期
, 和LegReset
, 看swapbyzero.
.
解决= datenum (的14 - 12月- 2007);tenor = [3 6 12 5 * 12 7 * 12 10 * 12 20 * 12 30 * 12]';Zerorates = [0.033 0.034 0.035 0.042 0.044 0.048 0.047''Zerodates = Dememnth(定居,男高音);复合= 2;基础= 0;ratespec = intenvset(startdate可以的, 定居,'enddates',Zerodates,...'费率'ZeroRates,“复合”,复合,“基础”、基础);图;情节(ZeroDates ZeroRates,'O-');Xlabel('日期');dateTick('keeplimits');ylabel('零利率');网格在;标题(“结算日的收益率曲线”);
您可以改变您生成的模拟利率方案的数量。此示例设置首先更频繁的模拟日期,然后将来更少地频繁。
%蒙特卡罗模拟次数numScenarios = 1000;%计算每月仿真日期,然后稍后每季度日期。模拟次数= DATEMNTH(定居,0:12);仿真= [模拟DAYNEMTH(模拟(ENDUSIONDATES(END),3:3:74)]';numdates = numel(仿真);
对于每个模拟日期,计算每个交换的先前浮动重置日期。
floatDates = cfdates(解决- 360,swaps.Maturity swaps.Period);互换。FloatingResetDates = zeros(numSwaps,numDates);为了i = numDates:-1:1 thisDate = simulationDates(i);floatDates(floatDates > thisDate) = 0;swaps.FloatingResetDates(:,我)= max (floatDates [], 2);结尾
模拟为合约估值的风险因素是零曲线。对于本例,您使用单因素赫尔-怀特模型对利率期限结构进行建模。这是一个短期利率模型,其定义为:
在哪里
:短期汇率在时间上发生微小变化后的变化,
:平均回归率
:短率的波动
:韦纳过程(标准的正常过程)
:Drive功能定义为:
:时间上的瞬时远期速率
:的偏导数 关于时间
一旦你模拟了短期利率的路径,在每个模拟日期使用公式生成一个完整的收益率曲线:
:时间零率 一段时间
:时间零优惠券的价格 这是一美元的时间
每种情况都包含通过时间前进的全职结构,在每个所选模拟日期中建模。
参考利用市场数据校准赫尔白模型有关Hull-White单因素模型校准的更多细节,请参见金融工具工具箱™用户指南中的示例。
α= 0.2;σ= 0.015;hw1 = HullWhite1F (RateSpec、ασ);
对于每个场景,使用赫尔-怀特单因素利率模型模拟每个估值日期的未来利率曲线。
%使用可重复的随机数发生器(改变种子生产%不同的随机场景)。prevrng = rng(0,'twister');dt = diff (yearfrac(解决simulationDates 1));nPeriods =元素个数(dt);场景= hw1.simTermStructs (nPeriods,...'ntrial',numscenarios,...'deltatime',dt);%恢复随机数生成器状态rng (prevRNG);通过每个已实现的利率计算贴现率% 设想。dfactors = 1 (numDates numScenarios);为了i = 2:Numdates Tenordates = DateMnth(模拟(I-1),男高音);RateAtNextSimdate = Interp1(TenOrdates,Squeeze(方案(I-1,:,:)),...simulationDates(我),“线性”那“extrap”);%计算D (t1, t2)Dfortors(i,:) = Zero2Disc(RateatNextSimdate,...repmat (simulationDates (i), 1 numScenarios), simulationDates(张),1,3);结尾Dfortors = Cumprod(DFortors,1);
为特定场景创建一个屈服曲线演进的表面曲线。
我= 20;图;surf(Tenor, simulationDates, scenario (:,:,i))轴紧dateTick('是'那'mmmyy');Xlabel('男高音(月)');ylabel(“观察日期”);Zlabel('费率');斧头= GCA;ax.view = [-49 32];标题(Sprintf(“情景%d收益率曲线演变”\n”,我));
对于每一种情形,掉期投资组合都在每个未来模拟日期定价。价格是用价格近似函数计算的,hswapapprox
.由于蒙特卡罗模拟的性能要求,在CVA应用程序中使用简化的近似函数对合同进行定价是很常见的。
由于模拟日期不对应于互换现金流日期(其中浮动利率被重置),估计最新的浮动利率与1年利率(所有互换的期限为1年)之间插值的最接近的模拟利率曲线。
然后,交换价格被聚合成一个值的“立方体”,其中包含每个场景的每个模拟日期的所有未来合同值。由于合同价格的结果是一个三维矩阵,其中每行代表仿真日期,每列是一个合同,以及每个“页面”一个不同的模拟场景。
%计算此方案的所有标记到市场值。用A.%近似函数在这里改善性能。值= hcomputeMTMValues (simulationDates互换,场景,男高音);
创建一个特定情景下所有掉期价格演变的图表。
我= 32;图;绘图(模拟,值(:,:,i));dateTick;ylabel('标志上市价格');标题(Sprintf('沿情景%d'的交换价格, 一世));
绘制模拟的每种场景的总产品组合值。随着每个场景在时间上向前移动时,合同的值取决于所建模的兴趣术语结构如何变化的方式向上或向下移动。随着互换更接近到期时,它们的值将开始接近零,因为所有剩余现金流量的总值将在每次现金流日期后减少。
%查看投资组合值随时间图;totalPortValues = squeeze(sum(values, 2));情节(simulationDates totalPortValues);标题('所有方案的总MTM投资组合价值');dateTick('X'那'mmmyy')ylabel(“投资组合价值(美元)”)包含('模拟日期')
特定合同的曝光(一世)时间T.为合约最高金额(6),0.
:
特定交易对手的曝光只是个人合同曝光的总和:
但是,在有净额协定的情况下,合同是合计在一起的,可以相互抵消。因此,净额协议中所有合同的总风险敞口为:
使用每个模拟日期计算整个投资组合的这些曝光以及每个仿真日期的每个交易对象creditexposures.
功能。
未呼吸的合同使用a表示南
在Nettingid.
向量。未入住合同的曝光等于合同的市场价值,如果它具有正值,否则为零。
纳税协议中包含的合同将其值汇总在一起,可以互相抵消。有关从标记到市场合同值计算曝光的更多详细信息,请参阅参考文献。
[曝光,expcpty] = Creditexposures(值,Swaps.counterPartyid,...“NettingID”, swaps.NettingID);
绘制我们模拟中每个场景的总投资组合曝光。类似于合同值的曲线,每个场景的曝光将作为次次成熟的零接近零。
%查看投资组合曝光随着时间的推移图;totalportexposure =挤压(总和(暴露,2));绘图(模拟逻辑,TotalPollepposure);标题(“所有情况下的投资组合敞口”);dateTick('X'那'mmmyy')ylabel(敞口(美元))包含('模拟日期')
在分析银行的潜在未来曝光到对方时,若干曝光概况很有用。在这里,您可以计算多个(非折扣)曝光配置文件,以及整个投资组合。
PFE.
(潜在的未来曝光):任何特定未来日期的曝光率的高百分位数(95%)(也称为峰曝光(PE))
MPFE.
(最大潜在的未来曝光):所有日期的最高PFE
EE.
:(预期曝光):每个日期的曝光分布的平均值(平均值)
epe.
(预期的正曝光):预期暴露的加权平均随时间
eveee.
(有效预期曝光):随时最高预期曝光,T.,或以前的时间
effepe.
(有效预期正向暴露):有效预期暴露的加权平均值
有关进一步的定义,请参见参考文献中的巴塞尔协议II文件。
计算全部投资组合风险portexposures = sum(曝光,2);%计算每个交易对手和整个投资组合的风险敞口cpProfiles = exposureprofiles (simulationDates,曝光);portProfiles = exposureprofiles (simulationDates portExposures);
首先是整个投资组合,然后是一个特定的交易对手。
%可视化投资组合暴露概况图;绘图(模拟逻辑,portprofiles.pfe,...模拟逻辑,portprofiles.mpfe *那些(Numdates,1),...simulationDates portProfiles。情感表达,...simulationDates portProfiles。EPE *的(numDates, 1),...simulationDates portProfiles。EffEE,...模拟逻辑,portprofiles.effepe *那些(numdates,1));传奇({“PFE(95%)”那'max pfe'那“Exp曝光(EE)”那'time-avg ee(EPE)'那...'最大过去(effee)'那'time-avg effee(effepe)'}) datetick ('X'那'mmmyy')标题(的投资组合风险敞口概要”);ylabel(敞口(美元))包含('模拟日期')
可视化特定交易对手的暴露概况。
cpidx =查找(Expcpty == 5);图;绘图(模拟逻辑,CPProfiles(CPIDX).pfe,...模拟逻辑,cpprofiles(cpidx).mpfe * of(numdates,1),...模拟逻辑,cpprofiles(cpidx).ee,...模拟逻辑,cpprofiles(cpidx).epe * ope * ope * ope(numdates,1),...simulationDates cpProfiles (cpIdx)。EffEE,...simulationDates cpProfiles (cpIdx)。EffEPE *的(numDates, 1));传奇({“PFE(95%)”那'max pfe'那“Exp曝光(EE)”那'time-avg ee(EPE)'那...'最大过去(effee)'那'time-avg effee(effepe)'}) datetick ('X'那'mmmyy'那'keeplimits')标题(Sprintf(“交易对手%d敞口概况”cpIdx));ylabel(敞口(美元))包含('模拟日期')
使用每个模拟利率场景的贴现因子计算贴现预期风险敞口。给定场景中给定估值日期的贴现因子是从一个模拟日期到下一个模拟日期的增量贴现因子的乘积,以及该场景的利率路径。
%在每一种情况下,获得每个交易对手的贴现敞口discExp = 0(大小(曝光));为了i = 1:numscenarios iscexp(:,i)= bsxfun(@次,dfortors(:,i),曝光(:,:,i));结尾%折扣预期曝光discProfiles = exposureprofiles (simulationDates discExp,...'profilespec'那“EE”);
绘制总投资组合以及每个交易对手的贴现预期风险敞口。
%将每个交易对手汇总为矩阵的贴现eediscee = [discprofiles.ee];%投资组合折扣ee图;绘图(模拟,和(Discee,2))DateTick('X'那'mmmyy'那'keeplimits')标题(“投资组合预期风险折现”);ylabel(的贴现风险敞口(美元))包含('模拟日期')
交易对手折扣EE图;情节(simulationDates discEE) datetick ('X'那'mmmyy'那'keeplimits')标题('每个交易对手的折扣预计曝光');ylabel(的贴现风险敞口(美元))包含('模拟日期')
给定交易对手的违约概率是由该交易对手CDS的当前市场价差所暗示的。使用的函数cdsbootstrap
在每个模拟日期生成默认默认概率。
为每一交易对手进口CDS市场信息cd = readtable (swapFile,“表”那'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 = table2array (CDS(:, 2:结束));(RateSpec ZeroData =。E.ND.D.一种T.E.S.R.一种T.E.Spec.Rates];%校准每个交易对手的默认概率defprobb = 0 (length(simulationDates), size(CDSSpreads,2)); / /模拟日期为了i = 1:size(defprobb,2) probData = cdsbootstrap(ZeroData, [CDSDates CDSSpreads(:,i)],...定居,'probdates', simulationDates);DefProb(:,我)= probData (:, 2);结尾%每个交易对手的累积违约概率图。图;情节(simulationDates DefProb)标题('每个交易对象的默认概率曲线');Xlabel('日期');网格在;ylabel(“累积概率”)DateTick('X'那'mmmyy')ylabel('默认概率')包含('模拟日期')
信贷价值(估值)调整(CVA)公式为:
在哪里R.
是恢复,dis
贴现的预期风险敞口T., 和PD
违约概率分布。这假设敞口独立于违约(没有错误方向的风险),并且还假设敞口是使用风险中性概率获得的。
在估值日期上用有限和近似积分如下:
在哪里t_1
是今天的日期,t_2
、……T.
_N未来估值日期。
假设CDS信息对应的是具有指数的交易对手cpIdx
.计算出的CVA是我们对交易对手的信贷敞口的当前市场价值cpIdx
.对于此示例,将恢复速率设置为40%。
恢复= 0.4;CVA =(1恢复)*和(Discee(2:结束,:)。* Diff(DefProb));为了i = 1:numel(CVA) fprintf('交易对手的CVA %d = $%.2f\n',我,cva(i));结尾
CVA为交易对手1 = 2229.38个CVA用于抵消2 = 2498.71 CVA用于抵消3 =交易对手的$ 918.96 CVA 4 = $ 5521.83 CVA用于交易对手5 = $ 5883.77
图;酒吧(CVA);标题(“每个交易对手的CVA”);Xlabel(“对手”);ylabel('cva $');网格在;
Pykhtin, Michael和Steven Zhu,交易对手信用风险建模指南, GARP, 2007年7 / 8月,第37期,第16-22页。
Pykhtin, Michael和Dan Rosen,在交易水平和CVA上为交易对手风险定价,2010年。
新巴塞尔协议:https://www.bis.org/publ/bbs128.pdf.256页。
cdsbootstrap
|cdsprice.
|CDSRPV01
|CDSSPREAD.