API REST

Indicateurs techniques

Vingt types d’indicateurs classiques, calculés à la demande sur les bougies de la référence de prix. Jusqu’à cinquante instances par appel, chacune avec ses propres paramètres. La précision est calibrée sur TradingView à 0,1 % près, sauf sur les deux indicateurs cumulatifs et sur trois écarts de convention assumés.

#L’appel

POST/v1/indicatorsdata_type · indicators

Seul endpoint de l’API à recevoir 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 sur les bougies fermées.

ParamètreTypeDéfautDescription
symbolstringrequisUn des dix perpétuels. 32 caractères au maximum.
timeframestringrequis1m, 5m, 15m, 30m, 1h, 4h, 1d, 1w. C’est la seule route qui accepte la semaine.
resultsinteger1Nombre de valeurs rendues par indicateur. 1 donne la dernière valeur sur bougie fermée.
indicatorsarrayrequisListe non vide d’objets { id, type, paramètres }. Cinquante entrées au maximum.
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

#Les vingt indicateurs

TypeInstancesParamètres (défaut, minimum)Sortie
rsimultiperiod (14, ≥ 2)valeur
emamultiperiod (20, ≥ 2)valeur
smamultiperiod (20, ≥ 2)valeur
bbmultiperiod (20, ≥ 2), std (2.0, ≥ 0.5)upper, middle, lower
atrmultiperiod (14, ≥ 2)valeur
stochmultik (14, ≥ 2), d (3, ≥ 2), smooth (3, ≥ 2)k, d
macdmonofast (12, ≥ 2), slow (26, ≥ 5), signal (9, ≥ 2) — fast < slowmacd, signal, histogram
obvmonoaucunvaleur
adxmultiperiod (14, ≥ 2)valeur
sarmonoacceleration (0.02, ≥ 0.01), maximum (0.2, ≥ 0.05) — acceleration ≤ maximumvaleur
ccimultiperiod (20, ≥ 2)valeur
willrmultiperiod (14, ≥ 2)valeur
mfimultiperiod (14, ≥ 2)valeur
rocmultiperiod (10, ≥ 2)valeur
admonoaucunvaleur
adoscmonofast (3, ≥ 2), slow (10, ≥ 5) — fast < slowvaleur
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)valeur

#Les identifiants

Chaque instance porte un id que vous choisissez, et qui sert de clé dans la réponse. Sa forme est contrainte, pour que trois RSI de périodes différentes restent distinguables sans convention maison.

Quatorze types multi-instance

Jusqu’à trois instances par type, avec les suffixes _fast, _mid et _slow rsi_fast, ema_slow.

rsiemasmabbatrstochadxcciwillrmfirockeltnerdonchianvwma

Six types mono-instance

L’identifiant est exactement le nom du type — macd, ichimoku. Une seule instance par appel.

macdobvsaradadoscichimoku

Un identifiant dupliqué, mal formé, ou incompatible avec son type rend 400.

#La règle de plafond

Un indicateur a besoin d’un amorçage — des bougies antérieures à la première valeur publiable. La règle est :

Règle
results + amorcage(type, parametres) <= 1000

Au-delà, la requête rend 422. Sur les types à amorçage linéaire, le message indique la période maximale utilisable pour le nombre de résultats demandé.

TypeAmorçage
rsi, atr, keltner5 × période
ema3 × période
sma, bb, cci, willr, roc, donchian, vwma, mfipériode
stochk + d + smooth
macd3 × slow + signal
adosc6 × slow
adx14 × période
sar200, constante
ichimokumax(tenkan, kijun, senkou) + kijun
obv, adaucun

#La réponse

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] }
      }
    }
  }
}
  • Les clés de data.indicators sont vos identifiants.
  • Chaque entrée reprend son type et ses paramètres effectifs, défauts remplis : vous savez toujours ce qui a été calculé.
  • Les valeurs vont de l’ancien vers le récent.
  • Une valeur indé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.

#Écarts de convention

Ces écarts 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 cumuls sans origine

Les deux cumulent depuis 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. Seules 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ées de kijun barres vers l’avant — 26 par défaut. TradingView décale de 25. Un écart d’une barre est donc attendu.

Le chikou_span n’est pas exposé : sa définition regarde vers l’avenir, il vaudrait null sur les dernières bougies — donc toujours null avec results: 1.

Keltner : une seule longueur

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

VWMA n’est pas le VWAP

vwma est une moyenne glissante pondérée par le volume, calculée sur les bougies de la référence de prix. /v1/vwap agrège au contraire les trades de toutes les places. Sources et fenêtres différentes : un écart entre les deux n’est pas une incohérence.

Donchian inclut la bougie courante

La fenêtre est inclusive, conformément aux fonctions de plus haut et de plus bas des langages de script de graphique.

MFI n’est pas un RSI de volume

Il est implémenté en somme glissante simple, sans le lissage employé par le RSI : son amorçage vaut sa période, pas cinq fois sa période.

#Erreurs

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

CasCode
Clé absente ou invalide403
Pas de temps invalide, results inférieur à 1, symbole inconnu400
Liste indicators vide, entrée qui n’est pas un objet400
Clé id ou type manquante, id mal formé, type non supporté400
Paramètre inconnu pour le type, mauvais type, sous le minimum400
macd ou adosc avec fast ≥ slow, sar avec acceleration > maximum400
Identifiant dupliqué400
Corps malformé, plus de 50 indicateurs, champ trop long422
results + amorçage dépasse 1000422
Données insuffisantes pour ce pas de temps, stablecoins compris422
Débit dépassé429