货币时间价值:现值、未来值与折现
今天的一美元比明天的一美元更值钱。理解为什么——以及如何计算现值和未来值——是一切金融数学的基础。
今天的一美元比未来的一美元更值钱。这叫做货币时间价值,它是一切金融数学的基础。
为什么货币具有时间价值?
三个原因:
1. 通胀: 价格往往随时间上涨。今天的一美元比明年的一美元购买力更强。
2. 机会成本: 今天的资金可以投资获利。$1 今天 → $1 × (1+r) 明年。
3. 风险: 今天拿到钱是确定的。未来拿到钱则不确定——你可能永远拿不到。
这三个因素结合在一起,使现值计算在金融领域变得不可或缺。
未来值
如果你今天投资100美元,年回报率5%,一年后你会有多少?
三年后呢?
这就是复利——你赚取的回报会继续产生回报。对比单利,单利只对原始本金计算回报。
现值
反向计算叫做折现。如果你三年后需要115.76美元,利率为5%,今天需要投资多少?
这个过程是同一公式的反向运用:
利率通常被称为折现率。它反映了机会成本和风险。
折现率
折现率是任何现值计算中最重要的输入。它应该反映:
- 无风险利率(无风险投资的机会成本)
- 风险溢价,对应现金流的具体风险
对于政府债券:折现率 ≈ 国债收益率。 对于公司股票:折现率 = 无风险利率 + 股票风险溢价。
更高的折现率意味着更低的现值。这就是为什么利率上升会损害股票价格——更高的折现率降低了未来收益的现值。
年金
年金是定期等额支付的一系列款项。
年金的未来值(如果你连续5年每年投资100美元,利率5%):
年金的现值(如果你将连续5年每年收到100美元,利率5%折现):
这就是债券定价的方式:息票支付是一种年金,面值是一次性未来付款。
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 实际利率
名义利率: 未调整通胀的挂牌利率。就是你在债券或贷款上看到的数字。
实际利率: 名义利率减去预期通胀。是你实际购买力的增长。
费雪方程:
因此,如果债券名义收益率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.