当费率为负时,使用RQuantLib FixedRateBond功能

时间:2014-10-27 16:46:06

标签: r quantlib

我正在尝试使用RQuantLib为债券定价,但我使用的版本不适用于负利率。见下面的例子。有谁知道一个工作?我认为QuantLib能够接受负利率吗?

require(RQuantLib)

today <- as.Date("2014-10-27")
setEvaluationDate(today)

times <- seq(today+2,as.Date("2024-12-30"),by=1)
maturity <- yearFraction(rep(today,length(times)),times,rep(2,length(times)))

zerorates <- seq(-.0001,.01,length.out=length(maturity))

curve <- list(table = data.frame(date=times, zeroRates=zerorates))
attr(curve,"class") <- "DiscountCurve"

FixedRateBond(
bond =list(issueDate=as.Date("2005-11-24"), maturityDate=as.Date("2016-01-03")),
rates=.035, discountCurve= curve,
dateparams=list(settlementDays=2,dayCounter=2,period=1))

Error: invalid value (-0.0001) at index 0

sessionInfo()


R version 3.1.1 (2014-07-10)
Platform: i386-w64-mingw32/i386 (32-bit)

locale:
[1] LC_COLLATE=English_United States.1252  LC_CTYPE=English_United States.1252     LC_MONETARY=English_United States.1252
[4] LC_NUMERIC=C                           LC_TIME=English_United States.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] RQuantLib_0.3.12 rJava_0.9-6     

loaded via a namespace (and not attached):
[1] Rcpp_0.11.3 tools_3.1.1

1 个答案:

答案 0 :(得分:0)

可能存在两个不同的问题。

直到并包括版本1.2,QuantLib默认用于拒绝负率。在版本1.2.1中,行为已更改,默认情况下现在接受负利率。

如果这是问题,在RQuantLib安装中允许它们的唯一方法是重新编译库。从1.0开始,所有版本的QuantLib都是向后兼容的,因此您可以下载更新版本并将其删除,以替代RQuantLib中使用的版本(可能也会从交易中获得一些错误修复)。否则,您可以保留版本1.0.1并启用负费率;在基于autotools的构建(Linux,Mac OS X和使用MinGW的Windows)中,您可以通过运行

来实现
./configure --enable-negative-rates

在其他Windows编译器(Visual C ++,Dev-C ++)上,您必须编辑ql/userconfig.hpp并取消注释相关的#define

然而,你得到的错误(不是非常有用,但幸运的是也不常见,所以grep会找到它)来自处理的代码的一部分改为记录插值。这表明图书馆已经编制,启用了负费率(虽然其他人必须确认这一点)并且费率不会被拒绝。这可能是个好消息:这意味着,如果RQuantLib允许您选择不同的插值,您将能够使其工作而无需重新编译。我再也不知道如何做到这一点;如果你发现了,请回答你自己的问题并接受你的答案作为正确答案。