我遇到了从具有发言权的债券产生现金流的问题。使用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