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
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ámetro | Tipo | Por defecto | Descripción |
|---|---|---|---|
symbol | string | obligatorio | Uno de los veinte perpetuos. 32 caracteres como máximo. |
timeframe | string | obligatorio | 1m, 5m, 15m, 30m, 1h, 4h, 1d, 1w. Es la única ruta que acepta la semana. |
results | integer | 1 | Número de valores devueltos por indicador. 1 da el último valor en una vela cerrada. |
indicators | array | obligatorio | Lista 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
| Tipo | Instancias | Parámetros (por defecto, mínimo) | Salida |
|---|---|---|---|
rsi | multi | period (14, ≥ 2) | value |
ema | multi | period (20, ≥ 2) | value |
sma | multi | period (20, ≥ 2) | value |
bb | multi | period (20, ≥ 2), std (2.0, ≥ 0.5) | upper, middle, lower |
atr | multi | period (14, ≥ 2) | value |
stoch | multi | k (14, ≥ 2), d (3, ≥ 2), smooth (3, ≥ 2) | k, d |
macd | mono | fast (12, ≥ 2), slow (26, ≥ 5), signal (9, ≥ 2); fast < slow | macd, signal, histogram |
obv | mono | none | value |
adx | multi | period (14, ≥ 2) | value |
sar | mono | acceleration (0.02, ≥ 0.01), maximum (0.2, ≥ 0.05); acceleration ≤ maximum | value |
cci | multi | period (20, ≥ 2) | value |
willr | multi | period (14, ≥ 2) | value |
mfi | multi | period (14, ≥ 2) | value |
roc | multi | period (10, ≥ 2) | value |
ad | mono | none | value |
adosc | mono | fast (3, ≥ 2), slow (10, ≥ 5); fast < slow | value |
keltner | multi | period (20, ≥ 2), multiplier (2.0, ≥ 0.5) | upper, middle, lower |
donchian | multi | period (20, ≥ 2) | upper, middle, lower |
ichimoku | mono | tenkan (9, ≥ 2), kijun (26, ≥ 5), senkou (52, ≥ 10) | tenkan_sen, kijun_sen, senkou_a, senkou_b |
vwma | multi | period (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:
results + warmup(type, parameters) <= 1000Má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.
| Tipo | Warm-up |
|---|---|
| rsi, atr, keltner | 5 × period |
| ema | 3 × period |
| sma, bb, cci, willr, roc, donchian, vwma, mfi | period |
| stoch | k + d + smooth |
| macd | 3 × slow + signal |
| adosc | 6 × slow |
| adx | 14 × period |
| sar | 200, constante |
| ichimoku | max(tenkan, kijun, senkou) + kijun |
| obv, ad | ninguno |
#La respuesta
{
"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.indicatorsson tus identificadores. - Cada entrada repite su
typey 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 comoNaN. - 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.
| Caso | Código |
|---|---|
| Clave ausente o no válida | 403 |
| Temporalidad no válida, results inferior a 1, símbolo desconocido | 400 |
| Lista indicators vacía, entrada que no es un objeto | 400 |
| Falta la clave id o type, id mal formado, tipo no admitido | 400 |
| Parámetro desconocido para el tipo, tipo equivocado, por debajo del mínimo | 400 |
| macd o adosc con fast ≥ slow, sar con acceleration '>' maximum | 400 |
| Identificador duplicado | 400 |
| Cuerpo mal formado, más de 50 indicadores, campo demasiado largo | 422 |
| results + warm-up supera 1000 | 422 |
| Datos insuficientes para esta temporalidad, stablecoins incluidas | 422 |
| Velocidad superada | 429 |