如果这个问题的答案已经存在,我道歉,我现在已经搜索了几个小时,但我找不到我要找的东西。
我正在建立一个简单的金融计算器来计算给定目标IRR的现金流量。例如:
还有其他变量和功能,但它们对我在这里要做的事情并不重要。我发现有很多库和函数可以计算给定数量现金流的内部收益率,但是当我试图获得给定内部收益率的现金流量时,没有任何内容出现。
此时,我认为唯一的解决方案是基本上运行一个循环来插入值,检查IRR是否高于或低于目标IRR,并继续计算IRR直到我得到现金流我想要的。
这是解决这一特定问题的最佳方法吗?还是有一种更好的解决方法,我错过了?非常感谢!
另外,作为一个FYI,我在Ruby on Rails中构建它。
修改
IRR功能:
NPV = - (I)+ CF [1] /(1 + R)^ 1 + CF [2] /(1 + R)^ 2 + ... + CF [n] /(1 + R) ^ N
NPV =净现值(此值必须尽可能接近0)
I =初始投资(在此示例中为18,000,000美元)
CF =现金流(这是我试图计算的价值 - 如果我手工计算它最终会达到2,618,875美元。在我的金融计算器中,所有的现金流量都是相同的,因为我是为他们解决问题。)R =目标回报率(10%)
n =年份(所以这个例子将在5年结束)
我正在尝试将现金流量计算在.005%误差范围内,因为我们正在使用的数字是数亿。
答案 0 :(得分:3)
让
v0 = initial value
vn = value after n periods
n = number of periods
r = annual rate of return
y = required annual net income
一期贴现因子是:
j = 1/(1+r)
投资的现值是:
pv = - v0 + j*y + j^2*y + j^3*y +..+ j^n*y + j^n*vn
= - v0 + y*(j + j^2 + j^3 +..+ j^n) + j^n*vn
= - v0 + y*sn + j^n*vn
,其中
sn = j + j^2 + j^3 + j^4 +..+ j^n
我们可以按如下方式计算sn
:
sn = j + j^2 + j^3 + j^4 +..+ j^n
j*sn = j^2 + j^3 + j^4 +..+ j^n + j^(n+1)
sn -j*sn = j*(1 - j^n)
sn = j*(1 - j^n)/(1-j)
= (1 - j^n)/[(1+r)(r/(1+r)]
= (1 - j^n)/r
设置pv = 0
并解析y
:
y*sn = v0 - vn * j^n
y = (v0 - vn * j^n)/sn
= r * (v0 - vn * j^n)/(1 - j^n)
我们的Ruby方法:
def ann_ret(v0, vn, n, r)
j = 1/(1+r)
(r * (v0 - vn * j**n)/(1 - j**n)).round(2)
end
年度复合:
ann_ret(18000000, 13000000, 5, 0.1) # => 2618987.4
半年复合:
2 * ann_ret(18000000, 13000000, 10, 0.05) # => 2595045.75
每日复合:
365 * ann_ret(18000000, 13000000, 5*365, 0.10/365) # => 2570881.20
这些值与您计算的所需年度回报略有不同。您应该能够通过比较现值公式来解释差异。
答案 1 :(得分:1)
Ruby中有一个名为Newton
的模块......它使用Newton Raphson方法。
我一直在使用这个模块在这个库中实现IRR功能:
https://github.com/Noverde/exonio
如果您需要IRR,可以这样使用:
Exonio.irr([-100, 39, 59, 55, 20]) # ==> 0.28095