量化自学 - 金融理论与python - Net Present Value 净现值

净现值(Net Present Value,NPV)是金融理论中用于评估投资项目价值的指标。其核心思想是将未来现金流按一定贴现率折算为当前价值,并减去初始投资成本。若NPV为正,表明项目预期收益高于成本,具有投资价值;反之则可能不值得投资。

NPV公式

其中:

  • (C_t) 是第 (t) 期的现金流(初始投资 (C_0) 通常为负值)。
  • (r) 是贴现率。
  • (t) 是时间周期。

Python实现方法

方法1:纯Python实现

通过遍历现金流列表,逐项计算现值并累加。

python 复制代码
def calculate_npv(rate, cash_flows):
    npv = 0.0
    for t, cf in enumerate(cash_flows):
        npv += cf / (1 + rate)**t
    return npv

# 示例
cash_flows = [-100, 50, 60, 70]  # 初始投资-100,后续三年现金流
discount_rate = 0.1  # 贴现率10%
result = calculate_npv(discount_rate, cash_flows)
print(f"NPV: {result:.2f}")  # 输出: NPV: 47.63
方法2:使用NumPy库

NumPy提供npv函数,但需注意其假设现金流从 (t=1) 开始,因此需单独处理初始投资。

python 复制代码
import numpy as np

cash_flows = [-100, 50, 60, 70]
discount_rate = 0.1

# numpy.npv的现金流从t=1开始,需手动加上t=0的现金流
npv_numpy = cash_flows[0] + np.npv(discount_rate, cash_flows[1:])
print(f"NPV (NumPy): {npv_numpy:.2f}")  # 输出: NPV (NumPy): 47.63

注意事项

  • 时间对齐:确保现金流列表的第一个元素对应 (t=0)(即初始投资)。
  • 贴现率范围:贴现率应大于-1(避免分母为零或负数)。
  • 结果解读:NPV > 0 表示项目可行,NPV < 0 则可能拒绝。

示例验证

对于现金流 [-100, 50, 60, 70] 和贴现率10%:

计算结果与代码输出一致,验证正确性。

相关推荐
xiaoye-duck2 分钟前
C++ string 底层原理深度解析 + 模拟实现(下)——面试 / 开发都适用
开发语言·c++·stl
码云数智-大飞6 分钟前
使用 Python 高效提取 PDF 中的表格数据并导出为 TXT 或 Excel
python
Hx_Ma161 小时前
SpringMVC框架提供的转发和重定向
java·开发语言·servlet
biuyyyxxx1 小时前
Python自动化办公学习笔记(一) 工具安装&教程
笔记·python·学习·自动化
期待のcode2 小时前
原子操作类LongAdder
java·开发语言
极客数模2 小时前
【2026美赛赛题初步翻译F题】2026_ICM_Problem_F
大数据·c语言·python·数学建模·matlab
lly2024063 小时前
C 语言中的结构体
开发语言
JAVA+C语言3 小时前
如何优化 Java 多主机通信的性能?
java·开发语言·php
小鸡吃米…3 小时前
机器学习中的代价函数
人工智能·python·机器学习
青岑CTF4 小时前
攻防世界-Ics-05-胎教版wp
开发语言·安全·web安全·网络安全·php