Datos de mercado

API de indicadores cripto

Diecinueve indicadores técnicos calculados a demanda y calibrados con TradingView: RSI, MACD, medias móviles y más. Envías tus parámetros y BytNode devuelve los valores: sin historial de velas que descargar ni nada que recalcular por tu lado.

Diecinueve tipos de indicadores clásicos, calculados bajo demanda sobre las velas OHLCV, cuyo volumen es el del mercado spot, sumado en todas las plataformas. Hasta cincuenta instancias por llamada, cada una con sus propios parámetros. La precisión está calibrada con TradingView con un margen del 0,1 % en los indicadores de precio, salvo tres diferencias de convención deliberadas; los indicadores de volumen (OBV, MFI, A/D, Chaikin) usan ese volumen agregado, por lo que su nivel difiere del de un gráfico de una sola plataforma. Se calculan sobre las velas más recientes cuyo volumen ya es definitivo (la última puede estar aún esperándolo) y devuelven 422 cuando ese historial de volumen es demasiado corto.

#Indicadores técnicos para agentes de IA: tool calling

«¿Está BTC sobrecomprado en el RSI de 4 horas?», «¿Ha cruzado el MACD de ETH su línea de señal?», «Compara el ADX de SOL y AVAX»: el agente de IA describe el cálculo y la herramienta MCP get_market_indicators lo ejecuta, en hasta diez pares. Es el tool calling en su forma más simple.

MCP tools/call
El último RSI y MACD de 4 horas de BTC, calculados bajo demanda.
{
  "name": "get_market_indicators",
  "arguments": {
    "symbol": "BTCUSDT",
    "timeframe": "4h",
    "limit": 1,
    "indicators": [
      { "id": "rsi_14", "type": "rsi", "period": 14 },
      { "id": "macd", "type": "macd", "fast": 12, "slow": 26, "signal": 9 }
    ]
  }
}
  • Para el LLM: los valores llegan del más reciente al más antiguo y se calculan solo con velas cerradas: la vela en curso nunca mueve un indicador.
  • Para desarrolladores: POST /v1/indicators recibe la misma descripción como cuerpo JSON, lo que la convierte en una herramienta lista para tu propio agente de IA; los diecinueve tipos y sus parámetros figuran más abajo.
  • Dónde funciona: Claude, ChatGPT, Cursor y cualquier cliente MCP, incluidos los frameworks de agentes compatibles con MCP, como LangChain o n8n.

Conecta tu agente de IA con la guía del servidor MCP, o enséñale BytNode con los Agent Skills de código abierto.

#La llamada

POST/v1/indicatorsdata_type · indicatorsReferencia completa
Los 1 campos de esta ruta (según el contrato)
indicatorsOne result per indicator of the request, keyed by the `id` you gave it.

El único endpoint que recibe un cuerpo JSON: describe un cálculo, no una lectura. Los valores no se almacenan ni se guardan en caché. Se producen en cada llamada a partir de las velas cerradas.

ParámetroTipoPor defectoDescripción
symbolstringobligatorioUno de los símbolos de GET /v1/symbols (en las dos stablecoins: 200 con unavailable: not_applicable). 32 caracteres como máximo.
timeframestringobligatorio1m, 5m, 15m, 30m, 1h, 4h, 1d, 1w. La semana empieza el lunes a las 00:00 UTC, como en /v1/klines.
limitinteger1Número de filas devueltas por indicador, de 1 a 1000, de la más reciente a la más antigua. 1 da el valor de la última vela cerrada.
indicatorsarrayobligatorioLista no vacía de objetos: { "id", "type", y luego los parámetros PLANOS, por ejemplo "period": 14 }. Cincuenta entradas como máximo.
curl -X POST "https://api.bytnode.com/v1/indicators" \
  -H "X-API-KEY: $BYTNODE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "symbol": "BTCUSDT",
    "timeframe": "1h",
    "limit": 3,
    "indicators": [
      { "id": "rsi_14", "type": "rsi", "period": 14 },
      { "id": "macd", "type": "macd", "fast": 12, "slow": 26, "signal": 9 },
      { "id": "bb_20", "type": "bb", "period": 20 }
    ]
  }'

