Données de marché

API d’indicateurs crypto

Dix-neuf indicateurs techniques calculés à la demande et calibrés sur TradingView : RSI, MACD, moyennes mobiles et d’autres. Vous envoyez vos paramètres, BytNode renvoie les valeurs : pas d’historique de bougies à télécharger, rien à recalculer de votre côté.

Dix-neuf types d'indicateurs classiques, calculés à la demande sur les bougies OHLCV, dont le volume est celui du marché spot, toutes plateformes additionnées. Jusqu'à cinquante instances par appel, chacune avec ses propres paramètres. La précision est calibrée sur TradingView à 0,1 % près sur les indicateurs de prix, hors trois différences de convention assumées ; les indicateurs de volume (OBV, MFI, A/D, Chaikin) utilisent ce volume agrégé, leur niveau diffère donc d'un graphique mono-plateforme. Ils sont calculés sur les bougies les plus récentes dont le volume est déjà définitif (la dernière peut encore l'attendre), et renvoient 422 quand cet historique de volume est trop court.

#Indicateurs techniques pour agents IA : le tool calling

« BTC est-il suracheté sur le RSI 4 heures ? », « Le MACD d’ETH a-t-il croisé sa ligne de signal ? », « Compare l’ADX de SOL et d’AVAX » : l’agent IA décrit le calcul et l’outil MCP get_market_indicators l’exécute, sur dix paires au plus. C’est le tool calling dans sa forme la plus simple.

MCP tools/call
Le dernier RSI et le dernier MACD 4 heures de BTC, calculés à la demande.
{
  "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 }
    ]
  }
}
  • Pour le LLM : les valeurs arrivent de la plus récente à la plus ancienne et sont calculées sur les seules bougies closes : la bougie en cours ne fait jamais bouger un indicateur.
  • Pour les développeurs : POST /v1/indicators prend la même description en corps JSON, ce qui en fait un outil tout prêt pour votre propre agent IA ; les dix-neuf types et leurs paramètres sont listés plus bas.
  • Où ça tourne : Claude, ChatGPT, Cursor et tout client MCP, y compris les frameworks d’agents qui parlent MCP, comme LangChain ou n8n.

Branchez votre agent IA avec le guide du serveur MCP, ou apprenez-lui BytNode avec les Agent Skills open source.

#L’appel

POST/v1/indicatorsdata_type · indicatorsRéférence complète
Les 1 champs de cette route (d’après le contrat)
indicatorsOne result per indicator of the request, keyed by the `id` you gave it.

Le seul endpoint à prendre un corps JSON : il décrit un calcul, pas une lecture. Les valeurs ne sont ni stockées ni mises en cache. Elles sont produites à chaque appel à partir des bougies closes.

ParamètreTypeDéfautDescription
symbolstringobligatoireL’un des symboles de GET /v1/symbols (sur les deux stablecoins : 200 avec unavailable: not_applicable). 32 caractères au plus.
timeframestringobligatoire1m, 5m, 15m, 30m, 1h, 4h, 1d, 1w. La semaine commence le lundi à 00:00 UTC, comme sur /v1/klines.
limitinteger1Nombre de lignes rendues par indicateur, de 1 à 1000, de la plus récente à la plus ancienne. 1 donne la valeur de la dernière bougie close.
indicatorsarrayobligatoireListe non vide d’objets : { "id", "type", puis les paramètres À PLAT, par exemple "period": 14 }. Cinquante entrées au plus.
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

#Les dix-neuf indicateurs

TypeParamètres (défaut, minimum)Sortie
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

#Les identifiants

Chaque instance porte un id que vous choisissez : c’est la clé de son résultat dans la réponse. N’importe quel nom de 1 à 64 caractères parmi lettres, chiffres, _, - et ., unique dans l’appel : rsi_7, rsi_21, tendance.ema_200.

