程式

在 QuantLib 中評估結構性貸款

  • January 27, 2020

我試圖弄清楚是否有可能在 quantlib 中對結構化產品(主要是貸款)進行估值。這個想法是建立一個具有不同現金流的債券類別。例如,貸款可能有隻支付利息的息票,可能只是攤銷,甚至息票可以增加名義金額。

此外,出於 FTP 的目的,人們可能對返回貸款面值的收益率感興趣。有本機功能嗎?

可以使用 python 或 c++ 中的目前版本執行此操作嗎?

更準確地說,想像一下這兩個例子:

首先,我有一筆面值為2000的貸款,有兩次1000的贖回: 在此處輸入圖像描述

我已經用一個簡單的程式碼成功地用 Bond 類建立了現金流:

def bond_from_table(df,notional, outlay_date, day_counter, r=0.03):
   eval_date = ql.Settings.instance().evaluationDate
   coupons = []
   redemptions = []
   redem = 0
   for i in range(df.shape[0]):
       start_date = df.at[i,'Start']
       end_date = df.at[i,'End']
       notional -= redem        
       redem = df.at[i,'Capital']
       redemptions.append(ql.Redemption(redem,end_date))    
   coupons.append(ql.FixedRateCoupon(end_date,notional,r,day_counter,start_date,end_date))    

   leg = ql.Leg(coupons)
   loan = ql.Bond(0,calendar,eval_date,leg)
   return loan

似乎債券類從正在支付的名義上建構贖回。好消息是使用bond類我們可以訪問所有的bond函式和其他東西,比如可呼叫性等等。

但!如果我嘗試建構這樣的東西:

在此處輸入圖像描述

在向客戶支付最初的 2000 美元之後,在接下來的日期再支付 400 美元(這就是為什麼 - 符號)-最後,您收到總貸款-我會收到一個錯誤,說名義上正在增加,這是真的。我想這可能有另一條路線,但我認為我將失去債券類的功能。

有任何想法嗎?提前致謝,

如您所見,該Bond課程假定您正在購買債券;也就是說,您預先支付了名義上的費用,它將以一個解決方案或一系列攤銷付款的形式退還給您。假設在此處編碼,您可以嘗試刪除它並重新編譯,但我不建議這樣做。可能是程式碼的其他部分依賴於該檢查已成功通過。

相反,您可能會做的是將兩組現金流(couponsredemptions)放在一起,對它們進行排序,然後將所得的腿視為您的貸款。它可能不會為您提供綁定的所有功能(例如,當某些事情發生變化時延遲重新計算),但您將能夠使用CashFlows類的方法來分析它們。這將為您提供 NPV、BPS、收益率和持續時間等指標,以及一些靜態資訊。不幸的是,它不會讓您訪問在某些特定債券類中編碼的可呼叫性等功能。

引用自:https://quant.stackexchange.com/questions/48613