1m5m15m30m1h4h1d1w

#Los diecinueve indicadores

TipoParámetros (por defecto, mínimo)Salida
rsiperiod (14, ≥ 2)value
emaperiod (20, ≥ 2)value
smaperiod (20, ≥ 2)value
bbperiod (20, ≥ 2), std (2.0, ≥ 0.5)upper, middle, lower
atrperiod (14, ≥ 2)value
stochk (14, ≥ 2), d (3, ≥ 2), smooth (3, ≥ 2)k, d
macdfast (12, ≥ 2), slow (26, ≥ 5), signal (9, ≥ 2); fast < slowmacd, signal, histogram
obvnonevalue
adxperiod (14, ≥ 2)value
saracceleration (0.02, ≥ 0.01), maximum (0.2, ≥ 0.05); acceleration ≤ maximumvalue
cciperiod (20, ≥ 2)value
willrperiod (14, ≥ 2)value
mfiperiod (14, ≥ 2)value
rocperiod (10, ≥ 2)value
adnonevalue
adoscfast (3, ≥ 2), slow (10, ≥ 5); fast < slowvalue
keltnerperiod (20, ≥ 2), multiplier (2.0, ≥ 0.5)upper, middle, lower
donchianperiod (20, ≥ 2)upper, middle, lower
ichimokutenkan (9, ≥ 2), kijun (26, ≥ 5), senkou (52, ≥ 10)tenkan_sen, kijun_sen, senkou_a, senkou_b

#Los identificadores

Cada instancia lleva un id que eliges tú: es la clave de su resultado en la respuesta. Cualquier nombre de 1 a 64 caracteres entre letras, cifras, _, - y ., único en la llamada: rsi_7, rsi_21, tendencia.ema_200.

Un tipo puede aparecer tantas veces como haga falta, dentro del límite de cincuenta indicadores por llamada: cinco medias móviles de periodos distintos, o tres RSI, uno al lado del otro.

rsiemasmabbatrstochmacdobvadxsarcciwillrmfirocadadosckeltnerdonchianichimoku

Un identificador ausente, mal formado o duplicado devuelve 422 invalid_indicator.

#La regla del límite

Un indicador necesita un warm-up (velas anteriores al primer valor publicable). La regla es:

Regla
limit + warmup(type, parameters) <= 1000

Más allá, la petición devuelve 422. En los tipos con calentamiento lineal, el mensaje indica el periodo máximo utilizable para el limit pedido.

TipoWarm-up
rsi, atr, keltner5 × period
ema3 × period
sma, bb, cci, willr, roc, donchian, mfiperiod
stochk + d + smooth
macd3 × slow + signal
adosc6 × slow
adx14 × period
sar200, constante
ichimokumax(tenkan, kijun, senkou) + kijun
obv, adninguno

#La respuesta

