對於互換多頭(即支固收浮者,希望利率上公升),例如浮動利率債券的多頭與固定利率債券的空頭的組合,利率互換的價值v = bfl - bfix;反之對於互換空頭(收浮支固者,希望利率下降),例如固定利率債券的多頭與浮動利率債券的空頭的組合,利率互換的價值就是v = bfix - bfl。
其中固定利率債券的價值 bfix就是未來交換的現金流的貼現和,一般用連續複利的即期利率來貼現。為計算bfl,注意到浮動債券在付息後等於其面值a(因為其收益率和折現率均為上一支付日的浮動利率如libor),假定下一次互換現金流的時間為t* 時刻,在t* 時刻支付浮動利息是k*,在支付利息之後的那一時刻bfl = a+k*,所以浮動利率債券可看作是在t* 時刻提供單一現金流的金融資產,對這一現金流用對應期限的貼現率r* 進行貼現即可得出浮動利率債券的現值為bfl = (a+k*)×e-r*t*。
案例:假設按照某利率互換條款,某一金融機構同意支付6個月期的libor,同時收取每年8%的利率(半年期的年複利),名義本金為1億美元,該互換還有1.25年時間到期。按照連續複利計算的3個月、6個月、9個月和15個月的相關貼現率分別是10%、10.3%、10.5%和11%。上一支付日所對應的libor為10.2%(半年複利)。計算該利率互換對於該金融機構的價值。
注意該互換15個月後到期,因此支付日從現在往後推分別是3個月後,9個月後和15個月後。該金融機構支浮收固,是互換空頭,v = bfix - bfl = -4.267百萬美元,對於該金融機構來說互換價值為負。
import numpy as np
defint_swap_long
(t,r,a,k,r0)
: bfix=
sum(a*k*
0.5*
(np.exp(
-r*t)))
+a*(np.exp(
-r[-1]
*t[-1]
))bfl=
(a+0.5
*a*r0)
*(np.exp(
-r[0
]*t[0]
))return bfl-bfix
a=100
;t=np.array(
[0.25
,0.75
,1.25])
;k=0.08
r=np.array(
[0.1
,0.105
,0.11])
;r0=
0.102
v=-int_swap_long(t,r,a,k,r0)
vout[3]
:-4.2671758531406
互換的固定利率定價要使得互換合約剛簽訂時的價值為0。假定libor為6個月期的浮動利率,利息每6個月交換一次。由於付息日浮動利率的確定來自6個月前,因此知道互換的年限後,未來的浮動利率要根據遠期利率來計算,而遠期利率可以根據零息債券的收益率(利率期限結構)獲得,即:(1+ri/2)i (1+fi+1,i/2) = (1+ri+1/2)i+1,ri為第i個半年後到期的零息債券半年付息一次的年收益率。因此使得 bfix - bfl = 0的x就是固定利率的定價(下圖中左邊式子還要×0.5,n為半年期的期數):
比如要確定乙個5年期、名義本金為100萬美元、6個月付息一次的利率互換的固定利率,利率的期限結構t=[0.5,1,1.5,2,2.5,3,3.5,4,4.5,5],對應的零息債券收益率分別為r=[0.0614,0.0642,0.066,0.0684,0.0702,0.0726,0.0754,0.0795,0.0827,0.0868]:
t=np.array([1
,2,3
,4,5
,6,7
,8,9
,10])
#5年有10個複利期間
r=np.array(
[0.0614
,0.0642
,0.066
,0.0684
,0.0702
,0.0726
,0.0754
,0.0795
,0.0827
,0.0868])
f=np.zeros(
len(t)
);f[0]
=r[0
]for i in
range
(len
(t)-1)
:#求遠期利率
f[i+1]
=(((
2+r[i+1]
)**t[i+1]
)/(2
+r[i]
)**t[i])-
2fout[6]
: array(
[0.0614
,0.0670038
,0.06960471
,0.07561674
,0.07741568
,0.0846418
,0.09227962
,0.10842769
,0.10847791
,0.12406512])
discount=np.zeros(
len(t)
)for i in
range
(len
(t))
:#求折現因子
discount[i]=(
1+r[i]/2
)**t[i]
bfl=a*
0.5*
sum(f/discount)
#浮動利率債券**
from scipy import optimize#求解固定利率x
defg
(x):
e=bfl-a*
0.5*
sum(x/discount)
return e
result=optimize.fsolve(g,
0.1)
print
('固定利率為'
.format
(float
(result)))
固定利率為8.45
%
與利率互換的方式相似,貨幣互換可以分解為用兩種債券表示的情況。假如有兩個公司,乙個是支付10.8%年利率英鎊債券的多頭,另乙個是支付8.0%年利率美元債券的空頭。如果用v表示互換的價值,對支付美元利率的那一方而言,美國為本國,v=s×bf - bd,bf表示在互換中以外幣形式衡量的外幣債券價值,bd為互換中美元債券的價值,s為即期匯率(以每單位外幣等於若干本國貨幣數量來表示)。因此,互換的價值可以由本國貨幣的利率期限結構、外幣的利率期限結構以及即期匯率來確定。
案例:假設日元和美元的利率期限結構都是平的,日元年利率為4%,美元年利率為9%(連續複利)。一家金融機構進行貨幣互換,它每年以日元收取年利率為5%的利息,以美元支付年利率為8%的利息,以兩種貨幣表示的本金分別為120000萬日元和100萬美元,互換將持續3年,每年互換一次。現在的匯率為1美元=110日元,試求該互換對於金融機構的價值。
該互換對於金融機構的價值為+154.3萬美元。
隨筆(四十二)
recyclerview 效能優化 安卓 offer 收割基 2.recyclerview 資料預取 3.androidofferkiller 4.android效能優化第 七 篇 strickmode嚴苛模式檢測耗時與記憶體問題 5.accessibilityservice 幫你實現 androi...
Lua程式設計(四十二)
lua語言還提供了一種改變表在兩種正常情況下的行為的方式,即訪問和修改表中不能存在的字段。index 元方法 當訪問乙個表中不存在的字段時會得到nil。實際上,這些訪問會引發直譯器查詢乙個名為 index的元方法。如果沒有這個元方法,那麼像一般情況下一樣,結果就是nil 否則,則由這個元方法來提供最...
四十二 移植bootm命令
2 加上了原版u boot裡dm9000傳送函式裡傳送前後都要清除傳送標誌 3 取消了老師說的要對包進行判斷,實際上不判斷效果還要好一點,那一部分,要求只要在空讀前後有20微妙的時間間隔就好了,經我實際測試,我的開發板確實只用空讀一次就滿足該條件。4 取消了中斷處理函式裡之前為了驗證進的是什麼中斷的...