Saltar al contenido

Aprende a descargar datos historicos sin esfuerzo con FMP

    FMP portada

    Hoy vamos a hablar de una de las mejores web que yo conozco para descargar datos históricos para el trading, tanto por la simplicidad para descargar los datos, como la facilidad para acceder a todos ellos a través de python y conseguir tratarlos con pandas de forma muy sencilla.

    Estoy hablando de Financial Modeling Prep, una web dedicada a la bolsa, pero con una API de datos muy potente para la conexión a todos sus datos. Los datos que incluyen son desde datos históricos, tanto de acciones como criptomonedas, hasta los datos fundamentales de las empresas.

    Aunque desde web si miramos los precios parece que solo es posible la versión gratuita desde Estados Unidos, en realidad se puede acceder a la API gratuita sin problemas (al menos desde España yo me puedo conectar sin problemas). Veamos ahora como podemos conectar con FMP para conseguir los datos.

    Conexión con los datos históricos

    Registrarse en para utilizar la API es muy sencillo. Solo hay que darse de alta en la web de la api y, después de validar tu correo, ya tendrás acceso a la API. Una vez dentro de la web podemos ver todos los datos que nos ofrece. Y pulsando sobre cualquiera de los enlaces podemos ver como se verán los datos cuando hagamos la llamada a la API.

    Descargar datos históricos desde FMP

    Para ver cual es nuestra clave de acceso a la API solo hay que ir al Dashboard en la web. Una vez que pinchamos en el enlace al Dashboard veremos la API para poder conectarnos.

    API FMP

    Como veis el proceso de conseguir entrar y la API key es muy sencillo. Ahora vamos a ver como conseguir los datos de la misma forma.

    Descargar datos históricos

    Veamos como conectarnos a FMP para descargar datos históricos. Las únicas librerías que vamos a necesitas para esto son las siguientes:

    import requests
    import pandas as pd

    Y la forma de conectar es la siguiente:

    response = requests.get('https://financialmodelingprep.com/api/v3/historical-price-full/AAPL?apikey=TU_API_KEY_AQUÍ')
    response = response.json()
    apple = pd.DataFrame(response['historical'])

    Y ya está, así de simple. Ahora tenemos todos los datos históricos de apple en una variable de tipo dataframe de panda. Si miramos lo que hay dentro de esa variable veremos los datos que nos ha devuelto la API de FMP:

    Datos históricos Apple

    Trabajar con estos datos ya es fácil para utilizarlos en vuestros cálculos. Si queremos descargar los datos de un periodo en particular es tan sencillo como:

    response = requests.get('https://financialmodelingprep.com/api/v3/historical-price-full/AAPL?from=2018-03-12&to=2019-03-12&apikey=TU_API_KEY_AQUÍ')
    response = response.json()
    apple = pd.DataFrame(response['historical'])

    En su documentación podéis conseguir muchas más formas de conseguir más datos, como por ejemplo con velas diarías, de cada hora, de 5 minutos, o incluso en tiempo real. Ahora vamos a ver otras utilidades que nos da la API.

    Descargar datos de criptomonedas

    Para descargar los datos de las criptomonedas es similar. Solo que nos lo devuelve en un formato un poco distinto y no tenemos que hacer la distinción de datos históricos. Vamos a ver un ejemplo con los datos del Bitcoin en una temporalidad de 4 horas:

    response = requests.get('https://financialmodelingprep.com/api/v3/historical-chart/4hour/BTCUSD?apikey=TU_API_KEY_AQUÍ')
    response = response.json()
    bitcoin = pd.DataFrame(response)

    Ahora la descargar de datos cambia un poco ya que no es tan completa:

    Detalle precios del bitcoin

    La salida no es tan completa como en el caso de los datos históricos para las aplicaciones, pero será suficiente en muchos casos para hacer nuestros cálculos.

    Datos de pago

    Aunque desde esta API tenemos acceso a mucha información de forma gratuita (incluso a los datos económicos de las empresas para aquellos que invierten utilizando análisis fundamental) existen algunos datos a los que no podemos tener acceso de forma gratuita.

    Uno de esos datos son las noticias económicas que tienen relación con cada empresa. Teniendo acceso a los datos premium podemos descargarnos las noticias económicas en general, donde se nos relacionará con cada ticker de la bolsa:

    response = requests.get('https://financialmodelingprep.com/api/v3/stock_news?limit=50&apikey=TU_API_KEY_AQUÍ')
    response = response.json()
    news = pd.DataFrame(response)

    O de un valor en particular:

    response = requests.get('https://financialmodelingprep.com/api/v3/stock_news?tickers=AAPL&limit=50&apikey=TU_API_KEY_AQUÍ')
    response = response.json()
    news = pd.DataFrame(response)

    Obteniendo un salida en formato dataframe con este formato:

    Detalle de las noticias

    Esto enlazado con un módulo para medir el sentimiento en las noticias puede hacer que nuestro trading tenga un poco más de inteligencia.

    Conclusiones

    Como hemos podido ver esta API es realmente muy potente para poder realizar estudios de determinados valores o incluso para mejorar nuestro trading en tiempo real. Los precios no son exageradamente caros, ya que por 15 euros al mes podemos tener acceso a toda la API con unas restricciones bastante buenas.

    Si no conocíais esta web os recomiendo que le echéis un ojo ya que hay mucha información que se puede sacar de ella para mejorar vuestro trading con muchísimos datos. Así que darle una oportunidad.

    Como siempre, si tenéis cualquier duda o mejora del artículo no dudéis en poneros en contacto conmigo y os contestaré lo antes posible.

    Oval@3x 2

    ¡No te pierdas ningún post!

    ¡No enviamos spam! Lee nuestra política de privacidad para más información.

    5 comentarios en «Aprende a descargar datos historicos sin esfuerzo con FMP»

    1. Hola! muchas gracias por tu artículo, soy nueva en esto y me ha sido muy útil.

      He estado probando lo que has publicado y quería hacerte una consulta. He probado el siguiente comando en Python:

      response = requests.get(‘https://financialmodelingprep.com/api/v3/historical-chart/1min/AAPL?&from=2022-06-20&to=2022-06-21&apikey=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx’)

      He querido indicar la fecha de hoy, para descargar los datos más recientes, pero haga lo que haga siempre me descarga los datos del día 17, ¿no se pueden sacar datos más recientes? ¿lo estoy haciendo mal?

      1. Hola Laura!

        Me alegra que te haya gustado el artículo.

        No estas haciendo nada mal. El problema es que ayer fue festivo en EEUU (fiesta de “Juneteenth”) y el mercado no abrió. Cuando has hecho la consulta te muestra los últimos datos disponibles que son los del día 17, que fue el último día que estuvo abierta la bolsa en EEUU. Podría no haber devuelto nada (que casi sería lo lógico), pero han decidido enviarte los últimos datos que tienen en el servidor.

        Si pruebas hoy a partir de la hora de apertura de Wall Street, seguro que ya ves los datos correctos.

        Un saludo,

    2. Hola de nuevo Ivan, si no te importa te voy a hacer otra pregunta, si por ejemplo pongo: response = requests.get(‘https://financialmodelingprep.com/api/v3/historical-chart/1min/AAPL?&from=2022-06-15&to=2022-06-17&apikey=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX’)

      Solo me saca los días 17 y 16, ¿Cómo puedo hacer para que me saque de golpe más de 2 días?

      Un saludo, Laura

      1. Hola Laura,

        Yo cuando quiero hacer eso lo hago con código, con uno o más “for” y “range” voy iterando por distintos rangos que quiero y lo voy acumulando, ya que FMP no te da estos datos del tirón.

        Un saludo.

    Deja una respuesta

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