200
{
  "status": "ok",
  "server_time": "2026-11-08T12:52:44.953Z",
  "data_type": "indicators",
  "symbol": "BTCUSDT",
  "timeframe": "1h",
  "data": {
    "indicators": {
      "rsi_14": {
        "type": "rsi",
        "period": 14,
        "values": [
          {
            "time": "2026-11-08T11:00:00.000Z",
            "value": 54.072013544
          },
          {
            "time": "2026-11-08T10:00:00.000Z",
            "value": 49.3688670483
          },
          {
            "time": "2026-11-08T09:00:00.000Z",
            "value": 51.577078526
          }
        ]
      },
      "macd": {
        "type": "macd",
        "fast": 12,
        "slow": 26,
        "signal": 9,
        "values": [
          {
            "time": "2026-11-08T11:00:00.000Z",
            "macd": -14.2249104846,
            "signal": -45.998361242,
            "histogram": 31.7734507574
          },
          {
            "time": "2026-11-08T10:00:00.000Z",
            "macd": -24.0339550779,
            "signal": -53.9417239313,
            "histogram": 29.9077688534
          },
          {
            "time": "2026-11-08T09:00:00.000Z",
            "macd": -27.3827508304,
            "signal": -61.4186661447,
            "histogram": 34.0359153142
          }
        ]
      },
      "bb_20": {
        "type": "bb",
        "period": 20,
        "std": 2,
        "values": [
          {
            "time": "2026-11-08T11:00:00.000Z",
            "upper": 75998.1649923,
            "middle": 75839.8095,
            "lower": 75681.4540077
          },
          {
            "time": "2026-11-08T10:00:00.000Z",
            "upper": 75976.7264653,
            "middle": 75828.6555,
            "lower": 75680.5845347
          },
          {
            "time": "2026-11-08T09:00:00.000Z",
            "upper": 75985.9705718,
            "middle": 75831.36,
            "lower": 75676.7494282
          }
        ]
      }
    }
  }
}
  • Las claves de data.indicators son tus identificadores.
  • Cada entrada repite su type y sus parámetros efectivos, con los valores por defecto completados: siempre sabes lo que se calculó.
  • values es una lista de filas fechadas, de la más reciente a la más antigua como toda lista de BytNode: cada fila es {time, value}, o time y las salidas con nombre de un indicador de varias salidas (macd, signal, histogram; upper, middle, lower…). time es el inicio de la vela de esa fila.
  • Un valor indefinido sale como null, nunca como NaN.
  • Las salidas con varias claves siguen el orden declarado por el tipo, no el del motor de cálculo.

#Diferencias de convención

Estas diferencias provienen de mediciones, no de preferencias. Conocerlas evita buscar un fallo donde no lo hay.

OBV y AD son totales acumulados sin origen

Ambos acumulan desde la primera vela de la ventana cargada. Su nivel absoluto no es reproducible de una petición a otra: dos ventanas distintas dan dos niveles distintos, y ninguno coincide con el nivel de un gráfico de terceros. Solo son aprovechables la pendiente, las variaciones y las divergencias con el precio. adosc no tiene este defecto: es insensible al origen.

Ichimoku: una barra de diferencia con TradingView

Los dos senkou se proyectan kijun barras hacia delante (26 por defecto). TradingView desplaza 25. Se espera por tanto una barra de diferencia.

El chikou_span no se expone: su definición mira al futuro, sería null en las últimas velas y, por tanto, siempre null con limit: 1.

Keltner: una sola longitud

Es la variante moderna, media móvil exponencial más ATR, con una sola longitud para ambas. TradingView expone una EMA(20) y un ATR(10) por separado. Una diferencia deliberada.

Donchian incluye la vela actual

La ventana es inclusiva, en línea con las funciones highest y lowest de los lenguajes de script de gráficos.

El MFI no es un RSI del volumen

Está implementado como una simple suma móvil, sin el suavizado que usa el RSI: su warm-up es igual a su periodo, no a cinco veces su periodo.

#Errores

El orden de validación es fijo: temporalidad, después limit, después símbolo, después análisis de los indicadores, después la regla del límite y después la lectura de las velas. Gana el primer fallo.

CasoCódigo
Clave ausente o no válida401
Temporalidad no válida, limit fuera de 1 a 1000, símbolo desconocido422
Lista indicators vacía, entrada que no es un objeto422
Falta la clave id o type, id no válido, tipo no admitido, campo del cuerpo desconocido422
Parámetro desconocido para el tipo, tipo equivocado, por debajo del mínimo422
macd o adosc con fast ≥ slow, sar con acceleration '>' maximum422
Identificador duplicado422
Cuerpo mal formado, más de 50 indicadores, campo demasiado largo422
limit + warm-up supera 1000422
Datos insuficientes para esta temporalidad, o historial de volumen demasiado corto para un indicador de volumen422
Velocidad superada429