文章目录
- 莫顿模型介绍(Merton)
- 假设
- 表达式
- 信用利差及违约距离
- 代码实现
莫顿模型介绍(Merton)
莫顿模型是评估信用风险的一大重要理论。莫顿模型认为,债券是否违约这一行为归根到底是一种选择。当违约的好处>不违约的好处,就会选择违约;当违约的好处<不违约的好处,就会选择不违约。
假设
- 金融市场是完美市场,无税收、摩擦和破产成本。
- 公司仅依靠一种零息债券和股票进行融资。
- 违约只发生在到期日
- 无风险利率恒定
- 标的资产价格服从对数正态分布
表达式
当债券到期时,公司必须支付债券的本息。如果不能支付,那么公司破产,股票无价值,公司资产归债券持有人所有。如果到期后公司足额支付债券的本息,剩余部分属于股票持有人。
假设一家公司到期后需要支付100million给债券持有人。
如果到期时公司价值为120million,债券持有人会收到100million,股票持有人会收到20million。
如果到期时公司价值为80million,债券持有人会收到80million,股票持有人会收到0.
因此只有当公司价值>债券面值时,股票持有人才会获得收益。这种收益结构类似我们学过的一种金融工具——期权。
S T = M a x ( V T − F , 0 ) S_{T}=Max(V_{T}-F,0) ST=Max(VT−F,0)
期权的定价又可以使用BSM模型计算,所以股票价值:
E = V N ( d 1 ) − K e − r t N ( d 2 ) E=VN(d_{1})-Ke^{-rt}N(d_{2}) E=VN(d1)−Ke−rtN(d2)
债券价值:
B = V N ( − d 1 ) + K e − r t N ( d 2 ) B = VN(-d_{1})+Ke^{-rt}N(d_{2}) B=VN(−d1)+Ke−rtN(d2)
其中V表示公司价值,K表示债券面值, σ \sigma σ表示股权价值波动率。
d 1 = I n ( V K e − r T ) σ T + σ T 2 d_{1}=\frac{In(\frac{V}{Ke^{-rT}})}{\sigma \sqrt{T}}+\frac{\sigma\sqrt{T}}{2} d1=σTIn(Ke−rTV)+2σT
d 2 = I n ( V K e − r T ) σ T − σ T 2 d_{2}=\frac{In(\frac{V}{Ke^{-rT}})}{\sigma \sqrt{T}}-\frac{\sigma\sqrt{T}}{2} d2=σTIn(Ke−rTV)−2σT
信用利差及违约距离
根据前面的公式可以反向推导信用利差及违约距离的计算公式。
C r e d i t S p r e a d = − 1 T I n ( K V − r ) Credit Spread = -\frac{1}{T}In(\frac{K}{V}-r) CreditSpread=−T1In(VK−r)
d 2 = I n ( V ) − I n ( K ) + ( μ − σ 2 2 ) T σ T ≈ I n V − I n K σ d_{2}=\frac{In(V)-In(K)+(\mu-\frac{\sigma^2}{2})T}{\sigma\sqrt{T}}\approx\frac{InV-InK}{\sigma} d2=σTIn(V)−In(K)+(μ−2σ2)T≈σInV−InK
代码实现
举个例子:假设公司A的资本结构包括两部分:面值为100million的零息债券以及股票。当前公司A的资产的市场价格为130million,每年的波动率为30%。公司B的资本结构包括两部分:面值为250million的零息债券以及股票。当前公司B的资产的市场价格为400million,每年的波动率为25%。假设一年到期,哪家公司更容易违约?
import numpy as np
import math
from scipy import statsdef MertonCal(FirmValue, Debt, sigma, r, t):d1 = math.log(FirmValue/(Debt * math.exp(-r*t)), math.e)/(sigma * np.sqrt(t)) + 0.5 * sigma * np.sqrt(t)d2 = math.log(FirmValue/(Debt * math.exp(-r*t)), math.e)/(sigma * np.sqrt(t)) - 0.5 * sigma * np.sqrt(t)N_d1 = stats.norm.cdf(d1)N_d2 = stats.norm.cdf(d2)E = FirmValue * N_d1 - Debt * np.exp(-r * t) * N_d2B = FirmValue * (1 - N_d1) + Debt * np.exp(-r * t) * N_d2CreditSpread = -1/t * math.log(Debt/FirmValue - r, math.e)DtD = (math.log(FirmValue, math.e) - math.log(Debt, math.e))/sigmareturn E, B, CreditSpread, DtDV_a = 130
V_b = 400
D_a = 100
D_b = 250
sigma_a = 0.3
sigma_b = 0.25
r = 0.01
t = 1E_a, B_a, CreditSpread_a, DtD_a = MertonCal(V_a, D_a, sigma_a, r, t)
E_b, B_b, CreditSpread_b, DtD_b = MertonCal(V_b, D_b, sigma_b, r, t)
print("A公司的违约距离为%.4f"%(DtD_a))
print("B公司的违约距离为%.4f"%(DtD_b))
由此说明,B的违约距离更大,B更不容易违约。
由于莫顿模型在假设条件上过于苛刻,实际运用过程中很少应用。实证中常用KMV模型计算违约距离。
KMV模型在Merton模型基础上进行改进,Merton模型假设只有一种债券,但KMV假设有长期债券和短期债券,并赋予不同的权重。除此之外,还会根据历史上真是发生的违约数据进行校准。KMV模型在2002年被穆迪Moody’s收购,具体的模型算法并未披露出来。