蒙特卡羅
健全性檢查 - 如何為可呼叫對象定價
這個問題的目的是為了檢查我是否正確地為可贖回債券定價的工作流程。如果有人發現錯誤,或者有建議,請回答。
工作流程是:
- 對於每個呼叫日期計算:
- 債券被呼叫的機率
- 債券的普通價格,就好像它在贖回日到期
- 使用以下程式碼計算債券的加權平均價格
`
# Assume a callable with call dates t = 1...T-1 and normal maturity T # CallProps - Vec of Probabilities that the bond is called at times t # FullPrices - Vec of prices of a bond if it had maturity at t, T. NoCallProps = 1-CallProps CumNoCallProps = c(1,cumprod(NoCallProps)) WeightedPrice = 0 for(i in 1:length(FullPrices)) { WeightedPrice = WeightedPrice + CumNoCallProps[i] * (CallProps[i] * FullPrices[i]) }
`
呼叫機率由蒙地卡羅計算:
- 使用 CIR 過程(取自 MATLAB 庫並適用於 R)獲取目前收益率並模擬從現在到呼叫日期之間的費率發展
- 比較贖回日的收益率與債券的票面利率,如果收益率低於票面利率,則贖回
- 計算複製次數的呼叫平均值。
你有正確的直覺,但方法並不完全正確。
發行人有權以預先設定的贖回價格贖回債券。因此,您的決策標準是“當債券價值 >= 契約贖回價格時贖回”。我們正在比較決策規則中的價格,而不是可贖回債券的 YTM 與債券的票息。
請注意,通常贖回價格高於面值(反映贖回溢價)。
因此,您需要根據您的蒙特卡羅模擬在各種利率情景下對債券進行估值。模擬利率路徑後,您還需要使用遞歸反向歸納算法來評估二叉樹中每個節點的可贖回債券。沿每條利率路徑取債券價格的加權平均值以得出債券的價值(首先從到期時的終端節點開始,然後返回到現在)記住使用當時的現行貼現率. 此外,在任何節點,只要無期權債券價值大於可贖回價格,您就可以分配贖回價值來代替無期權債券價值(因為在這些情況下,發行人贖回債券是合理的) )。這在下面的節點(D,D)中進行了描述。
這最好通過二叉樹視覺化:
Frank Fabozzi所附的論文中有一些例子。