我遇到了从有底债券产生现金流的问题。
我最初遇到了一个问题,因为我忽略了定价。从那以后,我设置了一个定价器,如下所示。
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
这与我之前发表的一篇 使用 QuantLib 计算 FloatingRateBond with Floor 的现金流有关