主要内容

交易对手信用风险和CVA

这个例子展示了如何计算一家银行的单边信贷价值(估值)调整(CVA),该银行持有与几个对手方的香草利率掉期投资组合。CVA是指由于交易对手违约而导致的场外交易合约或合约组合的预期损失。特定交易对手的CVA定义为每一刻贴现预期风险敞口在所有时间点上的总和乘以交易对手在该时刻违约的概率,所有这些都乘以1减去回收率。CVA公式为:

C V 一个 1 - R 0 T d 年代 c E E t d P D t

在哪里R是复苏,discEE贴现预期暴露在时间t,PD默认概率分布。

预期风险敞口是通过首先模拟给定合同或投资组合的许多风险因素的未来情景来计算的。如本例所示,风险因素可以是利率,但根据投资组合的不同会有所不同,可能包括外汇汇率、股票或大宗商品价格,或任何会影响合约市场价值的因素。一旦模拟了足够多的场景,合同或投资组合就可以根据每个场景的一系列未来日期进行定价。其结果是合约值的矩阵或“立方体”。

在考虑到银行可能已经达成的抵押品协议以及净额协议后,这些价格被转换为风险敞口,就像在这个例子中,几个合同的价值可能会相互抵消,从而降低他们的总风险敞口。

对每种情况的合约价值进行贴现,以计算贴现风险敞口。然后,贴现预期暴露可以通过每个模拟日期的贴现暴露的简单平均值来计算。

最后,交易对手违约概率通常来自信用违约互换(CDS)市场报价,交易对手的CVA可以根据上述公式计算。假设交易对手违约与风险敞口无关(没有错路风险)。

本例演示了一个普通利率掉期投资组合,其目标是计算特定交易对手的CVA。

读交换组合

掉期投资组合在当时的价值接近于零t0.每个掉期都与一个交易对手相关联,可能包括也可能不包括在净额协议中。

从电子表格读取互换swapFile =“cva-swap-portfolio.xls”;交换= readtable(交换文件,“表”“交换组合”);互换。LegType =[交换。]LegType~swaps.LegType]; swaps.LegRate = [swaps.LegRateReceiving swaps.LegRatePaying]; swaps.LegReset = ones(size(swaps,1),1); numSwaps = size(swaps,1);

的交换参数的详细信息CounterpartyID而且NettingID,请参阅creditexposures.的交换参数的详细信息主要成熟LegTypeLegRateLatestFloatingRate,LegReset,请参阅swapbyzero

从利率曲线创建RateSpec

set = 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(Settle,Tenor);复利= 2;基= 0;RateSpec = intenvset(startdate可以的解决,“EndDates”ZeroDates,...“利率”ZeroRates,“复合”复合,“基础”、基础);图;情节(ZeroDates ZeroRates,“啊——”);包含(“日期”);datetick (“keeplimits”);ylabel (“零率”);网格;标题(“结算日收益率曲线”);

图中包含一个轴对象。标题为“Yield Curve at Settle Date, xlabel Date, ylabel Zero rate”的axis对象包含一个类型为line的对象。

设置可变仿真参数

您可以改变所生成的模拟利率情景的数量。这个示例将模拟日期设置为一开始更频繁,然后在未来变得更不频繁。

%蒙特卡罗模拟次数numscenes = 1000;计算月度模拟日期,然后是季度日期。。simulationDates = datemnth(Settle,0:12);simulationDates = [simulationDates datemnth(simulationDates(end),3:3:74)]';numDates = nummel(模拟日期);

计算浮动复位日期

对于每个模拟日期,为每个交换计算以前的浮动重置日期。

floatDates = cfdates(settlement -360,swap . maturity,swap . period);互换。FloatingResetDates = zeros(numSwaps,numDates);thisDate = simulationDates(i);floatDates(floatDates > thisDate) = 0;swaps.FloatingResetDates(:,i) = max(floatDates,[],2);结束

建立Hull-White单因素模型

用来模拟合约价值的风险因素是零曲线。对于本例,您使用单因素Hull-White模型对利率期限结构建模。这是一个短期汇率模型,定义为:

d r θ t - 一个 r d t + σ d z

在哪里

  • d r :时间变化小后的短期汇率变化, d t

  • 一个 :平均回归率

  • σ :短期利率的波动率

  • d z :韦纳过程(标准正态过程)

  • θ t :漂移函数定义为:

θ t F t 0 t + 一个 F 0 t + σ 2 2 一个 1 - e - 2 一个 t

F 0 t :当前时刻的瞬时正向速率 t

F t 0 t :的偏导数 F 关于时间

模拟了短期利率的路径后,在每个模拟日期使用以下公式生成完整的收益率曲线:

R t T - 1 T - t ln 一个 t T + 1 T - t B t T r t

ln 一个 t T ln P 0 T P 0 t + B t T F 0 t - 1 4 一个 3. σ 2 e - 一个 T - e - 一个 t 2 e 2 一个 t - 1

B t T 1 - e - 一个 T - t 一个

R t T :零利率在时间 t 在一段时间内 T - t

P t T :零息债券的价格 t 每次支付一美元 T

每个场景都包含随着时间推移的完整期限结构,在我们选择的每个模拟日期建模。

请参阅利用市场数据校准船体-白色模型金融工具工具箱™用户指南中的示例,以获取赫尔-怀特单因素模型校准的更多详细信息。

Alpha = 0.2;σ = 0.015;hw1 = HullWhite1F(RateSpec,Alpha,Sigma);

模拟的场景

对于每种情况,使用赫尔-怀特单因素利率模型模拟每个估值日的未来利率曲线。

%使用可重复的随机数发生器(改变种子产生%不同的随机场景)。prerng = rng(0,“旋风”);dt = diff(yearfrac(Settle,simulationDates,1));nPeriods =数字(dt);场景= hw1.simTermStructs(nPeriods...“nTrials”numScenarios,...“deltaTime”, dt);恢复随机数生成器状态rng (prevRNG);通过每个实现利率计算贴现因子%的场景。dfactors = ones(numDates, numscenes);i = 2:numDates tenorDates = datemnth(simulationDates(i-1),Tenor);rateAtNextSimDate = interp1(tenorDates,squeeze(scenario (i-1,:,:)),...simulationDates(我),“线性”“extrap”);%计算D(t1,t2)dfactors(i,:) = zero2disc(rateAtNextSimDate,...repmat (simulationDates (i), 1 numScenarios), simulationDates(张),1,3);结束Dfactors = cumprod(Dfactors,1);

巡检场景

为特定场景创建收益率曲线演变的曲面图。

I = 20;图;surf(Tenor, simulationDates, scenario (:,:,i))轴datetick (“y”“mmmyy”);包含(的男高音(个月));ylabel (“观察日期”);zlabel (“利率”);Ax = gca;斧子。6ew = [-49 32]; title(sprintf('情景%d收益率曲线演变\n',我));

图中包含一个轴对象。带有xlabel Tenor (Months), ylabel Observation Date的坐标轴对象包含一个类型为surface的对象。

计算市价互换价格

对于每种情况,掉期投资组合在每个未来模拟日期定价。价格是用价格近似函数计算的,hswapapprox.在CVA应用程序中,由于这些蒙特卡罗模拟的性能要求,在定价合同时使用简化的近似函数是很常见的。

由于模拟日期与掉期现金流日期(浮动利率重置的日期)不相对应,因此估计最新的浮动利率与1年期利率(所有掉期周期为1年)插值在最近的模拟利率曲线之间。

然后,掉期价格被聚合成一个“立方体”的价值,其中包含每个场景的每个模拟日期的所有未来合同价值。得到的合同价格立方体是一个三维矩阵,其中每行代表一个模拟日期,每列代表一个合同,每个“页”代表不同的模拟场景。

计算此场景的所有市值。。使用一个%逼近函数在这里提高性能。values = hcomputeMTMValues(交换,模拟日期,场景,Tenor);

检查场景价格

创建一个特定场景下所有掉期价格演变的图表。

I = 32;图;情节(simulationDates值(:,:,i));datetick;ylabel (“盯市价格”);标题(sprintf ('情况%d的掉期价格',我));

图中包含一个轴对象。沿着场景32的标题为Swap prices的axes对象,ylabel Mark-To-Market Price包含30个类型为line的对象。

可视化模拟投资组合价值

绘制模拟每个场景的总投资组合价值。随着每一种情况的推移,合约的价值会根据模型利率期限结构的变化而上升或下降。随着掉期接近到期,其价值将开始趋近于零,因为所有剩余现金流的总价值将在每个现金流日后减少。

