Kevin Meneses
Volver a artículos

Cómo construir un agente de trading con LangChain y EODHD

LangchainAI AgentLLMTradingPython
Cómo construir un agente de trading con LangChain y EODHD

La mayoría de los "agentes de trading con IA" que ves en YouTube no son agentes. Son un LLM con un buen prompt y datos inventados.

Un agente real necesita tres cosas: capacidad de razonar, herramientas para actuar, y datos reales para no alucinar. Si te falta la tercera, las otras dos no importan.

Este artículo es para ti si:

  • estás construyendo agentes de IA para análisis financiero,
  • quieres conectar LangChain a datos de mercado reales,
  • o ya intentaste construir un "bot de trading" con un LLM y te diste cuenta de que sin datos fiables, todo es teatro.

Vamos allá.

TL;DR

  • Un agente es un LLM al que se le dan herramientas (funciones) y la capacidad de decidir cuándo y cómo usarlas para completar una tarea, en lugar de responder directamente desde su conocimiento entrenado.
  • LangChain es un framework de Python que orquesta esa lógica: conecta el modelo, las herramientas, la memoria, y el bucle de decisión en una sola pieza ejecutable.
  • EODHD aporta lo que ningún LLM tiene por defecto: precios en tiempo real, fundamentales, indicadores técnicos, y noticias financieras actualizadas, todo a través de una REST API.
  • El resultado: un agente que puede responder "¿debería estar mirando esta acción ahora mismo?" con datos reales, no con su memoria de entrenamiento desactualizada.

El problema no es la inteligencia del modelo

Pregúntale a cualquier LLM el precio actual de una acción.

Te dará un número. Ese número podría tener meses, o estar directamente inventado.

Los modelos de lenguaje no tienen acceso a mercados en vivo. No saben qué pasó ayer. No conocen el último informe de resultados. Y aun así, muchos "proyectos de trading con IA" los usan como si lo supieran.

El resultado es predecible:

  • recomendaciones basadas en datos de hace un año,
  • fundamentales fabricados y afirmados con total confianza,
  • análisis técnico ejecutado sobre precios que no existen.

Esto no es un problema de inteligencia. GPT-4 o Claude no son "malos en finanzas".

El problema es que nadie les está dando los datos correctos.

El problema real: faltan herramientas, no razonamiento

Un LLM sin herramientas es una biblioteca sin ventanas. Sabe mucho, pero no ve nada de lo que pasa hoy.

La solución no es "un modelo más grande". Es darle acceso a datos externos verificables, y dejar que decida cuándo consultarlos.

Eso es exactamente lo que hace un agente.

LangChain + EODHD: el stack

LangChain orquesta la lógica del agente: toma la pregunta del usuario, decide qué herramienta llamar, ejecuta la llamada, interpreta el resultado, y genera una respuesta. No es magia, es un bucle de razonamiento con reglas.

EODHD aporta la pieza que falta: datos financieros reales a través de una REST API. Con ella, el agente puede consultar:

  • precios en tiempo real y datos históricos OHLCV,
  • fundamentales de empresas (ratios, balance, ingresos),
  • indicadores técnicos (RSI, medias móviles, MACD),
  • noticias y sentimiento de mercado.

Después de probar varias fuentes de datos para este tipo de automatización, uso EODHD de forma consistente. Las razones son concretas:

  • cobertura amplia en mercados globales, no solo NYSE/NASDAQ,
  • endpoints separados para fundamentales, técnicos, y noticias, lo que facilita construir herramientas independientes,
  • un plan gratuito lo bastante generoso como para prototipar un agente antes de escalar.

¿Quieres construir agentes financieros con datos reales?
EODHD te da acceso a precios, fundamentales, y técnicos vía REST API — sin scraping, sin datos desactualizados.
Prueba EODHD gratis

Ventajas y desventajas de usar EODHD como capa de datos de tu agente

Antes de conectar cualquier proveedor de datos a un agente, vale la pena ser honesto sobre las contrapartidas. Esto es lo que destaca después de construir varias herramientas de agente sobre la API de EODHD.

Ventajas:

  • Una API, varios tipos de datos. Precios en tiempo real, fundamentales, técnicos, y noticias viven todos bajo la misma key y el mismo plan de facturación, así que no estás combinando tres proveedores distintos para un solo agente.
  • Cobertura global de mercados. La mayoría de las alternativas de plan gratuito (scrapers basados en Yahoo, planes limitados de Alpha Vantage) se quedan en tickers de EE. UU. EODHD cubre decenas de mercados, algo que importa si tu agente necesita razonar sobre acciones fuera de EE. UU.
  • Respuestas JSON estructuradas. Cada endpoint devuelve campos predecibles (close, change_p, PERatio, etc.), lo que hace sencillo escribir wrappers de herramientas de LangChain — sin parsear HTML, sin fragilidad de scraping.
  • El plan gratuito basta para prototipar. Puedes construir y probar el agente completo — precio, fundamentales, RSI — antes de pagar nada.
  • Los límites de uso están documentados y son predecibles, algo que importa para agentes que podrían llamar a una herramienta varias veces por consulta.

