Tradovate API

Clôturer et liquider des positions via l'API Tradovate

Tout trader automatisé connaît ce moment : votre stratégie détient une position et vous devez sortir de tout, immédiatement. Voici comment l'appel liquidatePosition de l'API Tradovate remet un contrat ouvert à zéro, de la récupération de l'ID de votre compte à la clôture de l'ensemble du compte.

On This Page

Tout trader automatisé connaît ce moment : votre stratégie détient une position, le marché se retourne contre vous et vous devez sortir de tout maintenant. Chercher le bouton de clôture sur une page web est trop lent. C'est précisément le rôle de l'appel liquidatePosition de l'API Tradovate. Une seule requête remet un contrat ouvert à zéro, sans aucun clic manuel dans le DOM. Ce guide vous accompagne sur tout le parcours, de la récupération de l'ID de votre compte jusqu'à la boucle sur toutes les positions ouvertes, pour que le compte finisse totalement à plat.

Un mot sur ce que fait réellement ce point d'accès : il n'annule pas un ordre en attente et ne « vend » pas simplement quelques contrats. Il recherche la position nette que vous détenez sur un contrat et soumet un ordre au marché en sens inverse pour ramener cette position nette à zéro. Comme il s'agit d'un ordre réel, il n'est exécuté que lorsque la session du contrat est ouverte.

