Payload webhook TradingView
Champs exacts lus par WebhookIngress quand une alerte TradingView arrive chez TheConnector.
Objectif
Cette page documente le contrat public WebhookIngress pour les alertes TradingView. Ce n'est pas le payload des ordres manuels du dashboard.
Chemin d'accès
- Dans l'espace client :
Mes comptes> ouvrir un compte de trading > copier la clé d'accès. - Dans TradingView :
Alerte>Notifications> collerhttps://webhook.theconnector.fr/VOTRE_CLE_D_ACCESdansWebhook URL. - Dans le champ
Messagede TradingView, coller le message : JSON ou une ligne, au choix.
Deux formats, même résultat
WebhookIngress lit deux formats de message et les traite exactement de la même façon : un objet JSON, ou une seule ligne de texte. Utilisez celui que vous préférez. Sur une ligne, l'action et le symbole viennent d'abord, puis les autres champs sous la forme nom=valeur, séparés par des virgules.
JSON minimal
{
"action": "buy",
"symbol": "EURUSD",
"risk": 1,
"sl": 0.2,
"tp": 0.4,
"priceMode": "percent"
}
priceMode donne l'unité de sl, tp et price dans l'alerte elle-même : price, pips ou percent. Ici, le stop est à 0,2 % de l'entrée et l'objectif à 0,4 %, quel que soit le mode de prix du compte ; sans priceMode, c'est le mode de prix du compte qui s'applique.
Champs lus par WebhookIngress
actionest obligatoire. Alias acceptés, en JSON comme sur une ligne :side,type,command,msgtype.typedésigne la commande, pas un type d'ordre :buyavectype=limitdonne deux commandes différentes, et l'alerte est refusée — un ordre en attente a sa propre commande,buylimit,selllimit,buystopousellstop, avec son prix d'entrée dansprice.symbolest obligatoire pour les commandes trading. Alias acceptés :pair,ticker,instrument,market,asset.riskest transmis comme risque numérique. Pour des lots exacts, utilisezvolume,lot,lots,fixedVolumeousize.slettpsont les noms actuels de stop loss / take profit. Alias acceptés :stoploss,stop_loss,takeprofit,take_profit.pricesert uniquement aux ordres pending :buystop,buylimit,sellstop,selllimit.expiration(aliasexpiry) donne une durée de vie à un ordre en attente, en minutes : le courtier le supprime s'il ne s'est pas déclenché d'ici là, même robot éteint. Exemple :"expiration": 60. Il est ignoré sur les ordres au marché. Il demande le robot 0.0.30 ou plus récent : avec un robot plus ancien, l'alerte est refusée plutôt que de laisser l'ordre en attente sans fin. Si le courtier n'accepte pas d'échéance sur ce symbole, l'ordre est refusé, jamais posé sans elle.priceModefixe l'unité desl,tpetpricepour cette alerte :price,pipsoupercent. Sans lui, le mode de prix du compte s'applique.ticket,orderId,order_id,positionIdouposition_idservent uniquement si l'instruction vise un ordre ou une position connue.account/accountCodeetplatformsont optionnels avec l'URL du compte ; ils servent surtout aux routages partagés.streamIdouidpeut être envoyé pour le suivi. Le serveur le garde dans son propre identifiant, précédé deTV-(17 caractères au plus, tirets changés en_), suivi de_et de 8 caractères. Deux alertes envoyées avec le même identifiant sont donc deux alertes distinctes : la seconde n'est jamais prise pour un doublon. S'il manque, le serveur crée un identifiant.tag(aliascomment) nomme la stratégie à laquelle appartient l'alerte. À l'entrée, il est écrit dans le commentaire de la position chez le courtier ; à la fermeture, il restreint la fermeture aux positions portant ce nom, donc plusieurs stratégies peuvent partager un compte et un symbole. Il est mis en minuscules et coupé à 12 caractères, et il est honoré à partir du robot 0.0.21 — en dessous, une fermeture nommée est refusée plutôt que jouée sur la position d'une autre stratégie. Si vous envoyez votre proprestreamId, il remplace celui qui est généré et le nom n'atteint jamais le commentaire de la position : omettezstreamIdquand vous utilisez des noms.clientRequestedAtUtc,requestedAtUtcourequestedAtpeuvent être envoyés comme horodatage UTC informatif.
Le même message sur une ligne
Le même ordre que ci-dessus, écrit sur une seule ligne :
buy,EURUSD,risk=1,sl=0.2,tp=0.4,priceMode=percent
À ne pas envoyer
Ne vous basez pas sur ttl_ms : le parser WebhookIngress actuel ne le lit pas. vol_lots est lu comme volume. Chaque prix garde l'unité dans laquelle il est écrit : un suffixe fixe l'unité de cette seule valeur (sl_pips, sl_price, sl_pct, tp_pips, tp_price, tp_pct, et entry_pips, entry_price, entry_pct pour l'entrée d'un ordre en attente) ; sl, tp et price sans suffixe prennent le priceMode (ou unit) écrit dans l'alerte, sinon le mode de prix du compte. Le robot applique une seule unité à tout l'ordre : une alerte dont les prix demandent deux unités est donc refusée, jamais envoyée sans son stop ou son objectif — sl_pips avec tp_price, ou sl sans suffixe à côté de tp_pips (même sur un compte réglé en pips ; ajoutez priceMode=pips). Mettez un suffixe sur tous les prix, ou sur aucun. Une alerte qui écrit deux fois le même champ avec deux valeurs différentes est refusée elle aussi (sl=10 puis sl=20, ou "type":"sell" avec "action":"buy") ; la même valeur deux fois compte pour une.
Alertes écrites pour WebhookTrade
Une alerte au format WebhookTrade est lue telle quelle pour symbol, action (buy_limit, sell_stop…), price, stop_loss, take_profit, size (lots) et expiration (minutes) ; comment nomme la stratégie, comme tag ; username, api_key, broker et account_type sont ignorés. Parmi leurs actions de clôture, close_all est lu comme closeall ; à la place de close_buy, close_sell et close_pending, envoyez closelong, closeshort, ou cancellong et cancelshort. Leurs autres paramètres de stop, d'objectif, de taille, de trailing et de point mort — sl_percentage, tp_percentage, sl_distance, tp_distance, sl_distance_price, tp_distance_price, stop_amount, profit_amount, size_percentage, risk_percentage, size_multiplier, ts_…, breakeven_… — font refuser l'alerte, avec un message qui les nomme : jouée sans eux, l'ordre partirait sans son stop ou à une autre taille. Écrivez-les avec sl / tp et priceMode, volume ou risk, et betrigger / trailtrig / traildist.
Vous avez déjà des alertes ? Gardez-les
Inutile de réécrire vos alertes. Un message d'une ligne fonctionne tel quel, même s'il commence par un identifiant de licence : dans chaque alerte TradingView, remplacez seulement l'URL du webhook par la vôtre, celle qui se termine par votre clé d'accès. La valeur placée avant la commande est alors ignorée, et les noms de paramètres comme sl_pips, tp_price ou vol_lots sont traduits automatiquement. Une exception : une alerte qui mélange les unités de prix (sl_pips avec tp_price, par exemple) est désormais refusée : écrivez tous les prix dans la même unité.