API REST

Indicadores técnicos

Veinte tipos de indicadores clásicos, calculados bajo demanda sobre las velas de la referencia de precio. Hasta cincuenta instancias por llamada, cada una con sus propios parámetros. La precisión está calibrada con TradingView con un margen de 0,1 %, salvo en los dos indicadores acumulativos y en tres diferencias de convención deliberadas.

#La llamada

POST/v1/indicatorsdata_type · indicators

El único endpoint de la API 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 veinte perpetuos. 32 caracteres como máximo.
timeframestringobligatorio1m, 5m, 15m, 30m, 1h, 4h, 1d, 1w. Es la única ruta que acepta la semana.
resultsinteger1Número de valores devueltos por indicador. 1 da el último valor en una vela cerrada.
indicatorsarrayobligatorioLista no vacía de objetos { id, type, parameters }. Cincuenta entradas como máximo.
curl -X POST "https://api.bytnode.com/v1/indicators" \
  -H "X-API-KEY: $BYTNODE_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "symbol": "BTCUSDT",
    "timeframe": "1h",
    "results": 60,
    "indicators": [
      { "id": "rsi_fast", "type": "rsi", "period": 7 },
      { "id": "rsi_slow", "type": "rsi", "period": 21 },
      { "id": "macd", "type": "macd", "fast": 12, "slow": 26, "signal": 9 },
      { "id": "bb_mid", "type": "bb", "period": 20, "std": 2.0 }
    ]
  }'

1m5m15m30m1h4h1d1w

#Los veinte indicadores

TipoInstanciasParámetros (por defecto, mínimo)Salida
rsimultiperiod (14, ≥ 2)value
emamultiperiod (20, ≥ 2)value
smamultiperiod (20, ≥ 2)value
bbmultiperiod (20, ≥ 2), std (2.0, ≥ 0.5)upper, middle, lower
atrmultiperiod (14, ≥ 2)value
stochmultik (14, ≥ 2), d (3, ≥ 2), smooth (3, ≥ 2)k, d
macdmonofast (12, ≥ 2), slow (26, ≥ 5), signal (9, ≥ 2); fast < slowmacd, signal, histogram
obvmonononevalue
adxmultiperiod (14, ≥ 2)value
sarmonoacceleration (0.02, ≥ 0.01), maximum (0.2, ≥ 0.05); acceleration ≤ maximumvalue
ccimultiperiod (20, ≥ 2)value
willrmultiperiod (14, ≥ 2)value
mfimultiperiod (14, ≥ 2)value
rocmultiperiod (10, ≥ 2)value
admonononevalue
adoscmonofast (3, ≥ 2), slow (10, ≥ 5); fast < slowvalue
keltnermultiperiod (20, ≥ 2), multiplier (2.0, ≥ 0.5)upper, middle, lower
donchianmultiperiod (20, ≥ 2)upper, middle, lower
ichimokumonotenkan (9, ≥ 2), kijun (26, ≥ 5), senkou (52, ≥ 10)tenkan_sen, kijun_sen, senkou_a, senkou_b
vwmamultiperiod (20, ≥ 2)value

#Los identificadores

Cada instancia lleva un id que eliges tú y que sirve de clave en la respuesta. Su forma está restringida, para que tres RSI de periodos distintos sigan siendo distinguibles sin una convención propia.

Catorce tipos multiinstancia

Hasta tres instancias por tipo, con los sufijos _fast, _mid y _slow (rsi_fast, ema_slow).

rsiemasmabbatrstochadxcciwillrmfirockeltnerdonchianvwma

Seis tipos de instancia única

El identificador es exactamente el nombre del tipo: macd, ichimoku. Una instancia por llamada.

macdobvsaradadoscichimoku

Un identificador duplicado, mal formado o incompatible con su tipo devuelve 400.

#La regla del límite

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

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

Más allá, la petición devuelve 422. En los tipos con warm-up lineal, el mensaje indica el periodo máximo utilizable para el número de resultados pedido.

TipoWarm-up
rsi, atr, keltner5 × period
ema3 × period
sma, bb, cci, willr, roc, donchian, vwma, 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",
  "timestamp": 1775648290510,
  "data_type": "indicators",
  "data": {
    "symbol": "BTCUSDT",
    "timeframe": "1h",
    "results": 60,
    "indicators": {
      "rsi_fast": { "type": "rsi", "period": 7, "values": [62.3, 58.1] },
      "macd": {
        "type": "macd", "fast": 12, "slow": 26, "signal": 9,
        "values": { "macd": [142.5], "signal": [98.2], "histogram": [44.3] }
      },
      "bb_mid": {
        "type": "bb", "period": 20, "std": 2.0,
        "values": { "upper": [72110.4], "middle": [71420.8], "lower": [70731.2] }
      }
    }
  }
}
  • 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ó.
  • Los valores van del más antiguo al más reciente.
  • 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 results: 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.

El VWMA no es el VWAP

vwma es una media móvil ponderada por volumen, calculada sobre las velas de la referencia de precio. /v1/vwap, en cambio, agrega las operaciones de todos los mercados. Fuentes y ventanas distintas: una diferencia entre ambos no es una incoherencia.

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 número de resultados, 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álida403
Temporalidad no válida, results inferior a 1, símbolo desconocido400
Lista indicators vacía, entrada que no es un objeto400
Falta la clave id o type, id mal formado, tipo no admitido400
Parámetro desconocido para el tipo, tipo equivocado, por debajo del mínimo400
macd o adosc con fast ≥ slow, sar con acceleration '>' maximum400
Identificador duplicado400
Cuerpo mal formado, más de 50 indicadores, campo demasiado largo422
results + warm-up supera 1000422
Datos insuficientes para esta temporalidad, stablecoins incluidas422
Velocidad superada429