P V = C 1 ( 1 + y ) 1 + C 2 ( 1 + y ) 2 + . . . + C n ( 1 + y ) n PV = \frac{{{C_1}}}{{{{(1 + y)}^1}}} + \frac{{{C_2}}}{{{{(1 + y)}^2}}} + ... + \frac{{{C_n}}}{{{{(1 + y)}^n}}} PV=(1+y)1C1+(1+y)2C2+...+(1+y)nCn
一年以内,到期一次还本付息:
y = F V − P V P V ÷ D 365 y = \frac{{FV - PV}}{{PV}} \div \frac{D}{{365}} y=PVFV−PV÷365D
复利,剩余流通期限一年以上:
例:一个债券在1.5年后到期,每半年计算一次利息但不付利息,年利率5%,在到期时一并偿还本息,面值100元。现在全价是97元。到期收益率为7.09%。
y = ( 100 + 5 % × 100 × 1.5 97 ) 2 3 − 1 = 7.09 % y = {(\frac{{100 + 5\% \times 100 \times 1.5}}{{97}})^{\frac{2}{3}}} - 1 = 7.09\% y=(97100+5%×100×1.5)32−1=7.09%
2) 即期利率
P t = M t ( 1 + S t ) t {P_t} = \frac{{{M_t}}}{{{{(1 + {S_t})}^t}}} Pt=(1+St)tMt
M t M_t Mt为到期价值
3) 远期利率
远期利率可以根据收益率曲线上的即期利率求得。
*FRA(远期利率协议)
买方:名义借款人,若市场利率上升,则按照协定的利率支付利息,避免了利率风险
卖方:名义贷款人,若市场利率下跌则受益。
#债券定价计算器
def bond_price_calculate(r,f,n,i):
h=float(0)
for k in range(n):
h+=r*f*(1+i)**(-k-1)
p=h+f*(1+i)**(-n)
return round(p,2)
r=float(input("请输入票面利率:"))
f=float(input("请输入债券面值:"))
n=int(input("请输入债券到期前的年数:"))
i=float(input("请输入市场利率:"))
print("债券价格为{}".format(bond_price_calculate(r,f,n,i)))
*折价、溢价、平价:可以转化为票面利率与市场利率的大小比较
#折价发行、平价发行、溢价发行可视化
import matplotlib.pyplot as plt
ls1,ls2,ls3=[],[],[]
i1=float(0.03)
i2=float(0.06)
i3=float(0.09)
f=float(1000)
n=int(1)
r=float(0.06)
n=[k*n for k in range(1,50)]
n=n[::-1]
for ns in n:
ls1.append(bond_price_calculate(r,f,ns,i1))
plt.plot(n[::-1],ls1)
for ns in n:
ls2.append(bond_price_calculate(r,f,ns,i2))
plt.plot(n[::-1],ls2,'o')
for ns in n:
ls3.append(bond_price_calculate(r,f,ns,i3))
plt.plot(n[::-1],ls3,'c')
print(ls1,ls2,ls3)
(2)一次还本付息
P = F + C × T ( 1 + i ) T P = \frac{{F + C \times T}}{{{{(1 + i)}^T}}} P=(1+i)TF+C×T
(3)零息债券
P = F ( 1 + i ) T P = \frac{F}{{{{(1 + i)}^T}}} P=(1+i)TF
5)债券定价5个原理
(1)债券市场价格与到期收益率呈反比关系
(2)当债券收益率不变时,即债券息票率与收益率之间的差额固定不变时,债券的到期时间与债券价格波动呈正比。
(3)随着到期时间临近,债券价格波动幅度减少,并且以递增的速度减少;否则,反之。
(4)对于期限既定的债券,由于收益率下降导致的债券价格上升幅度大于同等幅度收益率上升导致下降的幅度。
可以用泰勒公式结合久期凸性理解:
f ( x ) = f ( x 0 ) − ∣ D ∣ Δ y + 1 2 C ( Δ y ) 2 f(x) = f({x_0}) - |D|\Delta y + \frac{1}{2}C{(\Delta y)^2} f(x)=f(x0)−∣D∣Δy+21C(Δy)2
(5)对于给定的收益率变动幅度,债券息票率与债券价格波动幅度成反比。
6)影响债券价格的因素
(1)经济周期(一般同向波动)
(2)市场利率
(3)票面利率
(4)通货膨胀利率
(5)投资者投资预期
(6)债券供求关系
(7)发行者资信情况
(8)待偿期
7)久期
(1)麦考利久期
M a c D = ∑ i = 1 n t i C F i ⋅ e − y ⋅ t i V MacD = \sum\limits_{i = 1}^n {{t_i}\frac{{C{F_i} \cdot {e^{ - y \cdot {t_i}}}}}{V}} MacD=i=1∑ntiVCFi⋅e−y⋅ti
#久期计算器
import math
def bond_duration(r,f,n,i):
a=[]
d=[]
dj=0
g=0
#价格
for k in range(n-1):
g+=r*f*math.e**(-(k+1)*i)
al=(f+r*f)*math.e**(-n*i)
p=g+al
#现金流
for m in range(n-1):
h=r*f*math.e**(-(m+1)*i)
a.append(h)
a.append(al)
for j in range(len(a)):
wi=a[j]*(j+1)
dj+=wi/p
d.append(dj)
return d
r=float(input("请输入票面利率:"))
f=float(input("请输入债券面值:"))
n=int(input("请输入债券到期前的年数:"))
i=float(input("请输入到期收益率:"))
ls=bond_duration(r,f,n,i)
print("债券久期为{}".format(ls[-1]))
久期可以被看做回收成本的平均时间
(2)修正久期
M o d D ( y ) ≡ 1 v ⋅ ∂ V ∂ y = − ∂ ln ( V ) ∂ y ModD(y) \equiv \frac{1}{v} \cdot \frac{{\partial V}}{{\partial y}} = - \frac{{\partial \ln (V)}}{{\partial y}} ModD(y)≡v1⋅∂y∂V=−∂y∂ln(V)
M o d D = M a c D ( 1 + y / k ) ModD = \frac{{MacD}}{{(1 + y/k)}} ModD=(1+y/k)MacD
8)凸性(债券价格对收益率的二阶偏导数)
(1)特点
i.凸性随久期的增加而增加
ii.对于没有隐含期权的债券来说,凸性总是大于0的,即利率下降,债券价格加速度上升
iii.含有隐含期权的债券凸性一般为负,利率下降买入期权可能性增加,价格随着利率下降减速度上升。
例:加入一个债券的面值为100元,价格为107元,久期是5,凸性是30,如果收益率上升100个基点,那么债券价格的变化是:
变化率:-5*(1%)+0.530(1%)^(2)=-4.85%
债券应当变为:107*(1-0.0485)=101.81
9)基点价值(Basis Point Value,BPV)
应计收益率每变化一个基点(0.01个百分点)时引起的债券价格的绝对变动额。收益率下降,基点价值上升。