【发布时间】:2017-02-16 23:41:49
【问题描述】:
我遇到了从有底债券产生现金流的问题。
我最初遇到了一个问题,因为我忽略了设置定价器。从那以后,我设置了一个如下的定价器。
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
【问题讨论】:
标签: finance quantitative-finance quantlib quantlib-swig