如果这个问题的答案已经在某个地方,我很抱歉,我已经搜索了几个小时,但找不到我要找的东西。
我正在构建一个简单的财务计算器来计算给定目标 IRR 的现金流量。例如:
还有其他变量和功能,但它们对于我在这里尝试做的事情并不重要。我发现很多库和函数可以计算给定数量现金流的 IRR,但是当我尝试获取给定 IRR 的现金流时,什么也没有出现。
在这一点上,我认为唯一的解决方案是基本上运行一个循环来插入值,检查 IRR 是否高于或低于目标 IRR,并继续计算 IRR 直到我得到我的现金流量想要。
这是解决这个特定问题的最佳方法吗?还是有更好的方法来解决我所缺少的问题?非常感谢帮助!
另外,仅供参考,我正在 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 结束)
我正在尝试将现金流计算在 0.005% 的误差范围内,因为我们正在处理的数字有数亿。
让
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
这些值与您计算的所需年回报率略有不同。您应该能够通过比较现值公式来解释差异。
Ruby 中有一个名为
Newton
的模块...它使用 Newton Raphson 方法。
我一直在使用这个模块将 IRR 函数实现到这个库中:
https://github.com/Noverde/exonio
如果您需要IRR,您可以这样使用:
Exonio.irr([-100, 39, 59, 55, 20]) # ==> 0.28095
本例中的 sn 是什么意思?