Connecter un signal de trading à Binance Futures via n8n est le moyen le plus rapide de passer d'une idée à un ordre exécuté — sans écrire un bot from scratch, et sans jamais exposer vos clés API dans le navigateur. Ce guide décrit l'architecture non-custodial exacte que nous utilisons chez Kinetic Flow, avec un webhook signé HMAC-SHA256.
Pourquoi passer par un webhook n8n plutôt qu'un bot maison ?
Un bot maison qui parle directement à l'API Binance vous oblige à héberger vos clés secrètes quelque part — souvent dans le même processus que votre logique de détection. Une seule fuite, un seul console.log oublié, et un attaquant peut vider votre compte de futures.
L'approche n8n renverse le problème. Le screener (côté navigateur ou serveur) ne connaît aucune clé Binance. Il envoie uniquement un payload signé à votre instance n8n privée. n8n valide la signature, puis exécute l'ordre avec des clés qui ne sortent jamais de votre VPS.
Architecture non-custodial recommandée
Screener ── HTTPS POST + HMAC ──▶ n8n webhook ──▶ Binance Futures API
(aucune clé) (clés API) (exécution)Les trois briques :
- Détection — un screener qui calcule un score et décide LONG/SHORT.
- Transport signé — un POST HTTPS avec header
X-Kinetic-Signature. - Exécution — un workflow n8n qui valide, mappe et appelle Binance.
Payload JSON minimum
{
"symbol": "BTCUSDT",
"side": "LONG",
"score": 87,
"energy": 82340,
"threshold": 50000,
"timestamp": 1719321600000,
"mode": "live"
}Signature HMAC-SHA256 côté émetteur
La signature protège contre deux attaques : la falsification (un attaquant qui forge un ordre) et le rejeu (un attaquant qui rejoue un vieux payload). On signe {timestamp}.{body} et on rejette côté n8n tout timestamp de plus de 60 secondes.
const timestamp = Date.now().toString();
const body = JSON.stringify(payload);
const signature = await hmacSha256(secret, `${timestamp}.${body}`);
await fetch("https://n8n.exemple.com/webhook/kinetic", {
method: "POST",
headers: {
"Content-Type": "application/json",
"X-Kinetic-Signature": signature,
"X-Kinetic-Timestamp": timestamp,
},
body,
});Vérification côté n8n
Dans un node Function placé juste après le Webhook trigger :
const crypto = require("crypto");
const secret = $env.KINETIC_SECRET;
const ts = $input.first().headers["x-kinetic-timestamp"];
const sig = $input.first().headers["x-kinetic-signature"];
const body = JSON.stringify($input.first().json);
const expected = crypto
.createHmac("sha256", secret)
.update(`${ts}.${body}`)
.digest("hex");
if (sig !== expected) throw new Error("Invalid signature");
if (Date.now() - Number(ts) > 60_000) throw new Error("Stale request");
return $input.all();Mapping vers l'ordre Binance Futures
Un node HTTP Request configuré pour POST /fapi/v1/order avec ces paramètres :
symbol— recopié depuis le payload.side—BUYpour LONG,SELLpour SHORT.type—MARKETpour exécution immédiate,LIMITsi vous voulez du contrôle.quantity— calculée à partir duscoreet de votre position sizing (typiquement 1-3 % du capital par signal).timestampetsignature— générés par n8n avec vos clés API Binance stockées en variable d'environnement.
Gestion d'erreur et idempotence
Deux réflexes indispensables : (1) ajouter un newClientOrderId déterministe basé sur {symbol}-{timestamp} pour éviter les doubles ordres si n8n retry ; (2) logger chaque exécution dans un node Google Sheets ou Postgres pour l'audit — vous devez pouvoir tracer chaque ordre à son signal source.
Ce que Kinetic Flow apporte au-dessus
Écrire ce pipeline demande quelques heures. Le maintenir — surveiller les slippages, ajuster le seuil, gérer les pannes n8n, monitorer la latence — est un travail continu. Kinetic Flow fournit le screener, la signature, le template n8n prêt à importer et un dashboard opérationnel temps réel. Vous gardez vos clés, nous fournissons le signal.