Uno de los elementos más importantes a la hora de ver los datos es poder visualizarlos correctamente. Para ello Python nos da más de una librería para realizar estas visualizaciones y realizar múltiples vistas de como están los datos.
Una de las librerías más fáciles de para ver la representación de los datos de cualquier valor dentro de la bolsa es mplfinance. Está librería es mucho menos conocida que otras como matplotlib, pero para ver los datos que tienes de forma rápida es mucho más sencilla y más rápida de entender.
Esta entrada está a modo de apuntes para que sea sencillo copiar y pegar los datos adaptándolos a vuestros propios datos, y que con solo tener esta pantalla delante se pueda rápidamente mostrar los datos. Utilizar el índice para ir directamente a la parte que os interese si ya conocéis la librería.
Instalación
La instalación de la librería mplfinance es como cualquier otra. Ya sea desde vuestro propio ordenador o desde google colab (donde yo suelo trabajar), la forma de instalación es:
pip install mplfinance
Si estamos trabajando desde google colab, solo hay que poner el signo de exclamación delante:
!pip install mplfinance
Después de la instalación ya solo nos queda importar la librería dentro de nuestro código:
import mplfinance as mpf
Obtención de datos
El siguiente paso es la obtención de los datos para guardarlos en forma de dataframe de pandas. Aquí no voy a entrar en como realizarlo ya que hay ya artículos sobre ello en el propio blog como este o este, pero si que hay que tener en cuenta un detalle: la fecha tiene que estar como “Index” y tiene que estar en formato datetime.
Si tenemos los datos de Apple y una columna con la fecha con el nombre “date”, la forma de hacerlo sería así:
# Ponemos la fecha como datetime
apple['date'] = pd.to_datetime(apple['date'])
# Ponemos la fecha como índice
apple = apple.set_index('date')
Con esto ya tendremos los datos preparados para poder empezar a mostrarlos con la librería con la vamos a practicar.
Mostrar los datos
La forma más simple de mostrar los datos es la siguiente:
mpf.plot(
apple,
type='candle',
title='Apple',
ylabel='Precio ($)'
)
Y la salida sería:
Como vemos está mostrando todos los datos sin ningún formato en particular, pero para tener una visión de qué datos tenemos puede estar bien.
Estilos de visualización
Dentro de mplfinance existen diferentes estilos de visualización de los datos. Si queremos verlos todos podemos ejecutar la línea:
mpf.available_styles()
Donde la salida nos mostrará todos los estilos que podemos darle a nuestra gráfica, desde el por defecto hasta el típico de las velas alcistas en verde y las bajistas en rojo.
El que nos trae por defecto con los colores que hemos visto en la anterior gráfica, pero podemos cambiarlo desde el clásico:
mpf.plot(
apple.tail(20),
type='candle',
title='Apple',
ylabel='Precio ($)',
style='classic'
)
Cuya salida se muestra así:
Hasta el que tiene yahoo por defecto:
mpf.plot(
apple.tail(20),
type='candle',
title='Apple',
ylabel='Precio ($)',
style='yahoo'
)
Que se muestra así:
Depende de gustos, como todo. Podéis probar y quedaros con el que más os guste de entre la oferta que nos dan.
Incluir el volumen
Para que una gráfica muestre el volumen solo hay que añadir “volumen=True”:
mpf.plot(
apple.tail(20),
type='candle',
title='Apple',
ylabel='Precio ($)',
style='yahoo',
volume=True
)
Y veremos la gráfica con el volumen ya incluido:
Incluir las medias
Hay muchos datos que la propia librería hace el cálculo, como las medias, e incluirlo en la gráfica es muy sencillo. Si por ejemplo queremos incluir las medias de 5 y 20 sería así:
mpf.plot(
# Aumentamos el número de datos a mostrar para que se vea más fácil
apple.tail(200),
type='candle',
title='Apple',
ylabel='Precio ($)',
style='yahoo',
volume=True,
mav=(20,5)
)
Y ya veremos como salen las medias en nuestra gráfica:
Guardar la gráfica
Si queremos que la gráfica no se muestre pero se guarde, (lo que resulta muy útil en programas automatizados para saber como se están recibiendo los datos), sería simplemente incluir la opción “savefig” junto con el nombre que queremos darle al fichero de salida:
mpf.plot(
apple.tail(200),
type='candle',
title='Apple',
ylabel='Precio ($)',
style='yahoo',
volume=True,
mav=(20,5),
savefig='img.png'
)
Quitar los márgenes de la imagen
Si queremos quitar los márgenes de la imagen para que la gráfica ocupe toda la imagen hay que incluir la línea “tight_layout=True”:
mpf.plot(
apple.tail(200),
type='candle',
title='Apple',
ylabel='Precio ($)',
style='yahoo',
volume=True,
mav=(20,5),
tight_layout=True,
)
Y la salida no mostrará el hueco para el título sino que estará dentro de la gráfica, entre otros ajustes:
Otros tipos de gráficas
Como no todo en la vida son los gráficos de velas japonesas, con la librería mplfinance nos da la opción de realizar otros tipos de gráficos, simplemente cambiando el “type”.
Para mostrar una gráfica tipo “ohlc” sería así:
mpf.plot(
# Aumentamos el número para que se vea más fácil
apple.tail(100),
type='ohlc',
title='Apple',
ylabel='Precio ($)',
style='yahoo',
volume=True,
mav=(20,5),
tight_layout=True,
)
También podemos mostrar el gráfico de línea simple:
mpf.plot(
# Aumentamos el número para que se vea más fácil
apple.tail(100),
type='line',
title='Apple',
ylabel='Precio ($)',
style='yahoo',
volume=True,
# Comentamos esta línea de las medias para que no se mezcle con la principal
# mav=(20,5),
tight_layout=True,
)
Y también podemos hacer gráficos menos conocidos, como el Renko:
mpf.plot(
# Aumentamos el número para que se vea más fácil
apple.tail(200),
type='renko',
title='Apple',
ylabel='Precio ($)',
style='yahoo',
volume=True,
tight_layout=True,
)
O un gráfico de punto y figura para aquellos que sepan hacer trading con ellos:
mpf.plot(
# Aumentamos el número para que se vea más fácil
apple.tail(400),
type='pnf',
title='Apple',
ylabel='Precio ($)',
style='yahoo',
volume=True,
# Comentamos esto para que salga la figura completa, sino las letras entorpecian
# tight_layout=True,
)
Días que no hay trading
En algunos casos puede ser interesante ver los días que no hay trading, y mplfinance nos lo pone muy fácil, ya que con incluir la línea “show_nontrading=True” lo veremos:
mpf.plot(
# Aumentamos el número para que se vea más fácil
apple.tail(100),
type='candle',
title='Apple',
ylabel='Precio ($)',
style='yahoo',
volume=True,
mav=(20,5),
tight_layout=True,
show_nontrading=True
)
Y en la gráfica veremos como se muestran los huecos correspondientes a los días en los que no hay operativa de trading:
Cambiar el tamaño de la gráfica
También puede ser que la gráfica sea pequeña o grande para los datos que queremos mostrar, esto se puede ajustar mediante el parámetro “figratio”:
mpf.plot(
# Aumentamos el número para que se vea más fácil
apple.tail(100),
type='candle',
title='Apple',
ylabel='Precio ($)',
style='yahoo',
volume=True,
mav=(20,5),
tight_layout=True,
show_nontrading=True,
figratio=(10,5)
)
Y vemos como cambiamos el aspecto respecto al gráfico anterior:
Quitar los ejes
Otra de las opciones que nos da la librería es la posibilidad de quitar los ejes mediante la línea “axisoff=True”. Lo que puede ser útil cuando queremos ver la gráfica sin ningún tipo de ruido:
mpf.plot(
# Aumentamos el número para que se vea más fácil
apple.tail(100),
type='candle',
title='Apple',
ylabel='Precio ($)',
style='yahoo',
volume=True,
mav=(20,5),
tight_layout=True,
show_nontrading=True,
figratio=(10,5),
axisoff=True
)
Y como vemos la vista sin los ejes es mucho más limpia.
Incluir una subgráfica
En muchos casos es necesario incluir otros datos en una gráfica separada. Aunque ya empieza a complicarse un poco más el código aun así es más sencillo que en otros casos.
Lo primero es crear una variable con los nuevos subgrafos que queremos mostrar:
ap0 = [
mpf.make_addplot(apple['vwap'].tail(100),color='#ffa500', panel=0, title="VWAP")
]
En este caso solo incluimos un subgrafo con el valor del VWAP y lo ponemos en la posición 0. Si quisiéramos añadir más gráficos solo habría que incluir una línea por cada subgrafo nuevo e ir añadiendo números secuenciales a la variable panel.
Después de esto la creación del gráfico sería así:
mpf.plot(
apple.tail(100),
panel_ratios=(.05, .2, .05),
type='candle',
title='Apple',
ylabel='Precio ($)',
style='yahoo',
volume=True,
mav=(50, 20,5),
show_nontrading=True,
figratio=(10,5),
addplot=ap0,
main_panel=1,
volume_panel=2,
num_panels=3,
)
Las novedades aquí son:
- panel_ratios: Donde se pone lo que se quiere que ocupe cada panel
- add_plot: En el cual se pone la variable anterior con los distintos subgrafos
- main_panel: Que sería el número siguiente al último “panel” que hemos puesto en los subgrafos.
- volume_panel: Con el número siguiente al que haya en main_panel
- num_panels: Con el total de subgrafos que tenemos en la gráfica.
El resultado de esto sería así:
Conclusiones
Aunque la entrada ha sido un poco larga creo que era necesario para poder incluir las opciones más importantes que nos da esta librería y tenerlas siempre a mano.
Como hemos visto la versatilidad de la librería mplfinance es bastante grande y la simpleza para realizar las previsualizaciones es muy grande. Aunque no ofrece tantas opciones como otras librerías más complejas creo que para las visualizaciones básicas es suficiente.
En alguna ocasión podemos llegar a ver como se mezcla esta librería con matplotlib creando gráficas mucho más complejas pero eso ya es materia para otra entrada.















Muy bien organizada y estructurada la página y la información, se entendió completamente. Gracias!
Al fin pude entender como usar la mpf. Impresionante esta página. Muchas gracias.
Gracias a ti por el comentario! Siempre anima que valoren tu trabajo.