在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公式)韓博:如何用Excel算出和前台一樣的價格和收益率韓博:為什麼債券DC一天後收益率會發生微小的變化推薦閱讀:
※【品種研究】20180406可轉債——從兩個問題出發
※石磊:中國債市十年漫談(上)
※李奇霖:2018年資管業務展望
※詳談協議回購