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
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ètre | Type | Défaut | Description |
|---|---|---|---|
symbol | string | requis | Un des dix perpétuels. 32 caractères au maximum. |
timeframe | string | requis | 1m, 5m, 15m, 30m, 1h, 4h, 1d, 1w. C’est la seule route qui accepte la semaine. |
results | integer | 1 | Nombre de valeurs rendues par indicateur. 1 donne la dernière valeur sur bougie fermée. |
indicators | array | requis | Liste 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
| Type | Instances | Paramètres (défaut, minimum) | Sortie |
|---|---|---|---|
rsi | multi | period (14, ≥ 2) | valeur |
ema | multi | period (20, ≥ 2) | valeur |
sma | multi | period (20, ≥ 2) | valeur |
bb | multi | period (20, ≥ 2), std (2.0, ≥ 0.5) | upper, middle, lower |
atr | multi | period (14, ≥ 2) | valeur |
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 | aucun | valeur |
adx | multi | period (14, ≥ 2) | valeur |
sar | mono | acceleration (0.02, ≥ 0.01), maximum (0.2, ≥ 0.05) — acceleration ≤ maximum | valeur |
cci | multi | period (20, ≥ 2) | valeur |
willr | multi | period (14, ≥ 2) | valeur |
mfi | multi | period (14, ≥ 2) | valeur |
roc | multi | period (10, ≥ 2) | valeur |
ad | mono | aucun | valeur |
adosc | mono | fast (3, ≥ 2), slow (10, ≥ 5) — fast < slow | valeur |
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) | 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 :
results + amorcage(type, parametres) <= 1000Au-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é.
| Type | Amorçage |
|---|---|
| rsi, atr, keltner | 5 × période |
| ema | 3 × période |
| sma, bb, cci, willr, roc, donchian, vwma, mfi | période |
| stoch | k + d + smooth |
| macd | 3 × slow + signal |
| adosc | 6 × slow |
| adx | 14 × période |
| sar | 200, constante |
| 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 reprend son
typeet 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 enNaN. - 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.
| Cas | Code |
|---|---|
| Clé absente ou invalide | 403 |
| Pas 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 supporté | 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 dupliqué | 400 |
| Corps malformé, plus de 50 indicateurs, champ trop long | 422 |
| results + amorçage dépasse 1000 | 422 |
| Données insuffisantes pour ce pas de temps, stablecoins compris | 422 |
| Débit dépassé | 429 |