(四十二)利率互換與貨幣互換的定價

2021-10-05 07:04:19 字數 4337 閱讀 9670

對於互換多頭(即支固收浮者,希望利率上公升),例如浮動利率債券的多頭與固定利率債券的空頭的組合,利率互換的價值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 取消了中斷處理函式裡之前為了驗證進的是什麼中斷的...