Tradovate API

WS Tradovate abonné mais aucune cotation (pas de données)

Votre appel md/subscribeQuote renvoie un 200 propre, et pourtant rien n'est diffusé hormis des heartbeats. Vérifiez l'indicateur hasMarketData du compte, c'est presque toujours la vraie explication.

On This Page

Vous avez câblé le WebSocket Tradovate, vous vous êtes autorisé proprement, lancé md/subscribeQuote et reçu un net {"s":200,"i":1}, succès. Puis plus rien. Juste une série interminable de trames de heartbeat h et pas une seule trame de données a portant un bid ou un ask. Inspectez le compte et une ligne explique tout : "hasMarketData": false. Le socket fait exactement ce que vous lui avez dit ; le compte n'est simplement pas habilité à recevoir des cotations en direct. C'est l'un des écueils les plus déroutants de l'API Tradovate précisément parce que chaque ligne de journal indique “OK” alors que votre flux de prix reste totalement muet. Voici le détail complet, ce que signifie l'indicateur, pourquoi cela arrive et comment réactiver les cotations.

Liste de contrôle rapide en l'absence de cotations en temps réel

  • "hasMarketData": false sur le compte, le compte n'a aucun droit aux données de marché en direct. Activez ou souscrivez les données de marché avant d'attendre des trames de données a.
  • Mauvais socket, les cotations viennent du WebSocket de données de marché (md.tradovateapi.com), pas du socket de trading (live.tradovateapi.com). Abonnez-vous sur le mauvais et vous n'obtenez que des heartbeats.
  • Mauvais jeton, le socket de données de marché doit être autorisé avec le mdAccessToken, pas avec le accessToken de trading.
  • Flux démo/simulé, un compte démo ou d'évaluation peut servir des données différées ou simulées au lieu du temps réel de la bourse. Confirmez le forfait de données du compte.
  • Mauvais symbole, abonnez-vous à un contrat valide du mois en cours (p. ex. MNQU5), pas à un alias continu, sinon vous pourriez obtenir "Symbol is inaccessible."
  • Compte prop/financé, sur les comptes d'évaluation, seule la prop firm peut activer les données en direct. Vous ne pouvez pas vous abonner vous-même.

Ce que signifie "hasMarketData": false

hasMarketData est un indicateur au niveau du compte que Tradovate renvoie dans les paramètres de votre compte. Lorsqu'il vaut true, le compte détient un droit actif aux données de marché, de sorte que le flux de cotations en temps réel de la bourse est autorisé à lui parvenir. Lorsqu'il vaut false, le compte n'a aucun accord ni abonnement de données de marché en direct, et ce seul indicateur prime sur tout le reste en aval.

L'essentiel est de comprendre que le droit et l'abonnement sont deux couches distinctes. md/subscribeQuote renvoyant {"s":200} confirme seulement que la requête d'abonnement était bien formée et acceptée par le socket. Cela ne dit rien sur le fait que le compte soit habilité à recevoir les données derrière cet abonnement. Vous tombez donc dans le piège exact que décrit l'indicateur : un abonnement valide, “réussi”, qui produit zéro trame a parce que le compte n'a jamais été autorisé à recevoir des prix en direct.

Pour le dire simplement : le tuyau est branché et ouvert, mais le robinet en amont est fermé. L'ouvrir est une action de compte et de droits, pas un correctif de code, aucun réabonnement ne fera basculer un indicateur false.

Principales causes d'absence de cotations via le WebSocket

1. Le compte n'a aucun droit aux données de marché en direct (hasMarketData: false)

C'est la cause racine que l'indicateur rapporte littéralement. Les cotations de futures en temps réel sont des données sous licence de bourse. Pour les recevoir, le compte a besoin d'un abonnement actif aux données de marché ainsi que de l'accord de données boursier correspondant, pour les produits CME, c'est l'accord CME non professionnel ou professionnel. Tant que ce droit n'existe pas, la bourse ne libérera aucun tick en direct vers le compte, et le socket n'a donc rien à transmettre.

2. S'abonner sur le socket de trading au lieu du socket de données de marché

