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

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

相关推荐
VidDown6 小时前
24fps 转 25fps 不只是改个数字:帧率转换、PAL/NTSC 与音频补偿
python·网络协议·音视频·视频编解码·视频
死磕音视频8 小时前
让小模型做选择题:限定候选项并读取 logits 概率的入门实践(附 Python 代码)
开发语言·python·大模型·文本分类·transformers
凤山老林8 小时前
Spring Boot 接入国密 SM2/SM3/SM4 的一些实践记录
spring boot·后端·python
pride.li10 小时前
第03章 Python 教程-基础语法:注释与变量
服务器·前端·后端·python·算法·计算机视觉
databook10 小时前
用 Pydantic AI 从零搭建一个能干活的 AI Agent
人工智能·python
顽疲10 小时前
Java vue 养老系统源码详解:月账单 care_month_bill 与 Quartz 扣费 Job 实践
java·开发语言·vue.js·vue养老·springboot养老·java养老
康小旺10 小时前
把 markitdown 做成 Windows 桌面版:拖进文档就出 Markdown,附 233MB→64MB 打包裁剪全过程
python
Wang's Blog10 小时前
Java 项目实战: 交友项目 - 安装开发工具与环境准备
java·开发语言·交友
启观川11 小时前
数据结构与算法-第 3 章 常用算法-贪心算法
数据结构·笔记·python·算法·贪心算法
南笙北梦11 小时前
本地开源大模型多轮对话显存泄漏排查与修复实录
python