我试图从以下现金流中计算IRR,并使用tvm::xirr获得与Excel中的XIRR略有不同的结果。
Dates= c("2020-12-31", "2021-12-31")
CF = c(-18965299.53, 18884929.89)
library(tvm)
xirr(CF, Dates, comp_freq = Inf)
= -0.004270912
与使用Excel的-0.00423772相比(即使我修改了comp_freq,结果也不匹配)。
这是一个简化的例子,但在其他情况下,差异变得更大。
有人知道如何调整公式,使其与Excel的结果相同吗?
我知道我可以构建自己的代码来计算IRR,但是我更喜欢使用这个函数,因为我有一个庞大的数据库,每天的现金流都是不规则的。
谢谢
发布于 2022-04-25 14:13:37
我阅读了TVM和Excel的文档。如果使用相同的参数,则会发现相同的结果(可以选择精度级别)。
我在R中复制excel的代码是:
library(tvm)
Dates= c("2020-12-31", "2021-12-31")
DatesReal= as.Date(Dates)
CF = c(-18965299.53, 18884929.89)
xirr(CF, DatesReal, comp_freq = 1, maxiter=100, tol=0.00000001)
TVM利用一种名为单根的算法来查找IRR。因此,您可以包含参数,例如查找结果的最大迭代次数(maxiter)和所需的精度/收敛容限(tol)。
Excel也使用一种交互技术。XIRR循环通过计算,直到结果在0.000001 %以内(等效于tol=0.00000001)并有100次迭代(等效于maxiter=100)。
在您的示例中,这两种技术的结果是-0.00423772。
https://stackoverflow.com/questions/71993387
复制相似问题