Tradovate exploite deux connexions WebSocket distinctes. Le routage des ordres et les données de compte transitent par le socket de trading (wss://live.tradovateapi.com/v1/websocket, ou wss://demo.tradovateapi.com/... en démo). Les cotations, le DOM et les graphiques transitent par le socket de données de marché (wss://md.tradovateapi.com/v1/websocket, ou wss://md-demo.tradovateapi.com/... en démo). Envoyez md/subscribeQuote au socket de trading et vous pouvez tout de même obtenir un accusé 200 plus des heartbeats, mais les trames a en temps réel n'arrivent jamais, car ce socket ne sert pas de données de marché.

3. Autoriser le socket de données de marché avec le mauvais jeton

Lors de l'authentification, Tradovate renvoie deux jetons : accessToken pour le socket de trading et mdAccessToken pour le socket de données de marché. Chaque socket doit être autorisé avec son propre jeton via la trame authorize après son ouverture. Autorisez le socket md avec le accessToken de trading et la connexion se comporte comme si elle n'avait jamais été correctement habilitée : des heartbeats, mais aucune cotation.

4. Vous êtes sur un flux démo/simulé ou différé

Un environnement neuf ou de démo livre souvent des données simulées ou différées plutôt qu'un flux boursier en temps réel. C'est pourquoi les tests sur le point de terminaison démo montrent si souvent un abonnement propre suivi d'aucun tick en direct, l'environnement n'est tout simplement pas relié à un flux temps réel payant et habilité. Confirmez si le compte est censé disposer de données boursières en direct avant de supposer un bug de code.

5. Symbole invalide ou "Symbol is inaccessible"

Même avec le droit en place, s'abonner à un symbole pour lequel votre compte n'est pas licencié, ou à un symbole continu/alias au lieu d'un vrai contrat du mois en cours, peut renvoyer une erreur Symbol is inaccessible et aucune donnée. Abonnez-vous toujours au contrat actuel du mois en cours en utilisant le bon code de mois CME (par exemple MNQU5), pas à une racine générique ni à un alias de graphique.

Comment corriger l'absence de cotations via le WebSocket : pas à pas

Corriger le droit (passer hasMarketData à true)

1

Connectez-vous à la plateforme web

Connectez-vous à la plateforme web Tradovate avec le même compte que celui que vous connectez via l'API.

2

Ouvrez les paramètres de données de marché

Ouvrez les paramètres du compte/des données de marché et repérez la section d'abonnement aux données de marché.

3

Ajoutez un abonnement temps réel et signez l'accord

Ajoutez un abonnement aux données de marché en temps réel pour la ou les bourses que vous tradez (CME pour ES, NQ, MNQ, MES, etc.) et remplissez puis signez l'accord de données boursier requis, non professionnel pour la plupart des traders particuliers. Le niveau correct et les frais actuels varient, consultez donc les tarifs actuels de Tradovate.

4

Déconnectez-vous puis reconnectez-vous pour propager

Enregistrez, puis déconnectez-vous complètement et reconnectez-vous pour que le droit se propage. Interrogez à nouveau le compte et confirmez "hasMarketData": true.

Corriger le câblage du socket et du jeton

1

Ouvrez un second WebSocket vers l'hôte de données de marché

Ouvrez un second WebSocket vers l'hôte de données de marché : wss://md.tradovateapi.com/v1/websocket (utilisez md-demo.tradovateapi.com pour l'environnement démo).

2

Autorisez avec mdAccessToken

Après la trame open o, envoyez une trame authorize avec le mdAccessToken de votre réponse d'authentification, pas avec le accessToken de trading.

3

Abonnez-vous à un symbole valide du mois en cours

Attendez l'accusé 200 de l'autorisation, puis envoyez md/subscribeQuote avec un symbole valide du mois en cours (p. ex. MNQU5).

4

Surveillez les trames

Surveillez les trames : les heartbeats arrivent sous la forme h ; les vraies cotations arrivent désormais sous forme de trames de données a contenant bid/ask/last. Si vous ne voyez encore que h, c'est le droit (étape ci-dessus) qui vous bloque, pas le câblage.

Corriger un compte prop / d'évaluation

1

Ne vous abonnez pas vous-même

Si le compte est une évaluation ou un compte financé d'une prop firm, n'essayez pas de vous abonner vous-même, la société provisionne les données de façon centralisée.

2

Contactez le support de la prop firm

Contactez le support de la prop firm et demandez-lui d'activer ou de réparer les données de marché en direct sur votre compte.

3

Revérifiez après confirmation

Une fois qu'elle l'a confirmé, déconnectez-vous, reconnectez-vous et revérifiez hasMarketData.

Remarque propre à l'API

Les données en temps réel programmatiques via l'API entraînent leur propre licence boursière en plus des données de la plateforme. Selon votre usage et la bourse, cela peut exiger le statut de fournisseur de données de marché enregistré et des frais de licence récurrents, le montant varie selon la bourse et change avec le temps, confirmez donc le chiffre actuel CME/Tradovate avant de budgéter. Si vous voulez seulement passer des ordres, vous pouvez les router sur des données différées gratuites et ignorer complètement la licence temps réel.

