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 différences de convention assumées.
#L’appel
Le seul endpoint de l’API à 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ètre | Type | Défaut | Description |
|---|---|---|---|
symbol | string | obligatoire | L’un des vingt perpétuels. 32 caractères au plus. |
timeframe | string | obligatoire | 1m, 5m, 15m, 30m, 1h, 4h, 1d, 1w. C’est la seule route qui accepte la semaine. |
results | integer | 1 | Nombre de valeurs renvoyées par indicateur. 1 donne la dernière valeur sur une bougie close. |
indicators | array | obligatoire | Liste non vide d’objets { id, type, parameters }. Cinquante entrées au plus. |
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
| Type | Instances | Paramètres (défaut, minimum) | Sortie |
|---|---|---|---|
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 |
#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-instances
Jusqu’à trois instances par type, avec les suffixes _fast, _mid et _slow (rsi_fast, ema_slow).
rsiemasmabbatrstochadxcciwillrmfirockeltnerdonchianvwma
Six types à instance unique
L’identifiant est exactement le nom du type : macd, ichimoku. Une instance par appel.
macdobvsaradadoscichimoku
Un identifiant en double, mal formé ou incompatible avec son type renvoie 400.
#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 :
results + warmup(type, parameters) <= 1000Au-delà, la requête renvoie 422. Sur les types à warm-up linéaire, le message indique la période maximale utilisable pour le nombre de résultats demandé.
| Type | 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, constant |
| ichimoku | max(tenkan, kijun, senkou) + kijun |
| obv, ad | aucun |
#La réponse
{
"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.indicatorssont vos identifiants. - Chaque entrée rappelle son
typeet ses paramètres effectifs, valeurs par défaut remplies : vous savez toujours ce qui a été calculé. - Les valeurs vont du plus ancien au plus récent.
- Une valeur non définie sort en
null, jamais enNaN. - 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 results: 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.
Le VWMA n’est pas le VWAP
vwma est une moyenne mobile 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 transactions 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 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 nombre de résultats, puis symbole, puis analyse des indicateurs, puis règle de plafond, puis lecture des bougies. Le premier échec l’emporte.
| Cas | Code |
|---|---|
| Clé manquante ou invalide | 403 |
| Unité de temps invalide, results inférieur à 1, symbole inconnu | 400 |
| Liste indicators vide, entrée qui n’est pas un objet | 400 |
| Clé id ou type manquante, id mal formé, type non pris en charge | 400 |
| Paramètre inconnu pour le type, mauvais type, sous le minimum | 400 |
| macd ou adosc avec fast ≥ slow, sar avec acceleration '>' maximum | 400 |
| Identifiant en double | 400 |
| Corps mal formé, plus de 50 indicateurs, champ trop long | 422 |
| results + warm-up dépasse 1000 | 422 |
| Données insuffisantes pour cette unité de temps, stablecoins compris | 422 |
| Débit dépassé | 429 |