假设评估日期为今天,并且有一个浮动利率债券,且其发行日期为过去的任何日期。我想使用cashflows()
类(或Bond
)的FloatingRateBond
方法来仅从评估之日起计算现金流量 。问题是,我既没有过去的市场数据(用于固定利率),也没有对过去发生的利率现金流感兴趣。
我知道hasOccurred
的{{1}}方法,但这无济于事,因为QuantLib会引发一个错误,即我调用CashFlow
时会错过过去的市场数据。
我可以告诉cashflows()
仅计算在特定日期之后发生的现金流量吗?
以下代码重现错误
cashflows()
RuntimeError: Missing EoniaON Actual/360 fixing for December 29th, 2017
答案 0 :(得分:1)
不是cashflows()
会引起错误;您可以将最后一行改写为
cfs = bond_leg.cashflows()
print([(c.date(), c.amount()) for c in cfs])
错误发生在第二行,而不是第一行。
cashflows()
方法不会按日期过滤结果,但是您可以在调用amount()
之前执行此操作。像
cfs = bond_leg.cashflows()
min_date = referenceDate + ql.Period("6M")
print([(c.date(), c.amount()) for c in cfs if c.date() >= min_date])
将基于CashFlow
接口工作。如果您想了解更多信息,可以使用一种向下转换现金流量的功能;但是在这种情况下,如果现金流量不是浮动利率,您还必须检查是否有可能导致转换失败(例如,发生赎回的情况):
for cf in bond_leg.cashflows():
c = ql.as_floating_rate_coupon(cf)
if c and c.fixingDate() >= referenceDate:
print(c.date(), c.amount())
(if c
检查有效的演员表)。