Tableau de dépannage

Symptôme / erreur Signification Correctif
"hasMarketData": false dans les paramètres du compteLe compte n'a aucun droit aux données de marché en directAjouter un abonnement aux données de marché en temps réel et signer l'accord de données boursier, puis se reconnecter
Subscribe renvoie {"s":200} mais seulement des trames hAbonnement accepté mais aucune donnée autorisée/servieVérifier que le droit vaut true, le bon socket et le bon jeton
Uniquement des heartbeats sur live.tradovateapi.comAbonné sur le socket de tradingOuvrir le socket de données de marché md.tradovateapi.com et s'y abonner
Les cotations échouent après l'autorisationSocket md autorisé avec le jeton de tradingAutoriser le socket md avec mdAccessToken, pas accessToken
Symbol is inaccessiblePas de droit pour ce symbole, ou symbole invalide/continuUtiliser un contrat du mois en cours sous licence avec le bon code de mois
Les ticks en direct n'arrivent jamais en démoFlux démo/simulé ou différéConfirmer que le compte est censé porter un flux temps réel habilité
Le compte prop/d'évaluation n'affiche aucune donnéeSeule la société peut activer les donnéesDemander à la prop firm d'activer les données de marché en direct

Évitez cela avec PickMyTrade

Si votre objectif est d'automatiser Tradovate depuis TradingView plutôt que de construire à la main un socket de données de marché brut, PickMyTrade contourne l'essentiel de tout cela en acheminant vos alertes TradingView directement vers votre compte Tradovate pour exécution :

  • Aucun socket de données de marché brut à câbler, PickMyTrade agit sur vos signaux TradingView, vous n'avez donc pas à maintenir des flux md/subscribeQuote ni à jongler avec deux sockets et deux jetons.
  • Attentif aux droits et aux accords de données, le routage des ordres respecte l'état des données en direct et de l'accord du compte, de sorte que vous n'êtes pas pris au dépourvu par un hasMarketData: false silencieux.
  • Routage respectueux des limites de débit, le flux d'ordres est espacé afin que rien ne rebondisse sur les limites de requêtes de Tradovate.
  • Synchronisation multi-comptes, répliquez le même ordre automatisé sur plusieurs comptes Tradovate à la fois.

Automatisez sans le socket brut

Commencez votre essai gratuit de 7 jours et automatisez Tradovate depuis TradingView sans construire à la main un socket de données de marché.

Commencez votre essai gratuit de 7 jours

Questions fréquentes

Elle signifie que la requête d'abonnement a été acceptée par le socket, pas que des données circulent. Si hasMarketData vaut false, vous ne recevrez toujours que des trames de heartbeat h et aucune trame de données a.

C'est un indicateur au niveau du compte que Tradovate renvoie dans les paramètres du compte. True signifie que le compte dispose d'un droit actif aux données de marché en direct ; false signifie qu'aucune donnée de bourse en temps réel n'est autorisée pour lui.

Les trames de heartbeat (h) ne font que maintenir la connexion en vie. Les vraies cotations arrivent sous forme de trames de données a, et elles ne sont diffusées que si le compte est habilité et que vous êtes abonné sur le bon socket de données de marché avec le bon jeton.

Sur le socket dédié aux données de marché, wss://md.tradovateapi.com/v1/websocket (ou md-demo.tradovateapi.com en démo). Le socket de trading sur live.tradovateapi.com ne sert pas de cotations.

Utilisez le mdAccessToken pour autoriser le socket de données de marché. Le accessToken simple est destiné au socket de trading.

Les cotations de bourse en temps réel nécessitent un abonnement aux données de marché et l'accord de données de la bourse. L'accès programmatique par API peut entraîner des frais de licence boursière supplémentaires. Les montants varient selon la bourse et changent avec le temps, consultez les tarifs actuels de Tradovate.

Sur la plupart des comptes prop/d'évaluation, vous ne pouvez pas vous abonner vous-même. Contactez le support de la prop firm et demandez-lui d'activer les données de marché en direct, puis déconnectez-vous et reconnectez-vous.

Non. Vous pouvez soumettre des ordres avec des données différées gratuites et ignorer complètement la licence de données de marché en temps réel, le droit sert surtout à contrôler l'accès aux cotations et aux graphiques en direct.

Ce guide est fourni à des fins exclusivement éducatives et informatives et ne constitue ni un conseil financier, ni un conseil en investissement, ni un conseil 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.