Notas de clase sobre ingeniería economica avanzada usando Python
Juan David Velásquez Henao
jdvelasq@unal.edu.co
Universidad Nacional de Colombia, Sede Medellín
Facultad de Minas
Medellín, Colombia
Software utilizado
Este es un documento interactivo escrito como un notebook de Jupyter , en el cual se presenta un tutorial sobre finanzas corporativas usando Python. Los notebooks de Jupyter permiten incoporar simultáneamente código, texto, gráficos y ecuaciones. El código presentado en este notebook puede ejecutarse en los sistemas operativos Linux y OS X.
Haga click aquí para obtener instrucciones detalladas sobre como instalar Jupyter en Windows y Mac OS X.
Descargue la última versión de este documento a su disco duro; luego, carguelo y ejecutelo en línea en Try Jupyter!
>
Bibliografía
- [1] SAS/ETS 14.1 User's Guide, 2015.
- [2] hp 12c platinum financial calculator. User's guide.
- [3] HP Business Consultant II Owner's manual.
- [4] C.S. Park and G.P. Sharp-Bette. Advanced Engineering Economics. John Wiley & Sons, Inc., 1990.
Criterio del valor presente.
Criterio del valor futuro.
Criterio del equivalente uniforme periodico.
Nota 1. $r$ es la MARR y puede variar de periodo a periodo
Nota 2. El $PV(r)$ representa el excedente que se gana sobre la alternativa de invertir a una tasa de $r$.
Ejemplo.-- Calcule los indicadores para el siguiente flujo de efectivo, si la tasa de descuento es del 10%.
In [1]:
import cashflows as cf
In [2]:
cflo = cf.cashflow(const_value= 0,nper=6, spec = [(0, -1000),
(1, 400),
(2, 360),
(3, 320),
(4, 280),
(5, 240)])
cflo
Out[2]:
In [3]:
cf.timevalue(cflo = cflo,
marr = cf.nominal_rate([10]*6) )
Out[3]:
In [4]:
cf.timevalue(cflo = cflo,
marr = cf.nominal_rate([10]*6),
base_date = 5 )
Out[4]:
In [5]:
## la función npv puede recibir simultaneamente varios flujos de efectivo
cf.timevalue(cflo = [cflo,cflo,cflo],
marr = cf.nominal_rate([10]*6))
Out[5]:
In [6]:
# o varias tasas de interes
marr1 = cf.nominal_rate([10]*6)
marr2 = cf.nominal_rate([20]*6)
marr3 = cf.nominal_rate([30]*6)
cf.timevalue(cflo = cflo,
marr = [marr1, marr2, marr3])
Out[6]:
In [7]:
## o una tasa de descuento para cada flujo de efectivo
marr1 = cf.nominal_rate([10]*6)
marr2 = cf.nominal_rate([20]*6)
marr3 = cf.nominal_rate([30]*6)
cf.timevalue(cflo = [cflo, cflo, cflo],
marr = [marr1, marr2, marr3])
Out[7]:
Tasa Interna de Retorno (IRR).
$r^*$ -- tasa interna de retorno (irr). Es la tasa que hace el valor presente igual a cero.
Ejemplo.-- Calcule la irr para el ejemplo anterior.
In [8]:
cf.irr(cflo)
Out[8]:
Tasa Interna de Retorno Modificada.
$r_1$ -- tasa de reinversión.
$r_2$ -- tasa de financiamiento.
In [9]:
cf.mirr(cflo=cflo, finance_rate=0, reinvest_rate=0)
Out[9]:
In [10]:
## la función puede recibir varios flujos de fondos simulataneamente.
cf.irr([cflo, cflo, cflo])
Out[10]:
Se realiza variando una de las variables del problema para determinar el efecto en el indicador utilizado.
Ejemplo.-- Se tiene un proyecto con la siguiente información:
Construya la gráfica de sensibilidad del npv a la producción, el precio de venta y la inversión.
In [11]:
## se construye una función que recibe la información relevante y retorn el npv
def project(marr,
produccion,
precio,
costo,
inversion):
ingre = cf.cashflow(const_value=0,
nper=11,
spec = [(t, precio * produccion) if t > 0 else (0,0) for t in range(11)])
opera = cf.cashflow(const_value=0,
nper=11,
spec = [(t, costo) if t > 0 else (0,0) for t in range(11)])
inver = cf.cashflow(const_value=0,
nper=11,
spec = (0, inversion))
dep = cf.depreciation_sl(costs = cf.cashflow(const_value=0, nper=11, spec=(0, inversion)),
life = cf.cashflow(const_value=0, nper=11, spec=(0, 10)),
noprint = True)
antes = ingre - opera - inver - dep
desp = cf.after_tax_cashflow(antes,
tax_rate = cf.nominal_rate(const_value=[30] * 11))
neto = antes + desp
npv = cf.timevalue(cflo = neto,
marr = cf.nominal_rate([marr]*11))
return npv
In [12]:
project(10, 100, 10, 220, 2000)
Out[12]:
In [13]:
## resultados para diferentes valores de la MARR
x=[]
for i in [8, 10, 12]:
x.append(project( i, 100, 10, 220, 2000))
x
Out[13]:
In [14]:
## resultados para diferentes valores de la inversión
[project(10, 100, 10, 220, x) for x in [1600, 1800, 2000, 2200, 2400]]
Out[14]:
In [15]:
## resultados para diferentes valores del precio
[project(10, 100, x, 220, 2000) for x in [8, 9, 10, 11, 12]]
Out[15]:
In [16]:
import matplotlib.pyplot as plt
%matplotlib inline
In [17]:
precio = [8, 9, 10, 11, 12]
y = [project(0.10, 100, x, 220, 2000) for x in precio]
In [18]:
plt.plot(precio, y)
Out[18]:
Ejercicio.-- Haga sensibilidades al costo y a la producción, y grafíquelas.
In [ ]: