在Excel中實現債券剩餘期限後自動顯示「休1」/「休2」的方法

在QB中,剩餘期限小於一年的債券,如果到期日為假期就會在剩餘期限後標註(休1、休2等)。如果在Excel中也能實現這個功能,不僅會提示自己注意,也會在給其他交易對手刷券的時候,提醒對方注意,以免造成不必要的誤會。

1、首先生成一列交易日序列:

wind選項卡-插入日期,生成日期:

日期為上海交易所的交易日(銀行的小夥伴可以選擇銀行間交易日)

時間設置為從今天起一年的時間,排序選擇降序

插入到一列不會被刪除的地方。插入後把第一個單元格的公式中起始日和終止日改為today()和today()+365,保證每天更新。

或者直接在單元格輸入下面公式

=TDays(today(),today()+365,"Order=D")

2、在要素表中新建一列欄位[休息天數],表示如果到期日為休息日,距下一個交易日的天數

公式為:

=IFNA(OFFSET(Sheet3!$A$1,MATCH([@到期日],Sheet3!$A:$A,-1)-1,0)-[@到期日],0)

其中

Sheet3!$A$1為交易日序列的第一個單元格

Sheet3!$A:$A為該交易日序列

[@到期日]為要素表中從wind讀取的到期日,公式為b_info_maturitydate([@債券代碼])+0(+0的作為在於將文本格式的日期轉為日期格式,這樣才能用於後面的匹配)

MATCH的作用是找到到期日在交易日序列中的位置,如果不在序列中,就輸出前一個位置(後一交易日所在的位置),OFFSET是找到這一個交易日,再減去到期日,就是休息的天數。

3、在要素表中再新建一列欄位,表示剩餘期限

公式為:

=b_date([@期限],[@休息天數])

其中:

期限為=b_info_termnote([@債券代碼])

休息天數為第二點的算出來的欄位

b_date是我寫的一個函數,把下面這段代碼粘貼到模塊中:

Function b_date(termnote, Optional hol = 0, Optional onlynum = False) termnote表示wind函數b_info_termnote的取值,hol表示休幾,onlynum為可選參數,用於計算到期日為休息日對實際收益率的影響 k = InStr(termnote, "+") 判斷期限是否為含權的特殊期限 If k = 0 Then d_left = termnote Else d_left = Left(termnote, k - 1) d_right = "+" & Right(termnote, Len(termnote) - k) End If If onlynum = True Then b_date = d_left Exit Function End If 對剩餘期限不足一年和超過一年的以不同單位顯示,對到期日是否為休息日進行說明 If d_left >= 1 Then d_left = Round(d_left, 2) & "Y" ElseIf hol <> 0 Then d_left = Round(d_left * 365, 0) & "D" & "(休" & hol & ")" Else d_left = Round(d_left * 365, 0) & "D" End If b_date = d_left & d_rightEnd Function

這個函數可以提示到期日是否為休息日,也可以將一年內的期限單位轉化為天(D),一年以上的單位為年(Y),並且保留合適的小數位,保留含權期限。

最後做出來的效果是

另外,也可以再加一列,計算到期日為休息日對實際收益率的影響,公式為:

=[@休息天數]/b_date([@期限],0,TRUE)/365*100*[@中債到期估值]

最後,配合我之前寫的生成交易要素,只需一鍵,就可以一鍵生成帶休的到期日啦!

------------------------------------------------

韓博:已知行權收益率計算凈價(用Wind公式)?

zhuanlan.zhihu.com圖標韓博:如何用Excel算出和前台一樣的價格和收益率?

zhuanlan.zhihu.com圖標韓博:為什麼債券DC一天後收益率會發生微小的變化?

zhuanlan.zhihu.com圖標


推薦閱讀:

【品種研究】20180406可轉債——從兩個問題出發
石磊:中國債市十年漫談(上)
李奇霖:2018年資管業務展望
詳談協議回購

TAG:債券 | 債券交易員 |