远期利率是由当前零息利率所隐含的对于将来某一时间区间的利率,确定了零息利率曲线之后就可以求得所有的远期利率。T1至T2之间的远期利率RF可表示为RF=(R2T2-R1T1)/(T2-T1)。假设一年期至五年期的连续复利零息利率为2.5%,2.8%,3.2%,3.7%,4.5%,计算第2、3、4、5年的远期利率:
import numpy as np
import pandas as pd
def f(R2,T2,R1,T1):
return (R2*T2-R1*T1)/(T2-T1)
r=np.array([0.025,0.028,0.032,0.037,0.045])
t=np.array(range(1,6))
for i in range(len(r)-1):
print('第{}年的远期利率为{:.2%}'.format(i+2,f(r[i+1],t[i+1],r[i],t[i])))
第2年的远期利率为3.10%
第3年的远期利率为4.00%
第4年的远期利率为5.20%
第5年的远期利率为7.70%
远期利率协议的现金流分析
远期利率协议(FRA)是指交易双方约定在未来某日交换协议期间内一定现金流(结算金)的合约。其中,远期利率协议的买入方(多头,规避利率上升风险)支付按固定利率 k 计算的固定利息,卖出方(空头,规避利率下降风险)支付以参考利率 f 计算的浮动利息。目前主要的参考利率之一是3个月期Shibor利率(上海银行间拆放利率)。
如果约定的k>f,则多头要支付空头的金额等于固定利率与参考利率的利差乘以本金,反之亦然。假设k,f分别代表固定利率和 [T1,T2] 区间内的参照利率,L为本金,同时需要注意的是:①f是在T1时确定并在T2时支付;②实践中习惯在期初T1就支付T2时刻的现金流经过f贴现后的现值;③不用连续复利,复利频次为每T2-T1复利一次。
那么多头方在T1时刻的现金流(结算金)就为L(f-k)(T2-T1)/(1+f(T2-T1)),其中分子代表多头T2时刻的现金流,分子是按照该期间内的利率进行了折现,比如T2-T1=6个月,那么就是按照半年的利率折现到T1。空头方现金流的计算结果与多头相反,记住k<f时多头现金流为正,空头为负即可。
假定某公司预期在第1年末向银行贷款1千万,贷款期为3个月,为了规避利率风险,该公司当前与银行签订了一份FRA,约定该公司在第一年末能够获取3%的3个月固定利率,参考利率为3个月期的Shibor利率(假定第一年末为3.5%),求该公司在第1年末和第1.25年末的现金流情况。
def cashflow(L,f,k,T2,T1,when):
if when=='t2':
c=L*(f-k)*(T2-T1)
else:
c=L*(f-k)*(T2-T1)/(1+f*(T2-T1))
return c
cashflow(1000,0.035,0.03,1.25,1,when='t2')
Out[3]: 1.250000000000001
cashflow(1000,0.035,0.03,1.25,1,when='t1')
Out[4]: 1.2391573729863703
该公司规避利率上升风险,是多头方,且k<f,因此该公司在第1年末和第1.25年末的现金流分别为+1.239万和+1.25万,结算金为1.239万。
远期利率协议的价值对于FRA的多头,合约价值为L(f-k)(T2-T1)e-r*T2,r是期限长度为T2的无风险利率,且是连续复利;f和k的复利频率与T2-T1区间保持一致。由于FRA是签订日期0 ~ T1时期持有,提前确认并交换了T2时刻的现金流,因此合约签订时需要将T2时刻的现金流折现到0时刻。接上例,假设1.25年的无风险利率为4%,计算题中FRA对公司的价值:
def v(L,f,k,r,T2,T1):
return L*(f-k)*(T2-T1)*np.exp(-r*T2)
print('对于该公司而言,签订时的FRA价值为{:.4f}万元'.format(v(1000,0.035,0.03,0.04,1.25,1)))
对于该公司而言,签订时的FRA价值为1.1890万元
远期利率协议的定价
FRA的定价就是要确定合约中的参照利率 f,也即银行如何报出各种期限的远期利率协议价格,其关键在于判断将来一段时间内的远期利率水平。结合我国的实际情况,考虑用同业拆借利率,也就是Shibor收益率曲线来定价。求解过程和求远期利率的过程一模一样,只是同一期限下bid和ask会稍有不同(bid为银行的买价,即拆入价;ask为银行的卖价,即拆出价)。
已知某客户欲向银行买入一个3×6的1000万元的远期利率协议,与此同时,Shibor年利率报价情况如下表。试根据以上数据为该银行计算出这个远期利率协议的报价。
期限 | 买入价(%) | 卖出价(%) |
---|---|---|
3M | 4.1823 | 4.3562 |
6M | 4.2054 | 4.3754 |
由题意知该客户向银行买入了一个FRA,因此要求银行的卖出价。由于银行的卖出价一定大于买入价,可模拟如下组合交易:卖出3x6FRA,拆入3M Shibor (4.1823%),拆出6M Shibor (4.3754%),即e0.041823×0.25×ef×0.25=e0.043754×0.5,得到卖价为4.57%。
反之,如果银行买入3x6FRA,那么可以构建拆出3M Shibor(4. 3562%),拆入6M Shibor (4.2054%)的组合交易,在无套利机会下,可以得到FRA的买价为4.05%。
#按照之前解远期利率的公式算
print('FRA的卖价为{:.2%}'.format(f(0.043754,0.5,0.041823,0.25)))
FRA的卖价为4.57%
print('FRA的买价为{:.2%}'.format(f(0.042054,0.5,0.043562,0.25)))
FRA的买价为4.05%