Desventajas:

  • El plan gratuito tiene topes diarios de peticiones. Bien para prototipar o un agente de watchlist personal; necesitarás un plan de pago para tráfico de producción con muchos usuarios.
  • Los datos de fundamentales se actualizan según el calendario del proveedor, no al instante tras los resultados — la misma limitación que tiene cualquier API de fundamentales, pero vale la pena saberlo si tu agente depende mucho de razonar sobre fundamentales del mismo día.
  • Sigues necesitando diseñar buenas descripciones de herramienta. EODHD te da los datos, pero una herramienta de LangChain mal descrita se seguirá llamando en el momento equivocado o el LLM la malinterpretará — esa parte depende de ti, no de la API.

En resumen: para un proyecto como este — un agente de razonamiento que necesita datos financieros reales y estructurados sin construir un pipeline de scraping — las contrapartidas favorecen a EODHD frente a construir tu propia capa de datos.

Arquitectura del agente LLM: cómo funciona realmente el bucle de razonamiento

Ayuda abrir mecánicamente qué significa "agente", porque esta es la parte que se saltan la mayoría de los tutoriales.

Un agente de LangChain construido sobre el patrón ReAct (Reason + Act) corre un bucle con cuatro componentes:

  1. El LLM — el motor de razonamiento. Lee la pregunta del usuario y las descripciones de las herramientas, y decide qué hacer a continuación.
  2. Las herramientas — funciones que el LLM puede llamar, cada una con un nombre, una descripción, y una entrada/salida esperada. Aquí es donde viven get_live_price, get_fundamentals, y get_rsi.
  3. El ejecutor — el bucle que realmente ejecuta la herramienta que el LLM pidió, le devuelve el resultado al LLM, y le deja decidir el siguiente paso.
  4. El scratchpad (memoria) — un registro continuo de pasos "pensamiento → acción → observación" dentro de una sola consulta, para que el LLM no pierda de vista lo que ya comprobó.

En la práctica, una sola consulta como "¿Deberíamos estar mirando AAPL.US ahora mismo?" dispara una cadena así:

Thought: I need the current price first.
Action: get_live_price("AAPL.US")
Observation: AAPL.US: current price 227.50, change +0.8%
Thought: Price alone isn't enough — check momentum.
Action: get_rsi("AAPL.US")
Observation: AAPL.US — RSI(14): 58.3Thought: Not overbought. Check if valuation is reasonable.
Action: get_fundamentals("AAPL.US")
Observation: AAPL.US — PE: 31.2, Market Cap: 3.4T, Dividend Yield: 0.4%Thought: I now have enough data to answer.
Final Answer: [synthesized response]

Esta es la diferencia arquitectónica entre un agente y un chatbot con un system prompt: el LLM decide la secuencia de llamadas a herramientas en tiempo de ejecución, basándose en lo que aprende de cada observación — no es un guion fijo. Por eso mismo importa tanto la calidad y estructura de tu fuente de datos. Si get_fundamentals devuelve basura o números desactualizados, los pasos de "Thought" construidos encima heredan ese error en silencio, sin ninguna señal de aviso en la salida.

Esta es la razón central por la que los agentes financieros necesitan una API real y estructurada como EODHD en lugar de datos scrapeados o en caché: cada paso de razonamiento posterior depende de la fiabilidad del paso anterior.

Ve los datos detrás de cada paso de razonamiento
Los endpoints estructurados de EODHD están construidos exactamente para este tipo de arquitectura de tool-calling.
Explora la API de EODHD

Implementación: construyendo el agente

Vamos a construir un agente con tres herramientas conectadas a EODHD: precio en vivo, fundamentales, e indicadores técnicos.

1. Instalación

pip install langchain langchain-openai requests

2. Define las herramientas

Cada herramienta es una función que llama a un endpoint de EODHD y devuelve una respuesta estructurada que el agente puede interpretar.

import requests
from langchain.tools import tool
EODHD_API_KEY = "YOUR_API_KEY"
BASE_URL = "https://eodhd.com/api"
@tool
def get_live_price(ticker: str) -> str:
    """Returns the current price of a stock. Example ticker: AAPL.US"""
    url = f"{BASE_URL}/real-time/{ticker}"
    params = {"api_token": EODHD_API_KEY, "fmt": "json"}
    r = requests.get(url, params=params).json()
    return f"{ticker}: current price {r['close']}, change {r['change_p']}%"