Un type peut apparaître autant de fois que nécessaire, dans la limite de cinquante indicateurs par appel : cinq moyennes mobiles de périodes différentes, ou trois RSI, côte à côte.

rsiemasmabbatrstochmacdobvadxsarcciwillrmfirocadadosckeltnerdonchianichimoku

Un identifiant absent, mal formé ou en double renvoie 422 invalid_indicator.

#La règle de plafond

Un indicateur a besoin d’un warm-up (des bougies antérieures à la première valeur publiable). La règle est :

Règle
limit + warmup(type, parameters) <= 1000

Au-delà, la requête rend 422. Sur les types à échauffement linéaire, le message donne la période maximale utilisable pour la limit demandée.

TypeWarm-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, constant
ichimokumax(tenkan, kijun, senkou) + kijun
obv, adaucun

#La réponse

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
          }
        ]
      }
    }
  }
}
  • Les clés de data.indicators sont vos identifiants.
  • Chaque entrée rappelle son type et ses paramètres effectifs, valeurs par défaut remplies : vous savez toujours ce qui a été calculé.
  • values est une liste de lignes datées, de la plus récente à la plus ancienne comme toute liste de BytNode : chaque ligne est {time, value}, ou time et les sorties nommées d’un indicateur à plusieurs sorties (macd, signal, histogram ; upper, middle, lower…). time est le début de la bougie de cette ligne.
  • Une valeur non définie sort en null, jamais en NaN.
  • Les sorties à plusieurs clés suivent l’ordre déclaré par le type, pas celui du moteur de calcul.

#Différences de convention

Ces différences viennent de mesures, pas de préférences. Les connaître évite de chercher un bug là où il n’y en a pas.

OBV et AD sont des totaux cumulés sans origine

Les deux cumulent à partir de la première bougie de la fenêtre chargée. Leur niveau absolu n’est pas reproductible d’une requête à l’autre : deux fenêtres différentes donnent deux niveaux différents, et aucun ne correspond au niveau d’un graphique tiers. Seuls la pente, les variations et les divergences avec le prix sont exploitables. adosc n’a pas ce défaut : il est insensible à l’origine.

Ichimoku : une barre d’écart avec TradingView

Les deux senkou sont projetés de kijun barres en avant (26 par défaut). TradingView décale de 25. Une barre d’écart est donc attendue.

Le chikou_span n’est pas exposé : sa définition regarde dans le futur, il vaudrait null sur les dernières bougies, donc toujours null avec limit: 1.

Keltner : une seule longueur

C’est la variante moderne, moyenne mobile exponentielle plus ATR, avec une seule longueur pour les deux. TradingView expose une EMA(20) et un ATR(10) séparés. Une différence assumée.

Donchian inclut la bougie courante

La fenêtre est inclusive, conformément aux fonctions highest et lowest des langages de script de graphiques.

Le MFI n’est pas un RSI du volume

Il est implémenté comme une simple somme glissante, sans le lissage qu’utilise le RSI : son warm-up vaut sa période, pas cinq fois sa période.

#Erreurs

L’ordre de validation est fixe : unité de temps, puis limit, puis symbole, puis analyse des indicateurs, puis règle de plafond, puis lecture des bougies. Le premier échec l’emporte.

CasCode
Clé manquante ou invalide401
Unité de temps invalide, limit hors de 1 à 1000, symbole inconnu422
Liste indicators vide, entrée qui n’est pas un objet422
Clé id ou type manquante, id invalide, type non pris en charge, champ du corps inconnu422
Paramètre inconnu pour le type, mauvais type, sous le minimum422
macd ou adosc avec fast ≥ slow, sar avec acceleration '>' maximum422
Identifiant en double422
Corps mal formé, plus de 50 indicateurs, champ trop long422
limit + warm-up dépasse 1000422
Données insuffisantes pour cette unité de temps, ou historique de volume trop court pour un indicateur de volume422
Débit dépassé429