Análisis Fundamental en Trading Cuantitativo | Parte 1

por | Abr 2, 2023 | Amibroker, Premium, Python, Screeners | 4 Comentarios

En ocasiones surge el eterno debate entre el análisis técnico y el análisis fundamental y cómo puede un trader ser más rentable y consistente.

¿Y si somos capaces de mezclar ambos análisis? Hoy te enseñamos cómo.

El análisis técnico basa sus predicciones en la evolución del precio y el volumen y en la premisa de que éste lo descuenta todo; es decir, podemos anticiparnos a la evolución de un activo únicamente analizando su comportamiento en el pasado y cómo responde el ser humano a los movimientos alcistas y bajistas del precio.

En cambio, el análisis fundamental utiliza únicamente datos financieros para evaluar si una compañía está cara o barata, y en definitiva anticiparse a la evolución del precio.

Parece, por tanto, que el análisis fundamental solo tendría cabida en operaciones a largo plazo ya que las variaciones a pequeña escala y fluctuaciones en el precio no tendrán ninguna relación con los datos financieros de la compañía.

En este tipo de operaciones en las que se puede mantener un activo durante meses o incluso años, el análisis técnico utiliza fundamentalmente estrategias de tipo momentum o tendencial para invertir en compañías fuertes y de alto crecimiento.

La pregunta que nos podemos hacer es la siguiente ¿puede un trader realizar análisis cuantitativo utilizando Amibroker y datos financieros?

En primer lugar, nos encontramos con la problemática de conseguir datos actualizados y su evolución en el tiempo. Esto es muy complicado con un proveedor de datos, y por otra parte, Amibroker no permite directamente operar con un histórico de datos fundamentales, pero sí trabajar con datos externos.

En este artículo vamos a ver un cómo conseguir los datos fundamentales de diferentes empresas y cómo los podemos incorporar a nuestra Base de Datos de Amibroker para en un artículo posterior, trabajar en un sistema de trading.

Para ello, vamos a utilizar un único parámetro llamado ROE “Return of Equity” que no deja de ser el beneficio neto de una empresa dividido por los fondos propios. Es un indicador muy importante ya que reflejará de manera muy fehaciente la capacidad de la empresa para hacer crecer sus fondos propios, es decir el valor de la compañía y el patrimonio de sus accionistas que, en cierta forma, debiera verse reflejado en el precio.

Éste y prácticamente cualquier otro ratio o valor utilizado en el análisis fundamental podemos sacarlo de macrotrends, en la que lamentablemente solo tenemos compañías americanas, con lo que, al menos en nuestro ejemplo operaremos únicamente en el S&P500, que no es poco.

Si en la web buscamos una compañía (por ejemplo, Apple) y localizamos el ratio ROE veremos que recoge un histórico en formato de tabla y una estructura de web que se repite de la siguiente forma:

https://www.macrotrends.net/stocks/charts/AAPL/apple/roe

Donde “AAPL” corresponde al ticker, “apple” el nombre de la compañía, y “roe” el ratio o dato financiero que necesitamos.

De esta forma podemos crear una aplicación en Python en la que la idea es crear un dataframe a partir de la tabla que presenta la página para cada uno de los valores del S&P500 y guardarlos en una carpeta como un archivo csv por cada compañía.

Para ello deberíamos seguir los siguientes pasos:

➡️ 1. Explorador

Creamos un archivo con el editor de Amibroker para sacar las acciones del S&P500. Seleccionamos en filter las acciones del S&P500 y hacemos un explorer con la última barra.

👨‍💻 Éste es el código de Amibroker:

Desbloquea todos los contenidos con la Zona Premium

Con el botón derecho seleccionamos todas y las copiamos. Posteriormente las pegamos una hoja Excel y borramos la columna de la fecha.

En nuestro caso estamos trabajando con una base de datos que trabaja con los tickers de Investing al que hemos añadido “.US” a todos los tickers americanos. Para ello en el Excel pulsamos el botón “BUSCAR Y SELECCIONAR” y en la pestaña de reemplazar rellenamos “.US” en buscar y dejamos en blanco la casilla “reemplazar con”

Finalmente guardamos el archivo con el nombre de SP500.csv. De esta forma ya tenemos un archivo que será la base para que nuestro programa en Python vaya recopilando las tablas de ROE por cada uno de los valores

➡️ 2. Python

Ahora vamos a utilizar Python para ir leyendo uno por uno los valores del S&P500 y generando un archivo csv con el registro de datos de ROE por fechas. Cada archivo lo guardaremos con el nombre de su ticker seguido de “-ROE”.

Esto nos permitirá localizar fácilmente los datos a partir de un ticker.

Desbloquea todos los contenidos con la Zona Premium

El programa carga todos los datos del archivo donde previamente habíamos guardado todos los tickers del S&P500 y sustituye los espacios en blanco del nombre de las compañías por un guion. Esto es necesario ya que en la estructura de la web de macrotrends emplea guiones en vez de espacios.

