Amr Mohamed Salama

Jan 16, 20222 min

Program to calculate NPV

What Is Net Present Value (NPV)?

  • Net present value, or NPV, is used to calculate the current total value of a future stream of payments.

  • If the NPV of a project or investment is positive, it means that the discounted present value of all future cash flows related to that project or investment will be positive, and therefore attractive.

  • To calculate NPV, you need to estimate future cash flows for each period and determine the correct discount rate.

Net Present Value (NPV) Formula

where:

Rt = Net cash inflow/outflows during a single period

ti = Discount rate/return that could be earned in alternative investments

t = Number of timer periods

Calculating NPV with Python

let us consider project (X) with following specifications:

life time = 15 years

initail investments = 2000000 $

final project value = 1000000 $

project_cash_flow = [ - 2000000, 0 , 0 , 250000, 250000, 500000, 500000, 750000, 750000, 500000, 500000, 500000, 500000, 500000, 1000000]

discount_rate = [0.05, 0.055, 0.06, 0.065, 0.07, 0.075, 0.08, 0.085, 0.09, 0.095, 0.1, 0.105, 0.11, 0.115, 0.12, 0.125, 0.13, 0.135, 0.14, 0.145, 0.15]

we decide to perform a Net Present Value (NPV) analysis to determine the profitability of the project

Importing the python packages

import matplotlib.pyplot as plt
 
import matplotlib.pyplot as plt​

Input Data

project_cash_flow= [-2000000, 0, 0, 250000, 250000, 500000, 500000, 750000, 750000, 500000, 500000, 500000, 500000, 500000, 1000000]
 

 
discount_rate = [0.05, 0.055, 0.06, 0.065, 0.07, 0.075, 0.08, 0.085, 0.09, 0.095, 0.1, 0.105, 0.11, 0.115, 0.12, 0.125, 0.13, 0.135, 0.14, 0.145, 0.15]
 

Function to calculate NPV


 
def calculate_npv(rate, cash_flow):
 
npv = 0
 
for t in range(len(cash_flow)):
 
npv += cash_flow[t]/(1+rate)**t
 
return npv
 

 
npvs_a = list()
 
for rate in discount_rate:
 
npv_a = calculate_npv(rate,project_a)
 
npvs_a.append(npv_a)
 

Graphical Representation

plt.plot(discount_rate,npvs_a, linewidth = 3.0, color = "green", label = "Project X")
 
plt.axhline(y=0, linewidth = 0.5, color = "black")
 
plt.title('NPV Profile: Project X')
 
plt.xlabel('Discount Rate')
 
plt.ylabel('Net Present Value')
 
plt.legend()
 
plt.show()
 

Output Graph

    0