S’abonner aux données de marché via l’API Tradovate
Vous voulez recevoir des bids, des offers et des transactions en direct dans votre propre code ? Voici le chemin exact entre le jeton d’accès et un flux de cotations opérationnel, ainsi que les deux erreurs qui piègent presque tout le monde.
On This Page
Vous voulez recevoir des bids, des offers et des transactions en direct dans votre propre code plutôt que dans l’application Trader ? Tradovate les fournit via un WebSocket, mais pas celui que la plupart essaient en premier. Si vous vous trompez de point d’accès, chaque abonnement renvoie un énigmatique Not found: md/subscribeQuote. Voici le chemin exact entre le jeton d’accès et un flux de cotations opérationnel, ainsi que les deux erreurs qui piègent presque tout le monde.
Pourquoi un socket de données de marché distinct ?
Tradovate répartit son trafic en temps réel sur deux WebSockets. L’un transporte les événements de votre compte et de vos ordres ; l’autre les données de marché, cotations, profondeur du DOM, graphiques et histogrammes. Ils parlent le même protocole de trames, mais résident sur des hôtes différents. Les points d’accès de données de marché comme md/subscribeQuote n’existent que sur le socket de données de marché ; si vous envoyez cette requête au socket du compte, vous obtenez une erreur « not found » même si votre jeton est parfaitement valide.
Avant de commencer
- Accès API activé, le module complémentaire API Access doit être activé pour votre identifiant.
- Un jeton d’accès, vous en obtiendrez un à l’étape 1.
- Une habilitation aux données de marché en direct, les données API en temps réel nécessitent un abonnement aux données de marché du CME (vous devenez sous-fournisseur enregistré). Les frais s’élèvent à quelques centaines de dollars par mois ; vérifiez donc le tarif actuel de Tradovate avant de vous engager. Sans cela, vous vous connecterez quand même, mais vous obtiendrez une réponse
Symbol is inaccessible.
S’abonner aux données de marché Tradovate : pas à pas
Obtenir un jeton d’accès
Envoyez vos identifiants en POST à auth/accessTokenRequest. La réponse renvoie un accessToken (et un mdAccessToken) ainsi qu’une heure d’expiration. Conservez ce jeton : le socket de données de marché s’autorise avec le même jeton d’accès que celui utilisé sur l’API REST. Si la requête échoue complètement, vérifiez d’abord que le module complémentaire API Access est bien activé sur votre compte.
Ouvrir le WebSocket de données de marché
Pointez votre client WebSocket vers l’hôte de données de marché, et non vers l’hôte du compte. Dès que votre connexion de données de marché s’ouvre, le serveur envoie une unique trame o. C’est votre signal pour vous autoriser.
Autoriser le socket
Chaque requête sur le socket est une trame de texte brut composée de quatre champs séparés par des sauts de ligne : le point d’accès, un identifiant de requête entier unique, une chaîne de requête facultative et un corps facultatif. Pour vous autoriser, le point d’accès est authorize et le corps est votre jeton. Le serveur répond par une trame a contenant un statut 200. Dès que vous la voyez, le socket est actif.
S’abonner avec md/subscribeQuote
Envoyez maintenant l’abonnement. La même trame à quatre champs : le point d’accès est md/subscribeQuote et le corps désigne le contrat. Utilisez le contrat du mois en cours (remplacez ESU6 par celui qui est actif au moment de l’exécution), ou transmettez un contractId numérique à la place de la chaîne du symbole. Un point d’attention : abonnez-vous à un seul symbole par requête. Pour suivre plusieurs instruments, renvoyez md/subscribeQuote avec un nouvel identifiant de requête pour chacun ; la même connexion les gère tous.
Lire les cotations et maintenir les heartbeats
Les cotations arrivent désormais sous forme de trames a encapsulant un événement md. Chaque objet de cotation contient un timestamp, un contractId et une map entries avec Bid, Offer et Trade, chacun contenant un price et un size. Une chose à ne pas négliger : les heartbeats. Envoyez une trame avec un tableau vide, littéralement [], toutes les 2,5 secondes, sinon le serveur ferme la connexion pour inactivité et vos cotations s’arrêtent net. Lorsque vous en avez fini avec un flux, envoyez md/unsubscribeQuote avec le même symbole pour l’interrompre.
| Environnement | URL des données de marché |
|---|---|
| Démo / simulé | wss://md-demo.tradovateapi.com/v1/websocket |
| Réel / financé | wss://md.tradovateapi.com/v1/websocket |
À titre de référence, le socket du compte se trouve à wss://demo.tradovateapi.com/v1/websocket et wss://live.tradovateapi.com/v1/websocket, des noms d’hôte entièrement différents.
authorize
1
YOUR_ACCESS_TOKEN
C’est-à-dire authorize, puis 1, puis une ligne de requête vide, puis le jeton, chacun sur sa propre ligne.
md/subscribeQuote
2
{"symbol":"ESU6"}
{"e":"md","d":{"quotes":[{"contractId":123456,"entries":{"Bid":{"price":5602.25,"size":18},"Offer":{"price":5602.50,"size":24},"Trade":{"price":5602.25,"size":3}}}]}}
Pièges courants
- "Not found: md/subscribeQuote", vous êtes sur le socket du compte. Reconnectez-vous à l’hôte
md-demo/mdde l’étape 2. - "Symbol is inaccessible", votre identifiant n’a pas d’accord de données en temps réel pour ce produit, ou le symbole n’est pas un contrat valide du mois en cours.
- Le flux devient silencieux après quelques secondes, vous avez cessé d’envoyer les heartbeats
[]. Placez-les sur un minuteur de 2,5 secondes qui tourne pendant toute la durée de vie du socket.
Évitez la plomberie avec PickMyTrade
Mettre en place un socket de données de marché, le renouvellement des jetons, les heartbeats, la logique de reconnexion et la licence de données du CME représente un vrai travail avant même d’avoir passé le moindre ordre. Si votre objectif est simplement d’automatiser les entrées et sorties de votre stratégie, PickMyTrade relie vos alertes TradingView directement à Tradovate. Aucun WebSocket à surveiller.
Évitez la plomberie WebSocket
Aucun renouvellement de jeton, heartbeat ni logique de reconnexion à surveiller : PickMyTrade relie vos alertes TradingView directement à Tradovate.
Commencez votre essai gratuit de 7 joursQuestions fréquentes
Non. Autorisez le socket de données de marché avec le même jeton d’accès que celui obtenu via auth/accessTokenRequest. La réponse d’authentification renvoie aussi un champ mdAccessToken ; consultez la documentation actuelle si un appel rejette un jour votre jeton.
Vous êtes bien connecté, mais votre compte n’a pas d’accord de données en temps réel pour ce produit, ou le symbole n’est pas le contrat actif. Ajoutez l’abonnement aux données de marché du CME et utilisez un symbole valide du mois en cours.
Oui. Envoyez md/subscribeQuote une fois par symbole, chacun avec son propre identifiant de requête, sur le même socket. Il n’existe pas de forme avec tableau ; répétez plutôt la requête.
Ce guide est fourni à des fins éducatives et informatives uniquement 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 » et 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.