<SYSTEM_TASK:>
Given the following text description, write Python code to implement the functionality described below step by step
<END_TASK>
<USER_TASK:>
Description:
 Representación de flujos de caja y tasas de interés
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!
Contenido
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.
Step1:  Conversión de tasas de interés
Interés anticipado e interés vencido
Contenido
<img src="images/antxven.png" width=500>
Interés vencido
Step2:  Ejemplo.-- Si se desea obtener una tasa efectiva anual del 36%, ¿cuánto se deberá cobrar en forma anticipada anual para obenerla?
Step3:  Interés nominal e interés efectivo
Contenido
Interés nominal (r)
Step4:  Ejemplo.-- Convierta una tasa del 12% anual compuesto semestralmente a anual compuesto mensualmente.
Step5:  Ejemplo.-- Sea un interés nominal del 12% capitalizado mensualmente. Calcule
Step6:  Nomenclatura
Contenido
<img src="images/nomenclatura.png" width=600>
Ejercicios
Ejercicio.-- Cuál es la tasa efectiva anual equivalente a 15% N.A.M.V. (nominal anual mes vencido)?
Ejercicio.-- Cuál es la tasa efectiva anual equivalente a 23% N.A.T.A. (nominal anual trimestre anticipado)?
Ejercicio.-- Sea un interés nominal del 39.29% capitalizado mensualmente a cuánto equivale en términos semestrales? (R/ 6.15%)
Ejercicio.-- ¿Cuál es el valor futuro de \$ 609 dentro de 2 años a una tasa del 2% NATV? 
Ejercicio.-- ¿Cuál es el valor presente de un pago único de \$ 890 recibido dentro de 6 años a una tasa de 2.7% NATA?   
Ejercicio.-- ¿Qué cantidad de dinero se poseerá después de prestar \$ 2300 al 27% NAMA durante 3 años?
Ejercicio.-- ¿Cuál es la tasa efectiva semestral equivalente al 14% NMTA?
Ejercicio.-- ¿Cuánto dinero mensual se debe empezar a abonar hoy si se desea reunir \$ 28700 al final de 5 años y los ahorros rentan el 16%?
Ejercicio.--  Se decide ahorrar mensualmente \$ 900 los cuales depositará al principio de cada mes en una entidad financiera que paga un interés del 30%. ¿Cuánto habrá acumulado al cabo de 2 años?
Representación de tasas de interés usando cashflow
En la modelación financiera es común tener que representar tasas de interés que cambian en el tiempo. La librería cashflow permite realizar esta tarea. En la tabla que se presenta a continuación, la columna n  indica para que periodos se aplica el valor correspondiente de la tasa (columna rate). Por definición, la tasa para el periodo 0 siempre es 0.
Step7:  Ejemplo.-- Se va a tomar un crédito a 48 meses. La tasa inicial es del 3% y aumenta un punto cada año. Represente la tasa de interés.
Step8:  Representación de flujos genéricos de caja
cashflow también permite la representación de flujos de efectivo en forma similar (pero no igual) a las tasas de interés, pero en este caso las tuplas (time, value) representan valores puntuales en el tiempo.
Step9:  En algunos casos es necesario introducir patrones de flujo más complejos.
<ASSISTANT_TASK:>
Python Code:
import cashflows as cf
Explanation: Representación de flujos de caja y tasas de interés
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!
Contenido
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.
End of explanation
0.2 / (1 - 0.2)
Explanation: Conversión de tasas de interés
Interés anticipado e interés vencido
Contenido
<img src="images/antxven.png" width=500>
Interés vencido: se paga al final del periodo.  
$$F=P(1+r)$$
Interés anticipado: se paga al inicio del periodo (antes de su causación). En este caso surge una paradoja, que el interés se puede reinvertir a la misma tasa de interés (anticipadamente):
$$F = P + Pr_  + Pr_^2 + ...$$
La suma infinita anterior puede reescribirse como:
$$F=P \frac{1}{1 - r_*}$$
Igualando las dos ecuaciones anteriores:
$$\frac{1}{1 - r_}=1+r ~,~~ r=\frac{r_}{1 - r_} ~,~~ r_=\frac{r}{1 + r}$$  
Interés efectivo anual: 
$$r_a=\left[1+\left (\frac{r_}{1-r_}\right)\right]^n-1$$
cashflow tiene las funciones nom2eff() y eff2nom() para realizar las conversiones entre nominal (anticipado y vencido) y efectivo respectivamente.
Ejemplo.-- Se solicita un prestamo a un año con un interés anticipado del 20%. ¿Determine el interés efectivo pagado por el dinero?
End of explanation
0.36 / (1 + 0.36)
Explanation: Ejemplo.-- Si se desea obtener una tasa efectiva anual del 36%, ¿cuánto se deberá cobrar en forma anticipada anual para obenerla?
End of explanation
cf.iconv(nrate = 6.72, pyr =  2)  ## Banco 1
cf.iconv(nrate = 6.70, pyr =  4)  ## Banco 2 -- mejor opción 
cf.iconv(nrate = 6.65, pyr = 12)  ## Banco 3
## Otra forma
cf.iconv(nrate = [6.72, 6.79, 6.65], pyr = [2, 4, 12])
Explanation: Interés nominal e interés efectivo
Contenido
Interés nominal (r): expresado sobre una base anual para un número M de periodos de pago en el año. 
Interés efectivo por periodo de pago ($i$): representa el interés real para cada periodo de pago en el año.  
Interés efectivo anual ($i_a$): interés real para un periodo único de pago de un año.  
$$ i= \frac{r}{M},$$
$$i_\alpha = \left( \displaystyle 1 + \frac{r}{M}\right)^M - 1 $$
Ejemplo.-- Se está considerando abrir una cuenta de ahorros en uno de tres bancos. Cuál banco tienen la tasa de interés más favorable?
Banco #1: 6.72% anual, compuesto semestralmente
Banco #1: 6.70% anual, compuesto trimestralmente.
Banco #2: 6.65% anual, compuesto mensualmente.
End of explanation
erate, _ = cf.iconv(nrate = 12.0, pyr = 2) ## efectiva por año 
erate
nrate, _ = cf.iconv(erate = erate, pyr = 12)       ## nominal compuesta mensualmente
nrate
Explanation: Ejemplo.-- Convierta una tasa del 12% anual compuesto semestralmente a anual compuesto mensualmente.
End of explanation
## tasa efectiva mensual
0.12 / 12
## tasa efectiva trimestral
erate, _ = cf.iconv(nrate = 3 * 0.12 / 12, pyr = 3)
erate
## tasa efectiva anual
erate, _ = cf.iconv(nrate = 12.0, pyr = 12)
erate
Explanation: Ejemplo.-- Sea un interés nominal del 12% capitalizado mensualmente. Calcule:
Tasa efectiva mensual
Tasa efectiva trimestral
Tasa efectiva anual
<img src="images/tasa-nominal-efectiva.png" width=600>
End of explanation
cf.nominal_rate(const_value=10, start=(2000, 0), nper=8, pyr=4) 
cf.nominal_rate(const_value=10, start=(2000, 0), nper=8, pyr=6) 
spec = ((2000, 3), 10)
cf.nominal_rate(const_value=1, start=(2000, 0), nper=8, pyr=4, spec=spec) 
spec = [(3, 10), (6, 20)]
cf.nominal_rate(const_value=1, start=(2000, 0), nper=8, pyr=4, spec=spec) 
cf.nominal_rate(const_value=[10, 20]*10, pyr=4)  
Explanation: Nomenclatura
Contenido
<img src="images/nomenclatura.png" width=600>
Ejercicios
Ejercicio.-- Cuál es la tasa efectiva anual equivalente a 15% N.A.M.V. (nominal anual mes vencido)?
Ejercicio.-- Cuál es la tasa efectiva anual equivalente a 23% N.A.T.A. (nominal anual trimestre anticipado)?
Ejercicio.-- Sea un interés nominal del 39.29% capitalizado mensualmente a cuánto equivale en términos semestrales? (R/ 6.15%)
Ejercicio.-- ¿Cuál es el valor futuro de \$ 609 dentro de 2 años a una tasa del 2% NATV? 
Ejercicio.-- ¿Cuál es el valor presente de un pago único de \$ 890 recibido dentro de 6 años a una tasa de 2.7% NATA?   
Ejercicio.-- ¿Qué cantidad de dinero se poseerá después de prestar \$ 2300 al 27% NAMA durante 3 años?
Ejercicio.-- ¿Cuál es la tasa efectiva semestral equivalente al 14% NMTA?
Ejercicio.-- ¿Cuánto dinero mensual se debe empezar a abonar hoy si se desea reunir \$ 28700 al final de 5 años y los ahorros rentan el 16%?
Ejercicio.--  Se decide ahorrar mensualmente \$ 900 los cuales depositará al principio de cada mes en una entidad financiera que paga un interés del 30%. ¿Cuánto habrá acumulado al cabo de 2 años?
Representación de tasas de interés usando cashflow
En la modelación financiera es común tener que representar tasas de interés que cambian en el tiempo. La librería cashflow permite realizar esta tarea. En la tabla que se presenta a continuación, la columna n  indica para que periodos se aplica el valor correspondiente de la tasa (columna rate). Por definición, la tasa para el periodo 0 siempre es 0.
End of explanation
cf.nominal_rate(const_value = 3, 
                start = (2000, 0),
                nper = 48,  
                pyr = 12, 
                spec= [(12, 4),      # tasa para el año 2
                       (24, 5),      # tasa para el año 3
                       (36, 6)])     # tasa para el año 4) 
