Automation

Binance Futures + n8n : automatiser vos ordres via webhook signé

·8 min de lecture

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.
  • sideBUY pour LONG, SELL pour SHORT.
  • typeMARKET pour exécution immédiate, LIMIT si vous voulez du contrôle.
  • quantity — calculée à partir du score et de votre position sizing (typiquement 1-3 % du capital par signal).
  • timestamp et signature — 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.

Prêt à automatiser vos signaux ?

Essai 7 jours — 69 €/mois, résiliable en 1 clic.

Découvrir Kinetic Flow →