0

我正在尝试使用 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
4

1 回答 1

1

可能有两个不同的问题在起作用。

直到 1.2 版(包括 1.2 版),QuantLib 过去默认拒绝负利率。在 1.2.1 版中,行为发生了变化,现在默认接受负利率。

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

./configure --enable-negative-rates

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

但是,您得到的错误(信息量不是很大,但幸运的是也不是很常见,因此grep会找到它)来自处理日志插值的代码的一部分。这表明该库已在启用负利率的情况下编译(尽管其他人必须确认这一点)并且利率并未因此被拒绝。这可能是个好消息:这意味着,如果 RQuantLib 允许您选择不同的插值,您将能够使其工作而无需重新编译。同样,我不知道如何做到这一点。如果您发现了,请回答您自己的问题并接受您的答案作为正确答案。

于 2014-10-28T21:38:11.773 回答