Saltar al contenido

Mplfinance: los apuntes definitivos

    mplfinance principal

    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:

    Visualización de los datos de Apple con mplfinance

    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í:

    Visualización clásica con mplfinance

    Hasta el que tiene yahoo por defecto:

    mpf.plot(
        apple.tail(20),
        type='candle',
        title='Apple',
        ylabel='Precio ($)',
        style='yahoo'
    )

    Que se muestra así:

    Visualización con el estilo yahoo con mplfinance

    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:

    Visualización con el volumen

    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:

    Visualización con medias con mplfinance

    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:

    Imagen sin márgenes con mplfinance

    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,
    )
    Gráfico ohlc con mplfinance

    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,
    )
    Gráfico de línea con mplfinance

    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,
    )
    Gráfico Renko con mplfinance

    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,
    )
    Gráfico de punto y figura con mplfinance

    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:

    Gráfico con días sin operativa con mplfinance

    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:

    Cambio de tamaño de la imagen con mplfinance

    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.

    Gráfico sin ejes con mplfinance

    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í:

    Subgráfico con mplfinance

    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.

    Deja una respuesta

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *