量化自学 - 金融理论与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%:

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

相关推荐
hbqjzx20 小时前
记录一个自动学习的脚本开发过程
开发语言·javascript·学习
星星也在雾里20 小时前
【管理多版本Python环境】Anaconda安装及使用
python·anaconda
Sirens.20 小时前
Java核心概念:抽象类、接口、Object类深度剖析
java·开发语言·github
用户37215742613520 小时前
使用 Python 将 CSV 文件转换为 PDF 的实践指南
python
大佬,救命!!!20 小时前
算法实现迭代2_堆排序
数据结构·python·算法·学习笔记·堆排序
程序员阿鹏21 小时前
49.字母异位词分组
java·开发语言·leetcode
Yurko1321 小时前
【C语言】基本语法结构(上篇)
c语言·开发语言·学习
总有刁民想爱朕ha21 小时前
Python自动化从入门到实战(24)如何高效的备份mysql数据库,数据备份datadir目录直接复制可行吗?一篇给小白的完全指南
数据库·python·自动化·mysql数据库备份
草莓熊Lotso21 小时前
《C++ Stack 与 Queue 完全使用指南:基础操作 + 经典场景 + 实战习题》
开发语言·c++·算法
孤客网络科技工作室21 小时前
Python - 100天从新手到大师:第五十七天获取网络资源及解析HTML页面
开发语言·python·html