python - 用期末存款计算复利 future 值(value)的正确公式是什么

标签 python financial

我正在尝试重新创建此 app .但是,对于存款频率与复利周期不匹配的情况,我的函数输出与链接应用程序的总投资值(value)输出不匹配。

这是我的函数...

def compound_interest(principal, pmt, rate, frequency, period, time):

    contribution_frequencies = {'weekly' : 52, 'biweekly' : 26, 'monthly' : 12, 'quarterly' : 4, 'semiannually' : 2, 'yearly' : 1}
    compounding_periods = {'monthly' : 12, 'quarterly' : 4, 'semiannually' : 2, 'yearly' : 1}

    frequency = contribution_frequencies[frequency]
    period = compounding_periods[period]

    rate = rate / 100

    principal_interest = principal * (1 + (rate / period)) ** (period * time)
    fv =  (pmt * frequency) / period  * ((1 + (rate / period)) ** (period * time) - 1) / (rate / period)

    total = principal_interest + fv

    return round(total, 2)

这是我的测试,其中存款频率与复利周期相同...

print(compound_interest(5000, 100, 5, 'monthly', 'monthly', 15))
print(compound_interest(5000, 100, 5, 'yearly', 'yearly', 15))
print(compound_interest(5000, 100, 5, 'quarterly', 'quarterly', 15))
print(compound_interest(5000, 100, 5, 'semiannually', 'semiannually', 15))

下面从我的函数返回的实际值与我从链接应用程序的输出中获得的实际值相同...

37297.41
12552.5
19393.36
14878.11

对于上述以外的情况,测试的实际值与链接应用程序的实际值不同。例如……

print(compound_interest(5000, 100, 5, 'weekly', 'monthly', 15))

返回...

126393.73

而链接 app返回...

126579.19

请记住,我的公式计算的是复利期末的额外存款(或者它是 says ),这似乎与链接应用程序的相同。

对于存款频率和复利周期的所有组合,我该如何重写我的函数,使其返回的实际值与链接应用程序的实际值相同?

谢谢!

最佳答案

我想我看到了函数中的错误。通常(即,当复利和额外贡献以相同频率发生时),复利周期率确实是 rate/period。因此,例如,5% 的名义年利率(按季度复利计算)可以除以 4 得到季度复利(即每季度 1.25% - 即 rate),得到有效年利率5.095%。

但是,当供款期更改为每月时,例如,复利期没有相应的变化,有效年利率保持不变。因此,仅将名义利率除以 12(因此 rate 为 0.41667%)夸大了您赚取的利息。

当复利按季度计算时,要获得实际的月度利率,您需要计算相同投资(无贡献)的月度 IRR,从而得出一年后的 future 值等于 future 使用季度复利的实际利率计算相同投资(无贡献)的值(value)(至少这是我能想到的唯一方法)。

因此,例如,1,000 美元的 future 值(value),名义年利率为 5%,每季度复利(且无贡献)为 1,050.95 美元(反射(reflect)了上述有效年利率)。要以相同的利率但按月复利获得相同的 future 值(value),您的月度利率为 0.41494%,小于您将名义年利率除以得到的利率rate by 12. 如果你在计算器网站上检查这个场景,这就是你会看到的结果。

要做到这一点,您必须制定用于在每对复利/供款期(半年/每月、半年/季度等)之间进行转换的公式。这些可能存在于那里,但我找不到它们。获得这些公式后,您必须将它们合并到您的函数中。

最后,让事情变得更加复杂的是,您将不得不处理每周计算的问题。虽然每年可以整除为 4 个季度和 12 个月,但不能整除为 52 周。因此,例如,15 年有 782.143 周,而不是 780。这必须单独考虑。

希望 - 如果您仍在尝试这样做 - 这不会让您放弃。毕竟,这是一个有趣的项目。

关于python - 用期末存款计算复利 future 值(value)的正确公式是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55841552/

相关文章:

python - 如何在 python 列表中获取某个索引的值?

r - geom_boxplot (R) 的股票烛台绘制问题

r - 通过数据帧在 R 中自动执行多项计算

mysql - 无模式财务数据和 NoSQL?

r - 下载 quantmod 数据时出错

python - 如何通过一次读取一行来转置 pandas Dataframe 中的数据?

Python多处理池卡住了

python - 如何使用另一列的 last_valid_index() 将 pandas 数据帧设置为 NaN

python - 什么时候在 .py 文件上运行 Jython 会生成 .class 文件?

.net - .NET的Money数据类型?