@tool
def get_fundamentals(ticker: str) -> str:
    """Returns key fundamental metrics: PE ratio, market cap, dividend yield."""
    url = f"{BASE_URL}/fundamentals/{ticker}"
    params = {"api_token": EODHD_API_KEY}
    r = requests.get(url, params=params).json()
    highlights = r.get("Highlights", {})
    return (
        f"{ticker} - PE: {highlights.get('PERatio')}, "
        f"Market Cap: {highlights.get('MarketCapitalization')}, "
        f"Dividend Yield: {highlights.get('DividendYield')}"
    )
@tool
def get_rsi(ticker: str) -> str:
    """Returns the 14-day RSI to assess overbought or oversold conditions."""
    url = f"{BASE_URL}/technical/{ticker}"
    params = {"api_token": EODHD_API_KEY, "function": "rsi", "period": 14, "fmt": "json"}
    r = requests.get(url, params=params).json()
    latest = r[-1]
    return f"{ticker} - RSI(14): {latest['rsi']} as of {latest['date']}"

3. Crea el agente

from langchain_openai import ChatOpenAI
from langchain.agents import create_react_agent, AgentExecutor
from langchain import hub

llm = ChatOpenAI(model="gpt-4o", temperature=0)
tools = [get_live_price, get_fundamentals, get_rsi]

prompt = hub.pull("hwchase17/react")
agent = create_react_agent(llm, tools, prompt)
executor = AgentExecutor(agent=agent, tools=tools, verbose=True)
prompt = hub.pull("hwchase17/react")
agent = create_react_agent(llm, tools, prompt)
executor = AgentExecutor(agent=agent, tools=tools, verbose=True)

Tres herramientas. Un LLM. Un bucle de razonamiento que decide cuál usar según la pregunta.

Ejemplo de uso

response = executor.invoke({
    "input": "Should we be looking at AAPL.US right now?"
})
print(response["output"])

El agente no responde directamente desde la memoria. Primero llama a get_live_price, luego a get_rsi, y si la valoración importa, a get_fundamentals. Combina los tres resultados en una respuesta basada en datos reales, no en una alucinación con buen formato y mucha confianza.

A partir de aquí puedes construir:

  • un agente multi-ticker que compara varias acciones en una sola consulta,
  • un pipeline que combina esto con noticias a través del endpoint de sentimiento de EODHD,
  • un sistema de alertas que ejecuta el agente cada hora sobre una watchlist.

Ideas clave

  • Un agente sin datos reales es un generador de texto convincente, no una herramienta de análisis.
  • LangChain resuelve la orquestación; EODHD resuelve el problema de fondo, que es tener datos financieros fiables y actualizados.
  • En un agente estilo ReAct, cada paso de razonamiento hereda la fiabilidad (o falta de ella) de los datos detrás del paso anterior — por eso la capa de datos importa tanto como el prompt.
  • Este patrón — herramientas delgadas, cada una con una sola responsabilidad — escala mejor que meter toda la lógica en un prompt gigante.

Si eres una empresa de software o de APIs y buscas explicar tu producto con contenido educativo de calidad (no marketing genérico), no dudes en escribirme por LinkedIn: 👉 linkedin.com/in/kevin-meneses-gonzalez

¿Listo para construir tu propio agente financiero?
Consigue acceso a precios en tiempo real, fundamentales, y técnicos con la API de EODHD.
Empieza con EODHD

Preguntas frecuentes

¿Qué es un agente de IA en el contexto del trading?
✅ Es un sistema donde un LLM no solo responde con texto, sino que decide qué herramientas usar — precios, fundamentales, noticias — para completar una tarea con datos reales, en lugar de depender solo de su conocimiento entrenado.

¿Por qué usar LangChain en lugar de llamar a la API directamente?
✅ Porque LangChain gestiona el bucle de decisión: qué herramienta usar, cuándo, y cómo combinar varios resultados en una respuesta coherente. Sin esto, tendrías que codificar tú mismo esa lógica de decisión para cada caso.

¿Necesito una cuenta de pago de EODHD para probar esto?
✅ No. El plan gratuito de EODHD es suficiente para prototipar el agente con datos reales antes de escalar a producción.

¿Cuál es la principal contrapartida de usar EODHD en lugar de construir mi propio pipeline de datos?
✅ Cambias control total sobre el origen de los datos por velocidad y fiabilidad — una API estructurada en lugar de mantener scrapers o varias integraciones de proveedores. La principal limitación a tener en cuenta es el tope diario de peticiones del plan gratuito una vez pasas de prototipar.

¿Buscas contenido técnico para tu empresa? Puedo ayudarte — LinkedIn · kevinmenesesgonzalez@gmail.com