2017-02-16 50 views
1

我遇到了從具有發言權的債券產生現金流的問題。使用QuantLib爲地板FloatingRateBonds計算現金流

我最初有一個問題,因爲我忽視了設置定價。我已經設置瞭如下價格。

ql_bond = QuantLib.FloatingRateBond(settlement_days, #settlementDays 
           face_amount, # faceAmount 
           ql_schedule, 
           ql_index, 
           QuantLib.Thirty360(), 
           gearings = [], 
           spreads = [libor_spread], 
           caps = [], 
           floors = [libor_floor] 
    ) 

    volatility = 0 
    vol = QuantLib.ConstantOptionletVolatility(settlement_days, 
              QuantLib.UnitedKingdom(), 
              QuantLib.Unadjusted, 
              volatility, 
              QuantLib.Thirty360()) 

    pricer = QuantLib.BlackIborCouponPricer(QuantLib.OptionletVolatilityStructureHandle(vol)) 
    QuantLib.setCouponPricer(ql_bond.cashflows(), pricer) 

在某些現金流量上,我能夠產生一個合理的現金流量。其他時間,但我遇到一個錯誤。給定的值(-.0225)等於libor_floor - libor_spread。我很確定我在這裏犯了一個明顯的錯誤,但不知道從哪裏開始。如果有人更熟悉QuantLib有任何建議,他們將不勝感激。

Traceback (most recent call last): 
    File "C:\Users\Ryan\git\optimizer\src\calcs\cashflow_calcs.py", line 161, in generate_cashflow 
    cashflows.append(utils.cashflow.InterestCashflow(cf_date, cf.amount(), cf_fixing_date, c.indexFixing(), c.accrualDays())) 
    File "C:\Users\Ryan\Anaconda3\lib\site-packages\QuantLib\QuantLib.py", line 8844, in amount 
    return _QuantLib.CashFlow_amount(self) 
RuntimeError: strike + displacement (-0.0225 + 0) must be non-negative 

這涉及到一個較早的文章中,我提出 Using QuantLib to compute cash flows for FloatingRateBond with Floor

回答

0

問題不QuantLib 本身。 Black模型是對數正態模型,不適用於負值(因爲您無法取對數)。正如你猜測的那樣,當利率開始下降時,結果是一個問題。它可以通過兩種不同的方式解決:第一種是改變模型並使用正常模型,第二種是引入固定位移Dlog(R+D)而不是log(R),以便對數的參數爲​​正。

在這兩種情況下,波動率都必須改變(實際上,報價的波動率也會告訴您使用何種模型和位移)。在QuantLib中,這意味着您在建立波動率期限結構—時必須傳遞相關信息,這是您目前遇到問題的地方。 C++庫已經提供了一段時間的功能,但是Python模塊還沒有導出相應的ConstantOptionletVolatility,所以你得到了默認值,即對數正態模型和空位移。

如果你是用SWIG幾分愜意,您可以修改相應的接口文件QuantLib-SWIG/SWIG/volatilities.i(你有一對夫婦的參數添加到ConstantOptionletVolatility構造,以同樣的方式它是爲ConstantSwaptionVolatility類所做的相同文件),重新生成包裝並編譯它們。否則,請在https://github.com/lballabio/QuantLib-SWIG/issues處打開問題,我們將嘗試在下一個版本中添加該功能。