1. 货币时间价值:现值(PV)与终值(FV)的数学推导与Python实现

货币时间价值,说白了就是「今天的100块比明天的100块更值钱」。这个道理听起来简单,但真正在交易系统里用起来,坑可不少。我当年刚入行时,就因为搞混了单利和复利,差点让一个债券定价模型出了大问题。

嗯,咱们今天就把这个最基础、也最重要的概念彻底讲透。

1.1 核心逻辑:为什么钱有时间价值?

你想想看,如果你现在有100万,你可以:

  • 存银行吃利息
  • 买国债赚收益
  • 投项目等回报

但如果你一年后才有这100万,你就白白损失了一年的投资机会。所以,未来的钱必须「打折」才能和现在的钱比较。这个打折的比率,就是利率。

核心公式(一句话版):

终值(FV) = 现值(PV) × (1 + 利率)^时间

现值(PV) = 终值(FV) / (1 + 利率)^时间

1.2 单利 vs 复利:一字之差,天壤之别

我见过不少新手,觉得单利和复利差不多。其实差远了。咱们直接上对比。

对比项 单利 复利
计息基础 始终按初始本金 本金+累计利息
增长方式 线性增长 指数增长
公式 FV = PV × (1 + r × t) FV = PV × (1 + r)^t
适用场景 短期借贷、部分债券 银行存款、投资、贷款

举个例子:100万本金,年利率5%,投资10年。

  • 单利终值 = 100万 × (1 + 0.05 × 10) = 150万
  • 复利终值 = 100万 × (1 + 0.05)^10 ≈ 162.89万

差了将近13万。时间越长,差距越恐怖。30年的话,单利250万,复利432万——差了182万。

避坑指南: 我曾经在做一个理财产品定价时,对方给的利率是「年化单利5%」,但我直接用复利公式算了现值。结果报价低了,差点亏钱。后来我养成了一个习惯:拿到任何利率,先问清楚是单利还是复利,计息周期是多久。

1.3 数学推导:从定义到公式

咱们来走一遍推导过程。别怕,很简单的。

单利推导:

第一年利息 = PV × r

第二年利息 = PV × r(还是按本金算)

第t年利息 = PV × r

总利息 = PV × r × t

所以:FV = PV + PV × r × t = PV × (1 + r × t)

复利推导:

第一年末:FV₁ = PV × (1 + r)

第二年末:FV₂ = FV₁ × (1 + r) = PV × (1 + r)²

第t年末:FVₜ = PV × (1 + r)^t

反过来,已知终值求现值:

PV = FV / (1 + r)^t

我的小技巧: 在Excel里,我习惯用FV()和PV()函数。但在Python里,我更喜欢手写公式,因为能清楚看到每一步。调试的时候特别有用。

1.4 Python实现:从零开始写代码

咱们直接上代码。我会把单利和复利都实现,再加一个对比函数。

# 单利终值计算
def simple_interest_fv(pv, rate, time):
    """
    pv: 现值
    rate: 年利率(小数形式,如0.05)
    time: 年数
    """
    return pv * (1 + rate * time)

# 复利终值计算
def compound_interest_fv(pv, rate, time):
    return pv * (1 + rate) ** time

# 现值计算(复利折现)
def present_value(fv, rate, time):
    return fv / (1 + rate) ** time

# 来个实际例子
pv = 1000000  # 100万
rate = 0.05   # 5%
time = 10     # 10年

fv_simple = simple_interest_fv(pv, rate, time)
fv_compound = compound_interest_fv(pv, rate, time)

print(f"单利终值: {fv_simple:,.2f} 元")
print(f"复利终值: {fv_compound:,.2f} 元")
print(f"差额: {fv_compound - fv_simple:,.2f} 元")

# 反过来验证:把复利终值折现回来
pv_back = present_value(fv_compound, rate, time)
print(f"折现回现值: {pv_back:,.2f} 元")

输出结果:

单利终值: 1,500,000.00 元
复利终值: 1,628,894.63 元
差额: 128,894.63 元
折现回现值: 1,000,000.00 元

你看,折现回去正好是100万。这说明公式是自洽的。

1.5 知识体系总览

下面这张图,把本章的核心逻辑串起来了。我建议你保存下来,以后忘了随时看。

货币时间价值核心知识体系 货币时间价值 终值 (FV) 现值 (PV) 单利 FV = PV×(1+r×t) 复利 FV = PV×(1+r)^t 单利折现 PV = FV/(1+r×t) 复利折现 PV = FV/(1+r)^t 短期借贷 投资理财 债券定价 项目估值

1.6 实战中的几个坑

代码写完了,图也画了。我再分享几个实战中容易踩的坑。

  1. 利率单位搞混: 年利率5%是0.05,不是5。我见过有人直接写5,结果算出来离谱的数字。
  2. 时间单位不一致: 如果利率是年化,时间必须是年。如果是月利率,时间必须是月。我曾经把一个按月付息的产品,直接用年利率×年数算了,结果对不上账。
  3. 复利频率: 实际中复利可能是按年、按半年、按季度甚至按天。公式要调整为:FV = PV × (1 + r/n)^(n×t),其中n是每年复利次数。

我的习惯: 在写任何金融计算代码之前,先写一个简单的「合理性检查」。比如,利率应该在0到1之间,时间应该是正数,终值应该大于现值(正利率下)。这些小检查,能帮你省下大量debug时间。

好了,货币时间价值这个地基,咱们算是打牢了。后面的章节,我们会在这个基础上,搭建更复杂的金融模型。


公众号:蓝海资料掘金营,微信deep3321