Es importante introducir en el programa el directorio correcto donde hayamos guardado nuestro archivo S&P500 y donde queramos guardar nuestra base de datos de ROEs. En nuestro caso lo hemos guardado dentro una carpeta llamada fundamentales y en una subcarpeta llamada ROE. Esta carpeta la hemos creado en el directorio de Python pero puede seleccionarse cualquier directorio del disco duro.

Una vez que ejecutemos, el programa irá creando en la carpeta de destino un archivo por cada valor del índice. Sin embargo, es posible que en algún momento nos de un error y el programa se detenga. Esto puede ser debido a que el nombre que tengamos reflejado en nuestra base de datos no coincida con el que refleja la web de macrotrends. Esto puede suceder porque en nuestra base de datos tengamos alguna compañía cuyo nombre contiene un apóstrofe (por ejemplo Lowe’s), en cuyo caso tendríamos que eliminar el apóstrofe en nuestra base de datos inicial (Lowes).

En definitiva, si el programa se detiene, debemos comprobar cuál ha sido el último ticker que nos ha creado e irnos al siguiente que sería el que nos está dando el problema, bien por apóstrofe o porque es una compañía ya deslistada. Solucionandos estos casos concretos ya tendremos una base de datos definitiva de las compañías y una carpeta con un archivo .csv por cada ticker de la base de datos.

➡️ 3. Importación de datos

El siguiente paso es importar todos los csv que hemos creado en un nuevo grupo de Amibroker que podemos llamar “Fundamentales”.

Para ello hacemos uso del Import Wizard para importar la primera columna con el formato de fecha adecuado y la segunda columna tratándola como un “Close”.

Es importante seleccionar la opción de permitir precios negativos ya que recordamos que el ROE puede ser tanto positivo (ganancias) como negativo (pérdidas).

➡️ 4. Indicador

Nos va a ser de mucha utilidad disponer de un indicador con los valores del ROE en el tiempo.

Hay que recordar que la publicación de resultados en USA es cada trimestre con lo que no vamos a tener una curva lineal sino más bien formada por escalones que varían cada trimestre.

Desbloquea todos los contenidos con la Zona Premium

Con esto nos quedaría un indicador de este tipo:

Como puedes ver hemos sido capaces de programar un indicador en Amibroker con datos fundamentales. Estamos en el paso previo a poder cuantificar algorítmicamente si el análisis fundamental del ROE tiene o no tiene cierta ventaja estadística.

Si no te lo quieres perder, el domingo que viene continuamos!

Este artículo fue cortesía de Sergio Meana para MKTSignals.

Si te ha gustado no olvides dejarnos tu opinión 😉

La newsletter de MKTSignals

Si quieres estar al tanto de todas nuestras novedades, suscríbete a nuestra newsletter. ¡Es gratis!

¡Puntúa este artículo!

Total votos: 7. Promedio: 5

También te puede interesar:

¿Quieres acceder a todo el contenido Premium HOY?

+50 códigos de Amibroker

4 Comentarios

  1. Nicolas Douliez

    Buenas tardes,
    el codigo Python os sigue funcionando? soy nuevo en el tema Python, he conseguido arreglar unos temas, importa bien el csv, pero luego no llega a macrotrends…
    gracias!

  2. mktsignals

    Tienes razón Nicolas, acabo de probar y me da un 403 la respuesta de macrotrend.

    Voy avisar a Sergio que creo que lo sigo utilizando a ver si cambió algo.

    Un saludo!

    • Javier Miralles Miralles

      Sé que llego muy tarde, pero hace un tiempo ya que Macrotrends no nos deja bajar los datos…

      • mktsignals

        Sí, deberías scrappear de forma diferente, te dejo un ejemplo para que adaptes 😉

        «`
        import pandas as pd
        from urllib.request import Request, urlopen

        # Realizar la solicitud con un User-Agent
        req = Request(
        url=’https://www.macrotrends.net/stocks/charts/AAPL/apple/roe’,
        headers={‘User-Agent’: ‘Mozilla/5.0’}
        )
        webpage = urlopen(req).read()

        # Leer el HTML con pandas
        data = pd.read_html(webpage)

        # Convertir la primera tabla en un DataFrame
        df2 = pd.DataFrame(data[0])

        # Renombrar y reindexar el DataFrame
        df2.columns = range(len(df2.columns))
        df2 = df2.rename(columns={0: ‘Date’, 1: ‘COL1’, 2: ‘COL2’, 3: ‘ROE’})
        df2.set_index(‘Date’, inplace=True) # Establecer la fecha como índice
        df2[‘ROE’] = df2[‘ROE’].str[:-1] # Eliminar el símbolo de porcentaje

        print(df2[‘ROE’])

        «`

Enviar un comentario

Loading...