跳到正文

货币时间价值:现值、未来值与折现

今天的一美元比明天的一美元更值钱。理解为什么——以及如何计算现值和未来值——是一切金融数学的基础。

第 7 篇 · 共 30 篇 约 2 分钟

今天的一美元比未来的一美元更值钱。这叫做货币时间价值,它是一切金融数学的基础。

为什么货币具有时间价值?

三个原因:

1. 通胀: 价格往往随时间上涨。今天的一美元比明年的一美元购买力更强。

2. 机会成本: 今天的资金可以投资获利。$1 今天 → $1 × (1+r) 明年。

3. 风险: 今天拿到钱是确定的。未来拿到钱则不确定——你可能永远拿不到。

这三个因素结合在一起,使现值计算在金融领域变得不可或缺。

未来值

如果你今天投资100美元,年回报率5%,一年后你会有多少?

FV=PV×(1+r)1=100×1.05=105FV = PV \times (1 + r)^1 = 100 \times 1.05 = 105

三年后呢?

FV=PV×(1+r)3=100×1.053=115.76FV = PV \times (1 + r)^3 = 100 \times 1.05^3 = 115.76

这就是复利——你赚取的回报会继续产生回报。对比单利,单利只对原始本金计算回报。

现值

反向计算叫做折现。如果你三年后需要115.76美元,利率为5%,今天需要投资多少?

PV=FV(1+r)3=115.761.053=100PV = \frac{FV}{(1 + r)^3} = \frac{115.76}{1.05^3} = 100

这个过程是同一公式的反向运用:

PV=FV(1+r)tPV = \frac{FV}{(1 + r)^t}

利率rr通常被称为折现率。它反映了机会成本和风险。

折现率

折现率是任何现值计算中最重要的输入。它应该反映:

  • 无风险利率(无风险投资的机会成本)
  • 风险溢价,对应现金流的具体风险

对于政府债券:折现率 ≈ 国债收益率。 对于公司股票:折现率 = 无风险利率 + 股票风险溢价。

更高的折现率意味着更低的现值。这就是为什么利率上升会损害股票价格——更高的折现率降低了未来收益的现值。

年金

年金是定期等额支付的一系列款项。

年金的未来值(如果你连续5年每年投资100美元,利率5%):

FVannuity=P×(1+r)n−1rFV_{annuity} = P \times \frac{(1+r)^n - 1}{r}

年金的现值(如果你将连续5年每年收到100美元,利率5%折现):

PVannuity=P×1−(1+r)−nrPV_{annuity} = P \times \frac{1 - (1+r)^{-n}}{r}

这就是债券定价的方式:息票支付是一种年金,面值是一次性未来付款。

Python实现

import numpy as np

def future_value(PV, r, t):
    """
    Calculate future value given present value, rate, and time.

    FV = PV * (1 + r)^t
    """
    return PV * (1 + r) ** t


def present_value(FV, r, t):
    """
    Calculate present value given future value, rate, and time.

    PV = FV / (1 + r)^t
    """
    return FV / (1 + r) ** t


def pv_annuity(P, r, n):
    """
    Calculate present value of an annuity.

    P = periodic payment
    r = discount rate per period
    n = number of periods
    """
    return P * (1 - (1 + r) ** (-n)) / r


def fv_annuity(P, r, n):
    """
    Calculate future value of an annuity.
    """
    return P * ((1 + r) ** n - 1) / r


def pv_perpetuity(P, r):
    """
    Present value of a perpetuity (infinite annuity).

    PV = P / r
    """
    return P / r


def npv(cash_flows, r):
    """
    Calculate net present value of a series of cash flows.

    cash_flows: list of cash flows starting from period 0
    r: discount rate
    """
    return sum(cf / (1 + r) ** t for t, cf in enumerate(cash_flows))


def irr(cash_flows):
    """
    Calculate internal rate of return—the discount rate
    that makes NPV = 0.
    """
    from scipy.optimize import brentq

    def npv_func(r):
        return sum(cf / (1 + r) ** t for t, cf in enumerate(cash_flows))

    try:
        return brentq(npv_func, -0.99, 10.0)
    except:
        return np.nan

提示词

用 numpy 和 scipy.optimize.brentq 写一组货币时间价值函数:未来值、现值、年金现值和终值、永续年金、NPV、IRR。

名义利率 vs 实际利率

名义利率: 未调整通胀的挂牌利率。就是你在债券或贷款上看到的数字。

实际利率: 名义利率减去预期通胀。是你实际购买力的增长。

费雪方程:

(1+rnominal)=(1+rreal)×(1+πexpected)(1 + r_{nominal}) = (1 + r_{real}) \times (1 + \pi_{expected})

因此,如果债券名义收益率5%,预期通胀3%,实际回报约为2%。

应用场景

债券定价: 债券价格 = 息票支付的现值 + 面值的现值。折现率是债券的到期收益率。

股票估值: 股票价格 = 所有未来股息的现值。需要预测永远持续的分红并以适当利率折现。

资本预算: 项目净现值 = 未来现金流的现值 - 初始投资。接受净现值为正的项目。

贷款摊销: 使用年金公式计算抵押贷款的月供。

核心要点

  • 现在的钱比未来的钱更值钱,因为通胀、机会成本和风险
  • 现值 = 未来值按适当利率折现
  • 折现率越高 → 现值越低
  • 年金和永续年金是债券和股票估值的基础
  • 实际回报考虑通胀;名义回报不考虑

参考文献

  • Brealey, Myers, Allen, Principles of Corporate Finance, Ch. 2-3. McGraw-Hill, 2020. ISBN: 978-1-26-014414-8.
  • Hull, Options, Futures, and Other Derivatives, Ch. 3. Pearson, 2018. ISBN: 978-0-13-463149-3.