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

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

相关推荐
c++之路3 分钟前
CMake 系列教程(一):CMake 基础知识
c语言·开发语言·c++
AI行业学习3 分钟前
CC‑Switch v3.16.1-下载、配置、安装(2026‑06‑01 最新官方版)
开发语言·人工智能·windows·python
unity工具人4 分钟前
python+yolov8 图像识别-测试案例
python·opencv·yolo
赵庆明老师5 分钟前
JS检查提交的文件是否合规
开发语言·前端·javascript
lipku5 分钟前
LiveTalking 更新:集成 vLLM-Omni TTS服务
python·开源·数字人·vllm·实时数字人
Irissgwe7 分钟前
C++ STL bitset 和位图详解
开发语言·c++·stl·位图·bitset
我还记得那天8 分钟前
C语言随机数生成机制与猜数字游戏实现
c语言·开发语言·游戏
其实防守也摸鱼9 分钟前
Claude 大模型新手入门与实战指南
人工智能·python·功能测试·ai·大模型·测评
Dust-Chasing12 分钟前
Claude Code源码剖析 - 权限系统
人工智能·python·ai
茉莉玫瑰花茶14 分钟前
综合案例 - AI 智能租房助手 [ 4 ]
数据库·python·ai·langgraph