Avant de commencer

  • Un accès API et un jeton valide. Vous devez avoir activé API Access sur le compte et disposer d'un jeton d'accès valide. Si ce n'est pas encore fait, commencez par obtenir l'accès à l'API Tradovate et une clé.
  • Le bon environnement. Démo et réel sont des hôtes distincts : demo.tradovateapi.com/v1 pour la simulation, live.tradovateapi.com/v1 pour l'argent réel. Si vous utilisez un jeton de démo sur l'hôte réel (ou l'inverse), vous obtiendrez « Access is denied ».
  • L'autorisation d'ordre sur ce compte. Le jeton doit appartenir à un utilisateur autorisé à passer des ordres sur le compte que vous clôturez.
  • Règles des comptes prop. Certaines prop firms désactivent l'automatisation API directe sur leurs comptes d'évaluation. Vérifiez les règles actuelles de votre firme avant de développer sur un compte financé.

Clôturer et liquider des positions via l'API Tradovate : pas à pas

1

Authentifiez-vous et conservez votre jeton

Chaque appel nécessite un jeton Bearer. Envoyez vos identifiants à /auth/accessTokenRequest et extrayez l'accessToken de la réponse. Les jetons n'ont pas une durée illimitée : si votre processus tourne longtemps, appelez /auth/renewAccessToken avant l'expiration du jeton actuel plutôt que d'attendre un 401. Sur chaque requête suivante, joignez l'en-tête Authorization: Bearer YOUR_ACCESS_TOKEN.

2

Récupérez l'ID numérique de votre compte

La liquidation repose sur un ID de compte numérique, et non sur le surnom du compte affiché dans l'application. Envoyez un GET à /account/list et vous obtiendrez un tableau des comptes visibles par votre utilisateur. Récupérez le champ id (un nombre comme 2100) du compte à clôturer. Si vous avez plusieurs comptes, faites la correspondance sur le champ name, puis utilisez l'id de cette ligne.

3

Trouvez vos positions ouvertes et leurs ID de contrat

Vous ne pouvez pas liquider un contrat que vous ne pouvez pas nommer. Appelez /position/list et regardez deux champs sur chaque ligne : contractId et netPos. netPos est le nombre signé de contrats détenus. Positif signifie long, négatif signifie short, et zéro signifie que vous êtes déjà à plat sur ce contrat. Toute ligne dont netPos n'est pas nul est une position ouverte que vous pouvez vouloir clôturer. Notez le contractId. Si vous souhaitez un symbole lisible pour vos journaux, transmettez cet ID à /contract/item?id={contractId}.

4

Déclenchez la liquidation

Voici l'appel proprement dit. Envoyez un POST à /order/liquidatePosition avec l'ID de compte et l'ID de contrat que vous venez de récupérer, en envoyant dans le corps accountId, contractId et un booléen admin. Quelques points font souvent trébucher ici.

5

Tout clôturer, puis confirmer

L'API REST ne propose pas de bouton unique « tout fermer ». Pour mettre tout le compte à plat, vous devez boucler. Récupérez /position/list, gardez les lignes dont netPos n'est pas nul et appelez /order/liquidatePosition une fois par contractId. Deux contrats ouverts ? Deux appels. Ensuite, vérifiez. Récupérez de nouveau /position/list et chaque netPos doit afficher 0. Il est aussi utile de consulter /order/list pour vous assurer que les ordres bracket ou OCO liés à ces positions ont bien été supprimés, afin qu'un stop résiduel ne vous rouvre pas une position plus tard.

Champ Description
accountIdObligatoire. L'id numérique de l'étape 2.
contractIdObligatoire, et doit être supérieur à 0. Passer 0 déclenche « contractId must be > 0 ». Utilisez l'ID réel provenant de /position/list.
adminUn booléen attendu dans le corps. Les comptes ordinaires passent false. L'omettre est la cause classique d'une erreur 400.
customTag50Facultatif. Une courte chaîne servant d'étiquette pour votre propre suivi.

Le serveur détermine lui-même votre position nette et soumet l'ordre au marché pour la clôturer. Si la position est déjà revenue à plat entre votre vérification et cet appel, vous obtenez une opération sans effet plutôt qu'un trade inverse accidentel : inutile donc de synchroniser parfaitement les deux.

Quand ça ne fonctionne pas

La plupart des échecs se résument à trois causes. Une erreur 401 « Access is denied » signifie presque toujours un mauvais hôte d'environnement, un mauvais ID de compte ou un utilisateur sans autorisation d'ordre sur ce compte. contractId must be > 0 signifie que vous avez envoyé une valeur factice au lieu d'un vrai ID. Et une simple erreur 401 avec un jeton expiré demande seulement un renouvellement. Si l'ordre de liquidation lui-même est rejeté, la raison est généralement celle qui bloque n'importe quel ordre : consultez donc le guide général sur access denied lors d'un place order et vérifiez que le marché est ouvert.

Automatisez tout cela avec PickMyTrade

Vous ne voulez pas gérer vous-même les jetons, les boucles de positions et la logique de liquidation ? PickMyTrade relie vos alertes TradingView directement à Tradovate : entrées, sorties et commandes de clôture s'exécutent automatiquement, sans que vous écriviez une seule ligne de code API.

Oubliez les boucles de liquidation

Laissez PickMyTrade relier vos alertes TradingView directement à Tradovate : entrées, sorties et commandes de clôture s'exécutent automatiquement.

Commencez votre essai gratuit de 7 jours

Questions fréquentes

Le plus souvent, il s'agit d'un mauvais hôte d'environnement, d'un mauvais ID de compte ou d'un utilisateur sans autorisation d'ordre sur ce compte. Les jetons de démo ne fonctionnent qu'avec demo.tradovateapi.com/v1, et les jetons réels uniquement avec live.tradovateapi.com/v1.

Vous avez envoyé une valeur factice au lieu d'un véritable ID de contrat. Récupérez le contractId réel depuis /position/list avant d'appeler liquidatePosition.

Non. Il ne fait que rechercher votre position nette sur un contrat et soumettre un ordre au marché de sens opposé pour la ramener à zéro. Après la liquidation, vérifiez séparément /order/list pour confirmer que les ordres bracket ou OCO liés à cette position ont bien été supprimés.

Ce guide est fourni à des fins exclusivement éducatives et informatives et ne constitue pas un conseil financier, d'investissement ou de trading. Le trading de contrats à terme et d'autres produits à effet de levier comporte un risque de perte important et ne convient pas à tous les investisseurs. PickMyTrade est une plateforme d'automatisation tierce indépendante et n'est ni affiliée à Tradovate, Inc., ni approuvée ou parrainée par cette dernière. « Tradovate » ainsi que tous les noms, logos et marques associés sont la propriété de leurs détenteurs respectifs. Les fonctionnalités et les étapes de la plateforme évoluent avec le temps ; vérifiez donc toujours la procédure en vigueur dans la plateforme et la documentation officielles de Tradovate avant d'agir.