Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Search
About (/pages/acerca-de-mi.html)
Home Page (/index.html)
Archives (/archives.html)
Mi otro Blog (http://relopezbriega.com.ar/)
IAAR Book (https://iaarbook.github.io/)
2048 (/2048/)
Contacto (/pages/contacto.html)
Barbearia 5 de Maio
Barba com toalhas quentes
Barbearia
Site Rotas
Introducción
En el vertiginoso mundo actual de las finanzas (https://es.wikipedia.org/wiki/Finanzas); dónde la velocidad, frecuencia y volumen de los datos aumentan a un ritmo considerable; la
aplicación combinada de tecnología y software, junto con algoritmos avanzados y diferentes métodos para recopilar, procesar y analizar datos se ha vuelto fundamental para obtener
la información necesaria para una eficiente toma de decisiones. Es dentro de este contexto, que se viene produciendo un gran crecimento en la utilización de Python
(https://www.python.org/) dentro de la industria de las finanzas (https://es.wikipedia.org/wiki/Servicios_financieros).
Python (https://www.python.org/) se esta comenzando a utilizar ampliamente en diversos sectores de las finanzas (https://es.wikipedia.org/wiki/Finanzas), como la banca, la gestión
de inversiones, los seguros, e incluso en los bienes raíces; se utiliza principalmente para la construcción de herramientas que ayuden en la creación de modelos financieros
(https://en.wikipedia.org/wiki/Financial_modeling), gestión de riesgos (https://es.wikipedia.org/wiki/Gesti%C3%B3n_de_riesgos), y el comercio. Incluso las grandes corporaciones
financieras, como Bank of America (https://www.bankofamerica.com/) o JP Morgan (https://www.jpmorgan.com/pages/jpmorgan), estan comenzando a utilizar Python
(https://www.python.org/) para construir su infraestructura para la gestión de posiciones financieras, precios de activos
(https://es.wikipedia.org/wiki/Modelo_de_valoraci%C3%B3n_de_activos_financieros), gestión de riesgos (https://es.wikipedia.org/wiki/Gesti%C3%B3n_de_riesgos), sistemas de
comercio y comercio algoritmico (https://en.wikipedia.org/wiki/Algorithmic_trading).
https://relopezbriega.github.io/blog/2015/08/28/introduccion-a-finanzas-con-python/ 1/14
23/02/2023 14:21 Introducción a Finanzas con Python
Algunas de las razones que hacen de Python (https://www.python.org/) un lenguaje de programación (https://es.wikipedia.org/wiki/Lenguaje_de_programaci%C3%B3n) tan atractivo
en el mundo de las finanzas son:
Su simple sintaxis: Python (https://www.python.org/) es mundialmente conocido por lo fácil que resulta leerlo, muchas veces no existen casi diferencias entre seudo código
y Python (https://www.python.org/); tampoco suelen existir muchas diferencias entre expresar un algoritmo (https://es.wikipedia.org/wiki/Algoritmo) matematicamente o en
Python (https://www.python.org/).
Su integración: Otras de las características por la que Python (https://www.python.org/) es también famoso, es por su fácil integración con otros lenguajes de programación
(https://es.wikipedia.org/wiki/Lenguaje_de_programaci%C3%B3n). Generalmente, las grandes empresas suelen tener herramientas desarrolladas en distintos lenguajes de
programación (https://es.wikipedia.org/wiki/Lenguaje_de_programaci%C3%B3n); las características dinámicas de Python (https://www.python.org/), hacen que sea ideal
para unir todos esos distintos componentes en una sola gran aplicación. Python (https://www.python.org/) puede ser enlazado fácilmente a herramientas desarrollas en C
(https://es.wikipedia.org/wiki/C_(lenguaje_de_programaci%C3%B3n)), C++ (https://es.wikipedia.org/wiki/C%2B%2B) o Fortran (https://es.wikipedia.org/wiki/Fortran).
Eficiencia y productividad: Por último, otra de las características que hacen a Python (https://www.python.org/) tan atractivo, es que con él, se pueden lograr resultados de
calidad en una forma mucho más eficiente y productiva. La mayoría de sus módulos están ampliamente testeados y cuentan con el soporte de una amplia comunidad de
usuarios; sus características dinámicas e interactivas lo hacen ideal para el análisis exploratorio de datos facilitando los análisis financieros. También es sabido, que la
elegancia de su sintaxis hace que se necesiten mucho menos líneas de código para desarrollar un programa en Python (https://www.python.org/) que en casi cualquier otro
lenguaje de programación (https://es.wikipedia.org/wiki/Lenguaje_de_programaci%C3%B3n).
Principales librerías
Las principales librerías que vamos a utilizar para realizar tareas de analisis financiero con Python (https://www.python.org/) son muchas de las que ya he venido hablando en
anteriores artículos; principalmente:
Pandas (https://pandas.pydata.org/): La cual fue diseñada desde un comienzo para facilitar el análisis de datos financieros, principalmente las series de tiempo
(https://es.wikipedia.org/wiki/Serie_temporal) propias del mercado cambiario de acciones. Con las estructuras de datos (https://es.wikipedia.org/wiki/Estructura_de_datos)
que nos brinda esta librería se vuelve sumamente fácil modelar y resolver problemas financieros.
Numpy (https://www.numpy.org/): El principal modulo matemático que nos ofrece Python (https://www.python.org/), en el no solo vamos a encontrar las siempre prácticas
matrices (https://es.wikipedia.org/wiki/Matriz_(matem%C3%A1ticas)) que facilitan en sobremanera el manejo de información numérica; sino que también vamos a poder
encontrar un gran número de funciones matemáticas.
Matplotlib (https://matplotlib.org/): La siempre vigente librería para realizar gráficos en Python (https://www.python.org/).
statsmodels (https://statsmodels.sourceforge.net/): Si de estadística se trata, no hay como esta librería para realizar cualquier tipo de analisis estadístico.
PuLP (https://pythonhosted.org//PuLP/): La cual nos permite crear modelos de programación lineal (https://es.wikipedia.org/wiki/Programaci%C3%B3n_lineal) en forma
muy sencilla.
Quandl (https://www.quandl.com/help/python): Este módulo nos permite interactuar fácilmente con la API
(https://es.wikipedia.org/wiki/Interfaz_de_programaci%C3%B3n_de_aplicaciones) de quandl.com (https://www.quandl.com/) para obtener en forma muy sencilla todo tipo de
información financiera.
Zipline (https://www.zipline.io/): Zipline (https://www.zipline.io/) es una librería para el comercio algoritmico (https://en.wikipedia.org/wiki/Algorithmic_trading); esta basada
en eventos y trata de aproximarse lo más cerca posible a como operan los verdades sistemas de comercio electrónico de las principales bolsas del mundo. Zipline
(https://www.zipline.io/) es una de las principales tecnologías detrás del popular sitio quantopian.com (https://www.quantopian.com/), la comunidad web que pone a prueba
distintos algoritmos (https://es.wikipedia.org/wiki/Algoritmo) de comercio algoritmico (https://en.wikipedia.org/wiki/Algorithmic_trading).
Bueno, pero basta de introducciones y pasamos a describir los principales conceptos financieros y como podemos calcularlos con la ayuda de Python (https://www.python.org/), ya
que el tiempo es dinero!!.
Valor Futuro
El valor futuro (https://es.wikipedia.org/wiki/Valor_tiempo_del_dinero) o FV (por sus siglas en inglés), nos indica el valor en el futuro que tendrá el dinero depositado hoy en una
cuenta bancaria que nos pague intereses. El valor futuro (https://es.wikipedia.org/wiki/Valor_tiempo_del_dinero) de USD X depositado hoy en una cuenta que paga r% de interés
anual y que es dejado en la cuenta durante n años es X ∗ (1 + r)n . El valor futuro (https://es.wikipedia.org/wiki/Valor_tiempo_del_dinero) es nuestro primer ejemplo de interés
compuesto (https://es.wikipedia.org/wiki/Inter%C3%A9s_compuesto), es decir, el principio de que podemos ganar intereses sobre los intereses. De la definición que dimos del valor
futuro (https://es.wikipedia.org/wiki/Valor_tiempo_del_dinero), podemos obtener su expresión matemática:
n
F V = X ∗ (1 + r)
Como podemos ver, su cálculo es bastante simple. Veamos un ejemplo de como calcular el FV de un depósito de USD 1000 a 3 años y con una tasa de interés del 6% anual.
https://relopezbriega.github.io/blog/2015/08/28/introduccion-a-finanzas-con-python/ 2/14
23/02/2023 14:21 Introducción a Finanzas con Python
In [1]:
# graficos embebidos
%matplotlib inline
In [2]:
# Ejemplo FV con python
# $1000 al 6% anual por 3 años.
# importando librerías
import numpy as np
import matplotlib.pyplot as plt
x = -1000 # deposito
r = .06 # tasa de interes
n = 3 # cantidad de años
In [3]:
# Controlando el resultado
x * (1 + r)**n
Out[3]:
-1191.016
In [4]:
# Graficando las funciones con interes de 6 y 12 % a 20 años.
t = list(range(0, 21))
def fv6(num):
return np.fv(pv=-1000, rate=r, pmt=0, nper=num)
def fv12(num):
return np.fv(pv=-1000, rate=.12, pmt=0, nper=num)
In [5]:
plt.title("Graficando FV 6 y 12 %")
plt.plot(t, fv6(t), label="interes 6 %")
plt.plot(t, fv12(t), label="interes 12 %")
plt.legend(loc='upper left')
plt.show()
Al graficar dos funciones de FV (https://es.wikipedia.org/wiki/Valor_tiempo_del_dinero), una con una tasa de interes del 6% y otra con una tasa más alta del 12%, podemos ver que
el valor futuro (https://es.wikipedia.org/wiki/Valor_tiempo_del_dinero) suele ser bastante sensitivo a los cambios en la tasa de interes, pequeñas variaciones en ella pueden generar
grandes saltos a lo largo del tiempo.
Anualidades
Como podemos ver en el ejemplo anterior, la función fv de Numpy (https://www.numpy.org/) tiene varios parámetros, esto es así, porque existen otros casos en los que el cálculo del
valor futuro (https://es.wikipedia.org/wiki/Valor_tiempo_del_dinero) se puede volver más complicado; es aquí cuando comenzamos a hablar de anulidades. La idea de las
anualidades es no solo quedarse con el cálculo simple de cuanto me va a rendir un solo deposito inicial a fin de un período, sino también poder calcular el valor futuro
(https://es.wikipedia.org/wiki/Valor_tiempo_del_dinero) de múltiples depósitos que se reinvierten a una misma tasa de interés. Supongamos por ejemplo que queremos hacer 10
depósitos anuales de USD 1000 cada uno, los cuales vamos a ir depositando al comienzo de cada año. ¿Cuál sería en este caso el valor futuro
(https://es.wikipedia.org/wiki/Valor_tiempo_del_dinero) de nuestra anualidad luego del décimo año?. Ayudémonos de Python (https://www.python.org/) para calcular la respuesta!
In [6]:
# Calculando el valor de la anualidad con 6% anual
x = -1000 # valor de depositos
r = .06 # tasa de interes
n = 10 # cantidad de años
Aquí comenzamos con un valor presente (https://es.wikipedia.org/wiki/Valor_tiempo_del_dinero)(PV) de cero, luego realizamos el primer deposito de USD 1000 al comienzo del
https://relopezbriega.github.io/blog/2015/08/28/introduccion-a-finanzas-con-python/ 3/14
23/02/2023 14:21 Introducción a Finanzas con Python
primer año y continuamos con los sucesivos depósitos al comienzo de cada uno de los restantes años. Para poder entender mejor como funciona la función fv de Numpy
(https://www.numpy.org/) voy a explicar un poco más sus parámetros.
pv = este parametro es el valor presente (https://es.wikipedia.org/wiki/Valor_tiempo_del_dinero) de nuestra inversión o anualidad; en nuestro ejemplo empezamos con un
valor de cero; ya que luego vamos a ir realizando los diferentes depósitos de USD 1000.
rate = es la tasa efectiva de interés que nos rendirá la anualidad por cada período.
nper = Es el número de períodos. Tener en cuenta que si aquí estamos utilizando como unidad de medida de años, nuestra tasa de interés deberá estar expresada en la
misma unidad.
pmt = El valor de los depósitos que vamos a ir invirtiendo en nuestra anualidad. En nuestro caso el valor de -1000 refleja el importe que vamos a ir depositando año a año.
(se expresa con signo negativo, ya que un deposito implica una salida de dinero).
when = Este parámetro nos dice cuando se van a hacer efectivos nuestros depósitos, ya que el resultado puede ser muy distinto si realizamos el deposito al
comienzo(como en nuestro ejemplo) o al final de cada período.
In [7]:
# mismo caso pero con la diferencia de que los depositos se
# realizan al final de cada período.
FV = np.fv(pv=0, rate=r, nper=n, pmt=x, when='end')
FV
Out[7]:
13180.79494238091
En este último ejemplo, el valor es menor por las perdidas relativas de interés que vamos teniendo al realizar los depósitos al final de cada período en lugar de al comienzo.
Valor Presente
El valor presente (https://es.wikipedia.org/wiki/Valor_tiempo_del_dinero) o PV (por sus siglas en inglés), nos indica el valor que tienen hoy un pago o pagos que recibiremos en el
futuro. Supongamos por ejemplo que sabemos que un tío nos va a regalar USD 1000 dentro de 3 años porque somos su sobrino favorito, si también sabemos que un banco nos
pagaría un 6% de interés por los depósitos en una caja de ahorro, podríamos calcular el valor presente (https://es.wikipedia.org/wiki/Valor_tiempo_del_dinero) que tendría ese pago
futuro de nuestro tío en el día de hoy. La formula para calcular el valor presente (https://es.wikipedia.org/wiki/Valor_tiempo_del_dinero) la podemos derivar de la que utilizamos para
calcular el valor futuro (https://es.wikipedia.org/wiki/Valor_tiempo_del_dinero) y se expresaría del siguiente modo:
fv
PV =
n
(1 + r)
Aplicando la esta formula sobre los datos con que contamos, podríamos calcular el valor de hoy de la promesa de pago de USD 1000 de nuestro tío, los que nos daría un valor
presente (https://es.wikipedia.org/wiki/Valor_tiempo_del_dinero) de USD 839.62 como se desprende del siguiente cálculo.
In [8]:
fv = 1000 # valor futuro
r = .06 # tasa de interes
n = 3 # cantidad de años
fv / ((1 + r)**n)
Out[8]:
839.6192830323018
In [9]:
# usando la funcion pv de numpy
PV = np.pv(fv=fv, rate=r, nper=n, pmt=0)
PV
Out[9]:
-839.6192830323018
Estos USD 839.62 en realidad lo que representan es que si nosotros hoy depositáramos en la caja de ahorro de un banco que nos pague 6% anual de interés el importe de USD
839.62, obtendríamos dentro de los 3 años los mismos USD 1000 que nos ofreció dar nuestro tío dentro de 3 años; o lo que es lo mismo que decir que el valor futuro
(https://es.wikipedia.org/wiki/Valor_tiempo_del_dinero) dentro de 3 años de USD 839.62 son los USD 1000 de nuestro querido tío.
In [10]:
# Calculando el valor futuro de los 839.62
np.fv(pv=-839.62, rate=r, nper=n, pmt=0)
Out[10]:
1000.00085392
Al igual que en el caso del valor futuro (https://es.wikipedia.org/wiki/Valor_tiempo_del_dinero), aquí también podemos encontrarnos con las anualidades, es decir, una serie de pagos
iguales que recibiremos. El valor presente (https://es.wikipedia.org/wiki/Valor_tiempo_del_dinero) de una anualidad nos va a decir el valor que tienen hoy los futuros pagos de la
anualidad. Así, por ejemplo si nuestro tío en lugar de regalarnos USD 1000 dentro de 3 años, decide darnos USD 250 al final de cada año durante 5 años; y asumiendo la misma
tasa de interés que nos ofrece el banco de 6% anual. El valor presente de esta anualidad sería USD 1053.09.
In [11]:
# Calculando el valor de la anualidad
PV = np.pv(fv=0, rate=r, nper=5, pmt=-250, when='end')
PV
Out[11]:
1053.090946391429
https://relopezbriega.github.io/blog/2015/08/28/introduccion-a-finanzas-con-python/ 4/14
23/02/2023 14:21 Introducción a Finanzas con Python
Uno de los puntos sobre el que hacer más foco al calcular el valor presente (https://es.wikipedia.org/wiki/Valor_tiempo_del_dinero) de un flujo de fondos futuro, es el de como elegir
la tasa para descontar estos fondos, ya que la tasa que utilicemos es la pieza clave para la exactitud de nuestros cálculos. El principio básico que nos debe guiar la elegir la tasa de
descuento es el de tratar de elegir que sea apropiada al riesgo y la duración de los flujos de fondos que estamos descontando. En el ejemplo que venimos viendo, como sabemos
que nuestro tío es una persona muy solvente y de palabra, podemos considerar que no existe mucho riesgo en ese flujo de fondos, por lo que utilizar la tasa de interés de una caja
de ahorro parece ser un buen criterio para descontar ese flujo. En los casos de las empresas, las mismas suelen utilizar el costo del capital como una tasa de descuento apropiada
para descontar el flujo futuro de sus inversiones o proyectos.
El Valor Presente Neto (https://es.wikipedia.org/wiki/Valor_actual_neto) o NPV (por sus siglas en inglés) de una serie de flujos futuros de fondos es su igual a su valor presente
(https://es.wikipedia.org/wiki/Valor_tiempo_del_dinero) menos el importe de la inversión inicial necesaria para obtener esos mismos flujos de fondos futuros. Su expresión
matemática sería la siguiente:
n
Vt
NPV = ∑ − I0
t
(1 + r)
t=1
donde, Vt representa el flujo de fondos de cada período t ; I0 es el valor inicial de la inversión; r es la tasa de descuento utilizada; y n es la cantidad de períodos considerados.
Volviendo al ejemplo que veníamos utilizando de nuestro generoso tío, esta vez no ofrece pagarnos USD 500 al final del primer año, USD 750 al final del segundo año, USD 1000 al
final del tercer año, USD 1250 al final del cuarto año y USD 500 al final del quinto año. El NPV (https://es.wikipedia.org/wiki/Valor_actual_neto) de este flujo de fondos sería de USD
3342.56.
In [12]:
# Calculando el valor presente neto.
NPV = np.npv(rate=.06, values=[0, 500, 750, 1000, 1250, 500])
NPV
Out[12]:
3342.560891731083
El Valor Presente Neto (https://es.wikipedia.org/wiki/Valor_actual_neto) es sumamente utilizado en los análisis financieros, principalmente para evaluar inversiones o proyectos.
Como regla general se considera que si el NPV (https://es.wikipedia.org/wiki/Valor_actual_neto) de un proyecto o inversión es positivo, se trata de un proyecto rentable en el que
deberíamos invertir; en cambio si el NPV (https://es.wikipedia.org/wiki/Valor_actual_neto) es negativo estamos ante un mal negocio.
Si por ejemplo, tendríamos que invertir hoy USD 4000 para poder obtener un flujo de fondos de USD 500 al final del primer año, USD 750 al final del segundo año, USD 1000 al final
del tercer año, USD 1250 al final del cuarto año y USD 500 al final del quinto año; estaríamos haciendo un mal negocio, ya que como sabemos el valor presente de esos flujos de
fondos es de USD 3342.56, un valor mucho menor a los USD 4000 que deberíamos invertir.
In [13]:
# Calculando el NPV de la inversión de 4000.
NPV = np.npv(rate=.06, values=[-4000, 500, 750, 1000, 1250, 500])
NPV
Out[13]:
-657.4391082689172
En el ejemplo podemos ver que al utilizar la función npv de Numpy (https://www.numpy.org/), el primer valor en la lista de valores que le pasamos al parámetro values debe ser el
monto de la inversión inicial, y como implica un desembolso de dinero, su signo es negativo.
Si en lugar de tener que invertir USD 4000, tendríamos que invertir USD 3000 para obtener el mismo flujo de fondos, ya estaríamos realizando una buena inversión, con NPV
(https://es.wikipedia.org/wiki/Valor_actual_neto) positivo.
In [14]:
# Calculando el NPV de la inversión de 3000.
NPV = np.npv(rate=.06, values=[-3000, 500, 750, 1000, 1250, 500])
NPV
Out[14]:
342.56089173108285
Al igual que como sucede con el Valor Presente Neto (https://es.wikipedia.org/wiki/Valor_actual_neto), podemos utilizar a la tasa interna de retorno
(https://es.wikipedia.org/wiki/Tasa_interna_de_retorno) para tomar decisiones financieras. Aquí la regla general es que, al momento de decidir entre diferentes inversiones,
deberíamos elegir aquella con una tasa interna de retorno (https://es.wikipedia.org/wiki/Tasa_interna_de_retorno) más alta; ya que es la que en menos tiempo no va a devolver
nuestra inversión inicial.
https://relopezbriega.github.io/blog/2015/08/28/introduccion-a-finanzas-con-python/ 5/14
23/02/2023 14:21 Introducción a Finanzas con Python
Veamos un ejemplo, supongamos que tenemos USD 1000 para invertir, y que podemos decidir invertir ese dinero en una compañía que nos va a pagar USD 300 al final de cada uno
de los próximos cuatro años; o por otra lado, podemos invertir el dinero en una caja de ahorro de un banco que nos va a pagar 5% anual. ¿Dónde deberíamos invertir nuestro
dinero?
In [15]:
# Calculando la tasa interna de retorno de la inversion en la compañía
IRR = np.irr([-1000, 300, 300, 300, 300])
IRR * 100
Out[15]:
7.713847295208343
Al calcular la IRR (https://es.wikipedia.org/wiki/Tasa_interna_de_retorno) de la inversión que podríamos hacer en la compañía, vemos que nos da un valor de 7.71%; esta tasa es
más alta que la tasa del 5% que nos ofrece el banco por el deposito en su caja de ahorro, por lo que deberíamos decidir invertir nuestro dinero en la compañía en lugar de en el
banco.
La IRR graficamente
Como se desprende de su definición, la tasa interna de retorno (https://es.wikipedia.org/wiki/Tasa_interna_de_retorno) es la tasa que hace que el NPV
(https://es.wikipedia.org/wiki/Valor_actual_neto) se haga cero, por lo que si nos propusiesemos graficar el NPV (https://es.wikipedia.org/wiki/Valor_actual_neto) en función de la tasa
de descuento, podríamos encontrar a simple vista, cual es la IRR (https://es.wikipedia.org/wiki/Tasa_interna_de_retorno) de un determinado flujo de fondos. Veamos un ejemplo,
graficando el flujo de fondos con el que trabajamos anteriormente.
In [16]:
# Graficando el NPV en función de la tasa de descuento
def npv_irr(tasas):
result = []
for tasa in tasas:
result.append(np.npv(tasa/100,[-1000, 300, 300, 300, 300] ))
return result
tasas = list(range(14))
Como podemos ver en el gráfico, la función de NPV (https://es.wikipedia.org/wiki/Valor_actual_neto), se hace cero en aproximadamente 7.71%; es decir, el valor de la IRR
(https://es.wikipedia.org/wiki/Tasa_interna_de_retorno) para ese flujo de fondos.
https://relopezbriega.github.io/blog/2015/08/28/introduccion-a-finanzas-con-python/ 6/14
23/02/2023 14:21 Introducción a Finanzas con Python
In [17]:
# Importando pandas y datetime
import pandas as pd
import pandas_datareader.data as web
import datetime as dt
In [18]:
msft[:3]
Out[18]:
Date
In [19]:
aapl[:3]
Out[19]:
Date
In [20]:
# Seleccionando solo el Adj Close price de Enero 2014
msft01 = msft['2014-01'][['Close']]
aapl01 = aapl['2014-01'][['Close']]
msft01[:3]
Out[20]:
Close
Date
2014-01-02 37.160000
2014-01-03 36.910000
2014-01-06 36.130001
In [21]:
aapl01.head() # head() nos muestra los primeros 5 registros
Out[21]:
Close
Date
2014-01-02 79.018570
2014-01-03 77.282860
2014-01-06 77.704285
2014-01-07 77.148575
2014-01-08 77.637146
https://relopezbriega.github.io/blog/2015/08/28/introduccion-a-finanzas-con-python/ 7/14
23/02/2023 14:21 Introducción a Finanzas con Python
In [22]:
# tambien se puede seleccionar un rango de tiempo
msft['2014-02':'2014-02-13'] # desde el 1 al 13 de febrero
Out[22]:
Date
In [23]:
# combinando ambos resultados
close = pd.concat([msft01, aapl01], keys=['MSFT', 'AAPL'])
close[:5]
Out[23]:
Close
Date
2014-01-03 36.910000
2014-01-06 36.130001
2014-01-07 36.410000
2014-01-08 35.759998
In [24]:
# seleccionando los primeros 5 registros de AAPL
close.loc['AAPL'][:5]
Out[24]:
Close
Date
2014-01-02 79.018570
2014-01-03 77.282860
2014-01-06 77.704285
2014-01-07 77.148575
2014-01-08 77.637146
In [25]:
# insertando una nueva columna con el simbolo
msft.insert(0, 'Symbol', 'MSFT')
aapl.insert(0, 'Symbol', 'AAPL')
msft.head()
Out[25]:
Date
https://relopezbriega.github.io/blog/2015/08/28/introduccion-a-finanzas-con-python/ 8/14
23/02/2023 14:21 Introducción a Finanzas con Python
In [26]:
# concatenando toda la información y reseteando el indice
combinado = pd.concat([msft, aapl]).sort_index()
datos_todo = combinado.reset_index()
datos_todo.head()
Out[26]:
In [27]:
# Armando una tabla pivot del precio de cierre
pivot = datos_todo.pivot(index='Date', columns='Symbol',
values='Close')
pivot.head()
Out[27]:
Date
In [28]:
# Obteniendo datos de multiples empresas
def all_stocks(symbols, start, end):
def data(symbols):
return web.DataReader(symbols, 'yahoo', start, end)
datas = map(data, symbols)
return pd.concat(datas, keys=symbols, names=['symbols','Date'])
simbolos = ['AAPL','MSFT','GOOG','IBM']
symbols Date
In [29]:
all_data.loc['GOOG'].head() # información de google
Out[29]:
Date
https://relopezbriega.github.io/blog/2015/08/28/introduccion-a-finanzas-con-python/ 9/14
23/02/2023 14:21 Introducción a Finanzas con Python
In [30]:
# Graficando los datos.
solo_cierre = all_data[['Close']].reset_index()
pivot_cierre = solo_cierre.pivot('Date', 'symbols', 'Close')
pivot_cierre.head()
Out[30]:
Date
In [31]:
# Graficando la información de Apple
plot=pivot_cierre['AAPL'].plot(figsize=(12,8))
In [32]:
# Graficando todos
plot = pivot_cierre.plot(figsize=(12,8))
Como podemos ver Pandas (https://pandas.pydata.org/) es una librería muy versátil, con ella podemos hacer todo tipo de manipulaciones de datos, desde obtener los datos desde la
web hasta realizar concatenaciones, tablas pivot o incluso realizar gráficos.
Con esto termino esta introducción a finanzas con Python (https://www.python.org/); los dejo para que se entretengan con sus propios ejemplos, a practicar!
Saludos!
https://relopezbriega.github.io/blog/2015/08/28/introduccion-a-finanzas-con-python/ 10/14
23/02/2023 14:21 Introducción a Finanzas con Python
Este post fue escrito utilizando IPython notebook. Pueden descargar este notebook
(https://github.com/relopezbriega/relopezbriega.github.io/blob/master/downloads/pyFinance.ipynb) o ver su version estática en nbviewer
(https://nbviewer.ipython.org/github/relopezbriega/relopezbriega.github.io/blob/master/downloads/pyFinance.ipynb).
Este articulo fue escrito utilizando Jupyter notebook (https://github.com/relopezbriega/blog/tree/master/content/notebooks/pyFinance.ipynb). Presionar aquí para la versión
interactiva: launch binder (https://mybinder.org/v2/gh/relopezbriega/blog/master?filepath=content/notebooks/pyFinance.ipynb)
Posted by Raul E. Lopez Briega vie 28 agosto 2015 python (https://relopezbriega.github.io/tag/python.html) finanzas (https://relopezbriega.github.io/tag/finanzas.html) programacion
(https://relopezbriega.github.io/tag/programacion.html) analisis de datos (https://relopezbriega.github.io/tag/analisis-de-datos.html)
Tweet
Like Share 8 people like this. Sign Up to see what your friends like.
Comments
13 Comments
1 Login
Name
hola
esta muy bueno tu post
tenía una duda respecto a la extracción de la información
financiera desde la web
yo estoy trabajando un modelo de high frequency trading
lo estoy trabajndo en R y necesito los datos por segundo en
tiempo real
con la función que llamas veo que se obtiene la información
diraria
y mi duda es respecto a eso
es decir, ¿podré obtener los datos por segundo de un dia del
precio de una acción cualquiera ??
muchas gracias
0 0 Reply • Share ›
− ⚑
J
Jose Arcenio Lopez
4 years ago edited
0 0 Reply • Share ›
Rodrigo Agurto − ⚑
4 years ago
0 0 Reply • Share ›
https://relopezbriega.github.io/blog/2015/08/28/introduccion-a-finanzas-con-python/ 11/14
23/02/2023 14:21 Introducción a Finanzas con Python
0 0 Reply • Share ›
0 0 Reply • Share ›
0 0 Reply • Share ›
Andy Jimenez − ⚑
5 years ago edited
0 0 Reply • Share ›
− ⚑
J
Jennifer
> Raul Lopez Briega
5 years ago
import pandas as pd
import pandas_datareader.data as web
import datetime as dt
Me da error:
File "<ipython-input-8-f36c92d0402b>",
line 2, in <module>
import pandas_datareader.data as web
ModuleNotFoundError: No module
named 'pandas_datareader'
¿Sabes que puedo hacer para que me
funcione?
Muchas gracias.
0 0 Reply • Share ›
Most Popular
Probabilidad y Estadística con Python (https://relopezbriega.github.io/blog/2015/06/27/probabilidad-y-estadistica-con-python/)
Ecuaciones Diferenciales con Python (https://relopezbriega.github.io/blog/2016/01/10/ecuaciones-diferenciales-con-python/)
https://relopezbriega.github.io/blog/2015/08/28/introduccion-a-finanzas-con-python/ 12/14
23/02/2023 14:21 Introducción a Finanzas con Python
Algebra lineal con Python (https://relopezbriega.github.io/blog/2015/06/14/algebra-lineal-con-python/)
Expresiones regulares con Python (https://relopezbriega.github.io/blog/2015/07/19/expresiones-regulares-con-python/)
Machine Learning con Python (https://relopezbriega.github.io/blog/2015/10/10/machine-learning-con-python/)
Subscribe
Recent Posts
Modelos basados en Agentes con Python (https://relopezbriega.github.io/blog/2020/08/09/modelos-basados-en-agentes-con-python/)
Introducción al pensamiento lógico con Python (https://relopezbriega.github.io/blog/2020/07/12/introduccion-al-pensamiento-logico-con-python/)
Sistemas dinámicos, Complejidad y Caos con Python (https://relopezbriega.github.io/blog/2020/03/26/sistemas-dinamicos-complejidad-y-caos-con-python/)
Fractales con Python (https://relopezbriega.github.io/blog/2020/03/24/fractales-con-python/)
Jugando la Copa América con Python (https://relopezbriega.github.io/blog/2019/06/09/jugando-la-copa-america-con-python/)
Categories
Algebra (https://relopezbriega.github.io/category/algebra.html)
Analisis de datos (https://relopezbriega.github.io/category/analisis-de-datos.html)
Calculo (https://relopezbriega.github.io/category/calculo.html)
Finanzas (https://relopezbriega.github.io/category/finanzas.html)
IA (https://relopezbriega.github.io/category/ia.html)
Machine Learning (https://relopezbriega.github.io/category/machine-learning.html)
Matematica (https://relopezbriega.github.io/category/matematica.html)
Pobabilidad y Estadistica (https://relopezbriega.github.io/category/pobabilidad-y-estadistica.html)
Programacion (https://relopezbriega.github.io/category/programacion.html)
Redes Neuronales (https://relopezbriega.github.io/category/redes-neuronales.html)
Tags
python (https://relopezbriega.github.io/tag/python.html), incertidumbre (https://relopezbriega.github.io/tag/incertidumbre.html), matematica
(https://relopezbriega.github.io/tag/matematica.html), pensamiento (https://relopezbriega.github.io/tag/pensamiento.html), inteligencia (https://relopezbriega.github.io/tag/inteligencia.html),
modelos (https://relopezbriega.github.io/tag/modelos.html), ABM (https://relopezbriega.github.io/tag/abm.html), Mesa (https://relopezbriega.github.io/tag/mesa.html), falacias
(https://relopezbriega.github.io/tag/falacias.html), logica (https://relopezbriega.github.io/tag/logica.html), sistemas dinamicos (https://relopezbriega.github.io/tag/sistemas-dinamicos.html),
caos (https://relopezbriega.github.io/tag/caos.html), fractales (https://relopezbriega.github.io/tag/fractales.html), programacion (https://relopezbriega.github.io/tag/programacion.html), futbol
(https://relopezbriega.github.io/tag/futbol.html), copa america (https://relopezbriega.github.io/tag/copa-america.html), Machine Learning (https://relopezbriega.github.io/tag/machine-
learning.html), binario (https://relopezbriega.github.io/tag/binario.html), numeros (https://relopezbriega.github.io/tag/numeros.html), decimales
(https://relopezbriega.github.io/tag/decimales.html), multiplicar (https://relopezbriega.github.io/tag/multiplicar.html), sumar (https://relopezbriega.github.io/tag/sumar.html), restar
(https://relopezbriega.github.io/tag/restar.html), dividir (https://relopezbriega.github.io/tag/dividir.html), informacion (https://relopezbriega.github.io/tag/informacion.html), entropia
(https://relopezbriega.github.io/tag/entropia.html), bit (https://relopezbriega.github.io/tag/bit.html), redundancia (https://relopezbriega.github.io/tag/redundancia.html), shannon
(https://relopezbriega.github.io/tag/shannon.html), estadistica (https://relopezbriega.github.io/tag/estadistica.html), probabilidad (https://relopezbriega.github.io/tag/probabilidad.html),
boosting (https://relopezbriega.github.io/tag/boosting.html), xgboost (https://relopezbriega.github.io/tag/xgboost.html), adaboost (https://relopezbriega.github.io/tag/adaboost.html),
gradientboost (https://relopezbriega.github.io/tag/gradientboost.html), analisis de datos (https://relopezbriega.github.io/tag/analisis-de-datos.html), Inteligencia Artificial
(https://relopezbriega.github.io/tag/inteligencia-artificial.html), TensorFlow (https://relopezbriega.github.io/tag/tensorflow.html), Redes Neuronales (https://relopezbriega.github.io/tag/redes-
https://relopezbriega.github.io/blog/2015/08/28/introduccion-a-finanzas-con-python/ 13/14
23/02/2023 14:21 Introducción a Finanzas con Python
neuronales.html), distribuciones (https://relopezbriega.github.io/tag/distribuciones.html), Monte-Carlo (https://relopezbriega.github.io/tag/monte-carlo.html), MCMC
(https://relopezbriega.github.io/tag/mcmc.html), Metropolis (https://relopezbriega.github.io/tag/metropolis.html), Bayes (https://relopezbriega.github.io/tag/bayes.html), inferencia
(https://relopezbriega.github.io/tag/inferencia.html), optimizacion (https://relopezbriega.github.io/tag/optimizacion.html), scipy (https://relopezbriega.github.io/tag/scipy.html), cvxopt
(https://relopezbriega.github.io/tag/cvxopt.html), pulp (https://relopezbriega.github.io/tag/pulp.html), visualizaciones (https://relopezbriega.github.io/tag/visualizaciones.html), series de
tiempo (https://relopezbriega.github.io/tag/series-de-tiempo.html), finanzas (https://relopezbriega.github.io/tag/finanzas.html), bokeh (https://relopezbriega.github.io/tag/bokeh.html), folium
(https://relopezbriega.github.io/tag/folium.html), seaborn (https://relopezbriega.github.io/tag/seaborn.html), matplotlib (https://relopezbriega.github.io/tag/matplotlib.html), algebra
(https://relopezbriega.github.io/tag/algebra.html), matrices (https://relopezbriega.github.io/tag/matrices.html), recomendaciones (https://relopezbriega.github.io/tag/recomendaciones.html),
Sobreajuste (https://relopezbriega.github.io/tag/sobreajuste.html), calculo (https://relopezbriega.github.io/tag/calculo.html), ecuaciones diferenciales
(https://relopezbriega.github.io/tag/ecuaciones-diferenciales.html), vectores (https://relopezbriega.github.io/tag/vectores.html), derivada (https://relopezbriega.github.io/tag/derivada.html),
integral (https://relopezbriega.github.io/tag/integral.html), derivadas parciales (https://relopezbriega.github.io/tag/derivadas-parciales.html), logaritmo
(https://relopezbriega.github.io/tag/logaritmo.html), limite (https://relopezbriega.github.io/tag/limite.html), infinito (https://relopezbriega.github.io/tag/infinito.html), complejos
(https://relopezbriega.github.io/tag/complejos.html), conjuntos (https://relopezbriega.github.io/tag/conjuntos.html), batman (https://relopezbriega.github.io/tag/batman.html), regex
(https://relopezbriega.github.io/tag/regex.html), funcional (https://relopezbriega.github.io/tag/funcional.html), pi (https://relopezbriega.github.io/tag/pi.html), map-reduce
(https://relopezbriega.github.io/tag/map-reduce.html)
Social
Atom (/atom.xml)
twitter (https://twitter.com/relopezbriega)
linkedin (https://ar.linkedin.com/in/relopezbriega)
github (https://github.com/relopezbriega/)
Blogroll
Mi otro blog (http://relopezbriega.com.ar)
IAAR Book (https://iaarbook.github.io/)
Pelican (http://getpelican.com/)
Python.org (http://python.org/)
Jinja2 (http://jinja.pocoo.org/)
Follow @relopezbriega
Copyright © 2018 - Raul E. Lopez Briega - Powered by Pelican (https://getpelican.com)
https://relopezbriega.github.io/blog/2015/08/28/introduccion-a-finanzas-con-python/ 14/14