x = cf.nominal_rate(const_value = 3, 
                    start = (2000, 0),
                    nper = 48,  
                    pyr = 12, 
                    spec= [(12, 4),      # tasa para el año 2
                           (24, 5),      # tasa para el año 3
                           (36, 6)])     # tasa para el año 4) 
x[5] = 100
x
Explanation: Ejemplo.-- Se va a tomar un crédito a 48 meses. La tasa inicial es del 3% y aumenta un punto cada año. Represente la tasa de interés.
End of explanation
cf.cashflow(const_value=1,   # valor constante
            start=(2000, 0), # (periodo mayor, periodo menor)
            nper=8,          # número total de periodos
            pyr=4)           # número de periodos por año
## un valor puntual puede ser introducido mediante una tupla
spec = ((2000, 3), 10)  # ((major, minor), value)
cf.cashflow(const_value=1, start=(2000, 0), nper=8, pyr=4, spec=spec) 
cf.cashflow(const_value=1, start=(2000, 0), nper=8, pyr=4, spec=((2000, 3), 10))
spec = [((2000, 3), 10), ((2001, 3), 10)]
cf.cashflow(const_value=1, start=(2000, 0), nper=8, pyr=4, spec=spec) 
spec = (3, 10)
cf.cashflow(const_value=1, start=(2000, 0), nper=8, pyr=4, spec=spec) 
cf.cashflow(const_value=1, start=(2000, 0), nper=8, pyr=4, spec=(3, 10)) 
spec = [(3, 10), (7, 10)]
cf.cashflow(const_value=1, start=(2000, 0), nper=8, pyr=4, spec=spec) 
cf.cashflow(const_value=[10]*10, pyr=4) 
cf.cashflow(const_value=[-10]*4) 
## un flujo de caja es un objeto que puede guardarse 
## en una variable para usarse después
x = cf.cashflow(const_value=[0, 1, 2, 3], pyr=4)
x[3] = 10
x  
## es posible alterar y acceder a valores individuales 
## para cada periodo de tiempo usando []
x[3]
x[(0, 3)] = 0
x
x[(0,2)]  
abs(cf.cashflow(const_value=[-10]*4, pyr=4)) 
cf.cashflow(const_value=[1]*4, pyr=4) + cf.cashflow(const_value=[2]*4, pyr=4)
cf.cashflow(const_value=[6]*4, pyr=4) // cf.cashflow(const_value=[4]*4, pyr=4) 
x = cf.cashflow( const_value=[2]*4, pyr=4)
x += cf.cashflow( const_value=[3]*4, pyr=4)
x 
x = cf.cashflow( const_value=[6]*4, pyr=4)
x //= cf.cashflow( const_value=[4]*4, pyr=4)
x
x = cf.cashflow( const_value=[2]*4, pyr=4)
x *= cf.cashflow( const_value=[3]*4, pyr=4)
x 
x = cf.cashflow( const_value=[6]*4, pyr=4)
x -= cf.cashflow( const_value=[4]*4, pyr=4)
x
cf.cashflow( const_value=[2]*4, pyr=4) * cf.cashflow( const_value=[3]*4, pyr=4)
cf.cashflow( const_value=[6]*4, pyr=4) - cf.cashflow( const_value=[4]*4, pyr=4)
cf.cashflow( const_value=[6]*4, pyr=4).tolist()
cflo = cf.cashflow(const_value=[-10, 5, 0, 20] * 3, pyr=4)
cf.cfloplot(cflo)
Explanation: Representación de flujos genéricos de caja
cashflow también permite la representación de flujos de efectivo en forma similar (pero no igual) a las tasas de interés, pero en este caso las tuplas (time, value) representan valores puntuales en el tiempo.
End of explanation
cf.cashflow(const_value=[0, 1, 2, 2, 4, 5, 6, 7, 8])
## para  5 <= t < 10, el valor es $ 100, y 0 en el resto de los casos
cf.cashflow(const_value=0, nper=15, pyr=1, spec=[(t,100) for t in range(5,10)]) 
## un flujo escalonado
a = [(t, 100) for t in range( 1,  5)]
b = [(t, 150) for t in range( 6, 10)]
c = [(t, 200) for t in range(11, 13)]
cf.cashflow(const_value=0, nper=20, pyr=1, spec=a + b + c)
## flujo con gradiente geométrico (aumento del 5% por periodo)
cf.cashflow(const_value=0, nper=20, pyr=1, spec=[(t, 100 * 1.05 ** (t-5)) for t in range(5,10)])
Explanation: En algunos casos es necesario introducir patrones de flujo más complejos.
End of explanation
<END_TASK>