查看投资组合随时间变化的价值图;totalPortValues = squeeze(sum(values, 2));情节(simulationDates totalPortValues);标题(“所有场景的总MTM投资组合价值”);datetick (“x”“mmmyy”) ylabel (“投资组合价值(美元)”)包含(“模拟日期”

图中包含一个轴对象。标题为Total MTM Portfolio Value for All scenes, xlabel Simulation Dates, ylabel Portfolio Value($)的axes对象包含1000个类型为line的对象。

计算交易对手的曝光

披露某一特定合约()在时间t是合同价值的最大值(6),0

E t 马克斯 V t 0

特定交易对手的风险敞口只是单个合约风险的总和:

E c p t E t 马克斯 V t 0

然而,在存在净额协议的情况下,合同是聚合在一起的,可以相互抵消。因此,净额协议中所有合同的总风险敞口为:

E n 一个 t 马克斯 V t 0

计算整个投资组合以及每个交易对手在每个模拟日期的风险敞口creditexposures函数。

未绑定的契约使用NettingID向量。未净值合约的风险敞口如果为正,则等于该合约的市场价值,否则为零。

包含在净额协议中的合同将其价值聚合在一起,并可以相互抵消。有关从市价合同价值计算风险敞口的详细信息,请参阅参考文献。

[exposure, expcpty] =信用风险敞口(价值,互换。CounterpartyID,...“NettingID”, swaps.NettingID);

绘制模拟中每个场景的总投资组合敞口。与合约价值图相似,随着掉期到期,每种情况下的风险敞口将趋近于零。

%查看投资组合随时间的敞口图;totalPortExposure = squeeze(sum(exposure,2));情节(simulationDates totalPortExposure);标题(“所有情况下的投资组合敞口”);datetick (“x”“mmmyy”) ylabel (敞口(美元))包含(“模拟日期”

图中包含一个轴对象。标题为Portfolio Exposure for All scenes, xlabel Simulation Dates, ylabel Exposure($)的axes对象包含1000个类型为line的对象。

曝光资料

在分析银行未来对交易对手的潜在风险时,几种风险概况是有用的。在这里,你可以计算每个交易对手的几个(非贴现)风险敞口概况,以及整个投资组合的风险敞口概况。

  • pfizer(未来潜在暴露):在未来任何特定日期暴露分布的高百分位(95%)(也称为峰值暴露(PE))

  • MPFE(最大潜在未来暴露):所有日期的最大PFE

  • EE:(预期暴露量):每个日期暴露量分布的平均值

  • EPE(预期正面敞口):预期敞口随时间的加权平均值

  • EffEE(有效预期暴露):任何时候的最大预期暴露,t,或之前的时间

  • EffEPE(有效预期正面敞口):有效预期敞口的加权平均值

有关进一步的定义,请参见参考文献中的巴塞尔协议II文件。

计算整个投资组合的风险敞口portexposure = sum(exposure,2);计算每个交易对手和整个投资组合的风险概况。cpProfiles = exposureprofiles(simulationDates,exposure);portProfiles = exposureprofiles(simulationDates, portexposure);

可视化风险敞口概况,首先是整个投资组合,然后是特定的交易对手。

可视化投资组合暴露概况图;情节(simulationDates portProfiles。工业的...simulationDates portProfiles。MPFE * ones(numDates,1),...simulationDates portProfiles。情感表达,...simulationDates portProfiles。EPE * ones(numDates,1),...simulationDates portProfiles。EffEE,...simulationDates portProfiles。EffEPE * ones(numDates,1));传奇({“PFE(95%)”“马克斯pfizer”Exp Exposure (EE)“时间平均EE (EPE)”...'Max past EE (EffEE)'“时间平均EffEE (EffEPE)”}) datetick (“x”“mmmyy”)标题(“投资组合风险概况”);ylabel (敞口(美元))包含(“模拟日期”

图中包含一个轴对象。标题为Portfolio Exposure Profiles, xlabel Simulation Dates, ylabel Exposure($)的axes对象包含6个类型为line的对象。这些对象代表PFE(95%),最大PFE, Exp曝光(EE),时间平均EE (EPE),最大过去EE (EffEE),时间平均EffEE (EffEPE)。

可视化特定交易对手的敞口概况。

cpIdx = find(expcpty == 5);图;情节(simulationDates cpProfiles (cpIdx)。工业的...simulationDates cpProfiles (cpIdx)。MPFE * ones(numDates,1),...simulationDates cpProfiles (cpIdx)。情感表达,...simulationDates cpProfiles (cpIdx)。EPE * ones(numDates,1),...simulationDates cpProfiles (cpIdx)。EffEE,...simulationDates cpProfiles (cpIdx)。EffEPE * ones(numDates,1));传奇({“PFE(95%)”“马克斯pfizer”Exp Exposure (EE)“时间平均EE (EPE)”...'Max past EE (EffEE)'“时间平均EffEE (EffEPE)”}) datetick (“x”“mmmyy”“keeplimits”)标题(sprintf (“交易对手%d敞口概况”cpIdx));ylabel (敞口(美元))包含(“模拟日期”

图中包含一个轴对象。标题为Counterparty 5 Exposure Profiles, xlabel Simulation Dates, ylabel Exposure($)的axes对象包含6个类型为line的对象。这些对象代表PFE(95%),最大PFE, Exp曝光(EE),时间平均EE (EPE),最大过去EE (EffEE),时间平均EffEE (EffEPE)。

贴现风险敞口

使用每个模拟利率情景的贴现因子计算贴现后的预期风险敞口。给定场景中给定估值日期的折现因子是从一个模拟日期到下一个模拟日期的增量折现因子的乘积,以及该场景的利率路径。

%获得每个交易对手在每种情况下的贴现风险敞口diskexp = 0(大小(曝光));i = 1: numScenarios discExp(:,:我)= bsxfun (@times, dfactors(:,我),曝光(:,:我));结束折现预期风险discProfiles =暴露profiles(simulationDates,discExp,...“ProfileSpec”“EE”);

绘制总体投资组合以及每个交易对手的预期风险折现图。

将每个交易对手的贴现EE汇总到一个矩阵中discEE = [discProfiles.EE];投资组合贴现EE %图;情节(simulationDates sum (discEE, 2)) datetick (“x”“mmmyy”“keeplimits”)标题(“投资组合的预期风险折现”);ylabel (“贴现风险(美元)”)包含(“模拟日期”

图中包含一个轴对象。axis对象包含一个类型为line的对象,其标题为贴现预期曝光,xlabel模拟日期,ylabel贴现曝光($)。

%交易对手方贴现EE图;情节(simulationDates discEE) datetick (“x”“mmmyy”“keeplimits”)标题(“每个交易对手的预期风险折现”);ylabel (“贴现风险(美元)”)包含(“模拟日期”

图中包含一个轴对象。axis对象的标题为每个对手方的贴现预期曝光,xlabel模拟日期,ylabel贴现曝光($),包含5个类型为line的对象。

每个交易对手违约曲线的概率校准

给定交易对手的违约概率由交易对手CDS的当前市场价差暗示。使用函数cdsbootstrap生成每个模拟日期的累计违约概率。

为每个交易对手导入CDS市场信息CDS =可读的(swapFile,“表”“CDS利差”);disp (CDS);
日期cp1 cp2 cp3 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:end));ZeroData = [RateSpec.]EndD一个te年代R一个teSpec.Rates];校准每个交易对手的违约概率。DefProb = 0(长度(simulationDates),大小(CDSSpreads,2));i = 1:size(DefProb,2) probData = cdbootstrap (ZeroData, [CDSDates CDSSpreads(:,i)],...解决,“probDates”, simulationDates);DefProb(:,i) = probData(:,2);结束每个交易对手的累计违约概率图。图;情节(simulationDates DefProb)标题(“每个交易对手的违约概率曲线”);包含(“日期”);网格;ylabel (“累积概率”) datetick (“x”“mmmyy”) ylabel (“违约概率”)包含(“模拟日期”

图中包含一个轴对象。axis对象的标题为每个对手方的违约概率曲线,xlabel模拟日期,ylabel违约概率,包含5个类型为line的对象。

CVA的计算

信用价值调整(CVA)公式为:

C V 一个 1 - R 0 T d 年代 c E E t d P D t

在哪里R是复苏,discEE贴现预期暴露在时间t,PD默认概率分布。这假设风险敞口独立于违约(没有错路风险),并且还假设风险敞口是使用风险中性概率获得的。

在估值日期上用有限和近似积分为:

C V 一个 一个 p p r o x 1 - R 2 n d 年代 c E E t P D t - P D t - 1

在哪里t_1是今天,t_2、……t_n未来估值日期。

假设CDS信息对应于有索引的交易对手cpIdx.计算出的CVA是我们对交易对手的信用敞口的当前市场价值cpIdx.在本例中,将恢复速率设置为40%。

恢复= 0.4;CVA = (1-Recovery) * sum(discEE(2:end,:) .* diff(DefProb));i = 1:数值(CVA) fprintf('交易对手%d = $%.2f\n',我,脑血管意外(i));结束
交易对手1的CVA = 2229.93美元交易对手2的CVA = 2499.08美元交易对手3的CVA = 918.51美元交易对手4的CVA = 5529.66美元交易对手5的CVA = 5888.04美元
图;酒吧(CVA);标题(“每个交易对手的CVA”);包含(“对手”);ylabel (“CVA的美元”);网格

图中包含一个轴对象。每个交易对手的标题为CVA的axes对象xlabel counterparty, ylabel CVA $包含一个类型为bar的对象。

参考文献

  1. Pykhtin, Michael和Steven Zhu,交易对手信用风险建模指南, GARP, 2007年7 / 8月,第37期,第16-22页。

  2. Pykhtin, Michael和Dan Rosen,交易层面的交易对手风险定价与CVA, 2010年。

  3. 新巴塞尔协议:https://www.bis.org/publ/bcbs128.pdf256页。

另请参阅

|||

相关的例子

更多关于