信用风险管理习题¶

Ex01¶

假设某3年期企业债券每年支付7%的券息,每半年付息一次,收益率为5%(以每半年复利计)。所有期限的无风险债券的收益率均为4%(以每半年复利计)。假设违约事件可能每半年发生一次(刚好在债券每次付息之前),回收率为45%。请在以下假设下估计违约概率:

(a) 在每个可能违约的日期,无条件违约概率均相同;
(b) 在每个可能违约的日期之前无违约的条件下,发生违约条件概率均相同。

(a)¶

债券$T=3$年后到期,债券价格由下式确定: $$B=\sum_{t=1}^{2T-1}\frac{3.5}{(1+0.025)^t}+\frac{103.5}{(1+0.025)^{2T}}$$

In [64]:
import numpy as np
import numpy_financial as npf
In [65]:
B = npf.pv(0.025, 6, -3.5) + 100*(1.025)**(-6)
In [66]:
print('债券价格为:',B)
债券价格为: 105.5081253615798

假设在每个付息日发生违约的概率相等,即$p_t=p,\ \forall t=1,2,\dots,6$,若该债券在第$t=1,2,\dots,2T$期末发生违约。其信用敞口$CE_t$为:

$$ CE_t=\sum_{\tau=t}^{2T}\frac{c_\tau}{\left(1+\frac{y^*}{2}\right)^{\tau-t}}+\frac{F}{\left(1+\frac{y^*}{2}\right)^{2T-t}}=\sum_{\tau=t}^{6}\frac{3.5}{\left(1+0.025\right)^{\tau-t}}+\frac{100}{\left(1+0.025\right)^{6-t}} $$
In [67]:
ce=[]
for i in range(5):
    cet = 3.5 + npf.pv(0.025, 5-i, -3.5) + 100*(1.025)**(-(5-i))
    ce.append(cet)
ce.append(103.5)
In [68]:
print('CE_t为:',ce)
CE_t为: [108.14582849561931, 107.26197420800979, 106.35602356321003, 105.42742415229031, 104.47560975609757, 103.5]

根据风险中性定价原理,债券价格可表示为:

$$ B=p\sum_{t=1}^{2T}\left(\sum_{\tau=1}^{t-1}\frac{c_\tau}{\left(1+\frac{y}{2}\right)^\tau}+\frac{CE_tf_t}{\left(1+\frac{y}{2}\right)^t}\right)+(1-2Tp)\left[\sum_{t=1}^{2T}\frac{c_t}{\left(1+\frac{y}{2}\right)^t}+\frac{F}{\left(1+\frac{y}{2}\right)^{2T}}\right] $$

即

$$ B=p\sum_{t=1}^{6}\left(\sum_{\tau=1}^{t-1}\frac{3.5}{\left(1+0.02\right)^\tau}+\frac{CE_tf_t}{\left(1+0.02\right)^t}\right)+(1-6p)\left[\sum_{t=1}^{6}\frac{3.5}{\left(1+0.02\right)^t}+\frac{100}{\left(1+0.02\right)^{6}}\right] $$

令$v_t=\sum_{\tau=1}^{t-1}\frac{3.5}{\left(1+0.02\right)^\tau}+\frac{CE_tf_t}{\left(1+0.02\right)^t},\ \forall t=1,2,\dots,6$,

$v_0=\sum_{t=1}^{6}\frac{3.5}{\left(1+0.02\right)^t}+\frac{100}{\left(1+0.02\right)^{6}}$,

In [69]:
ft=.45
v = [ce[0]*ft*(1.02)**(-1)]
for i in range(1,6):
    interestsPaid = npf.pv(0.02, i, -3.5)
    vt = interestsPaid + ce[i]*ft*(1.02)**(-(i+1))
    v.append(vt)
v = [npf.pv(0.02, 6, -3.5) + 100*(1.02)**(-6)] + v
In [70]:
print('v_t为:', v)
v_t为: [108.4021463360356, 47.71139492453793, 49.82496000923146, 51.8952086711036, 53.92298106565003, 55.909100829699035, 57.854375405086614]

无条件违约概率$p$须满足以下等式:

$$ B=p\sum_{t=1}^6v_t+(1-6p)v_0 $$

所以,

$$ p=\frac{B-v_0}{\sum_{t=1}^6v_t-6v_0} $$

即

In [71]:
p = (B-v[0])/(sum(v[1:])-6*v[0])
In [72]:
print('在每个付息日发生违约的概率均为:', p)
在每个付息日发生违约的概率均为: 0.008683065198011151

(b)¶

在每个可能违约的日期之前无违约的条件下,发生违约条件概率均为$p$,则在每个付息日发生违约的概率$p_t$为:

$$p_t=(1-p)^{t-1}p$$

债券不违约的概率为:

$$1-\sum_{t=1}^{2T}p_t=(1-p)^{2T}$$

因此,可以通过下式计算债券价格:

$$ B=\sum_{t=1}^6p_tv_t+(1-\sum_{t=1}^6p_t)v_0=\sum_{t=1}^6(1-p)^{t-1}pv_t+(1-p)^6v_0 $$
In [73]:
from mpmath import nsum
from sympy import *
p=symbols('p')
expr=0
for t in range(1,7):
    expr+=(1-p)**(t-1)*p*v[t]
expr+=v[0]*(1-p)**6
probset=solveset(expr-B, p, domain=S.Reals)
problist=list(probset)
problist
Out[73]:
[0.00886917960088702, 2.02900113781868]
In [74]:
p = problist[0]
In [75]:
import numpy as np
for t in range(1,7):
    print('在第'+str(t)+'次付息日发生违约的概率为:', p*(1-p)**(t-1))
在第1次付息日发生违约的概率为: 0.00886917960088702
在第2次付息日发生违约的概率为: 0.00879051725409422
在第3次付息日发生违约的概率为: 0.00871255257778297
在第4次付息日发生违约的概率为: 0.00863527938418844
在第5次付息日发生违约的概率为: 0.00855869154042623
在第6次付息日发生违约的概率为: 0.00848278296800560

Ex02¶

请根据以下条件分析债券的违约概率和到期收益率:

(a) 无风险利率为每年4%,某信用债券的收益率为每年6%。假设若该债券违约,回收率为70%。请估计该债券一年内发生违约的概率为多少?
(b) 某风险分析师尝试估计一个BB级债券的收益率。如果无风险利率为每年3.5%,BB级债券的违约概率为7%,违约损失率(Loss given default)为70%。请估计该债券的到期收益率。 

(a)$r=r_f+\pi\times(1-f)$¶

$\pi=\frac{r-r_f}{1-f}=\frac{0.06-0.04}{1-0.7}$

In [76]:
print('该债券一年内发生违约的概率为:',(0.06-0.04)/(1-0.7))
该债券一年内发生违约的概率为: 0.06666666666666665

(b)¶

$r=r_f+\pi\times(1-f)=3.5\%+7\%\times70\%$

In [77]:
print('该债券的到期收益率为:',0.035+0.07*0.7)
该债券的到期收益率为: 0.084