Garder le WebSocket Tradovate actif avec des heartbeats
Un WebSocket Tradovate n'est pas un outil que l'on configure puis que l'on oublie. Restez silencieux quelques secondes et le serveur coupe la ligne. La solution est un heartbeat : une toute petite trame que vous envoyez toutes les 2.5 secondes pour prouver que vous êtes toujours à l'écoute.
On This Page
Un WebSocket Tradovate est la voie rapide pour les cotations, les exécutions et les mises à jour du DOM : une seule connexion ouverte au lieu de solliciter l'API REST à chaque tick. Mais il ne se configure pas une fois pour toutes. Restez silencieux quelques secondes et le serveur suppose que votre client s'est éclipsé, puis coupe la ligne. La solution est un heartbeat : une toute petite trame que vous envoyez toutes les 2.5 secondes pour prouver que vous êtes toujours à l'écoute. Voici le handshake complet, ainsi que la manière de garder le socket actif pendant des heures sans le surveiller.
Comment le socket Tradovate communique
Chaque message sur le socket est une trame : un seul caractère de préfixe suivi d'un tableau JSON. Vous n'avez besoin de reconnaître que quatre d'entre elles :
| Préfixe | Trame | Signification |
|---|---|---|
| o | Ouverture | Envoyée une seule fois, juste après l'ouverture du socket. C'est votre signal pour vous autoriser. |
| h | Battement | Le keep-alive propre au serveur. Il les omet tant qu'il vous diffuse activement des données. |
| a | Tableau | La charge utile réelle : cotations, exécutions et événements de positions et d'ordres au format JSON. |
| c | Fermeture | La connexion se ferme ; lancez votre nettoyage et votre logique de reconnexion. |
Votre rôle : réagir à o en vous autorisant, lire les trames a et maintenir un heartbeat régulier pour que le serveur ne vous croie jamais muet.
Garder le WebSocket actif : pas à pas
Ouvrir le socket et attendre la trame « o »
Connectez-vous d'abord au bon point d'accès. Le socket de trading se trouve à l'adresse wss://demo.tradovateapi.com/v1/websocket dans l'environnement démo et wss://live.tradovateapi.com/v1/websocket pour un compte financé. Les données de marché passent par leur propre socket : wss://md.tradovateapi.com/v1/websocket pour le flux en direct, ou l'hôte md-demo pour le flux simulé. Dès que la connexion s'ouvre, le serveur envoie un simple o. N'envoyez rien avant de l'avoir vu.
Autoriser la session
Dès que ce o arrive, envoyez votre jeton d'accès comme toute première trame. Le format est le nom de la requête, un identifiant de requête, une ligne de requête vide, puis le jeton comme corps : authorize\n0\n\n{yourAccessToken}. Une réponse 200 signifie que vous êtes authentifié et que les données peuvent commencer à circuler. Besoin d'un jeton ? Obtenez-en un d'abord via l'accès à l'API Tradovate, et s'il expire en cours de session, renouvelez-le avant son expiration.
Envoyer un heartbeat [] toutes les 2.5 secondes
C'est tout l'enjeu. Toutes les 2.5 secondes, envoyez une trame dont le texte est exactement [], un tableau vide, rien de plus. Tant que ces heartbeats arrivent, le serveur garde le socket ouvert. Laissez l'écart s'étirer et il vous déconnecte. Un point qui déroute : le serveur cesse d'envoyer ses propres trames h tant qu'il vous pousse activement des données. C'est normal ; le silence côté serveur n'est pas une raison d'arrêter vos propres heartbeats.
Ne vous fiez pas à setInterval dans un onglet de navigateur
Voici le piège dans lequel tombent la plupart des applications de navigateur. Passez l'onglet en arrière-plan et Chrome bride setInterval et setTimeout pour économiser l'énergie. Votre cadence nette de 2.5 secondes s'étire à dix, trente, voire soixante secondes, et le socket meurt discrètement pendant que vous lisez vos e-mails dans un autre onglet. Sortez le minuteur du thread principal : exécutez le heartbeat dans un Web Worker, qui n'est pas bridé de la même manière lorsque l'onglet perd le focus. Exécuter la connexion dans un processus Node.js règle le problème d'emblée, puisqu'il n'y a aucun onglet inactif à brider. Une astuce plus légère consiste à déclencher les heartbeats à partir du trafic entrant, en en envoyant un chaque fois que plus de 2.5 secondes se sont écoulées depuis le dernier, mais cela ne tient que tant que les données continuent d'arriver.
Détecter un socket mort et se reconnecter
Même un heartbeat irréprochable ne survivra pas à une coupure Wi-Fi ou à un redémarrage du serveur. Écoutez l'événement close du socket et considérez aussi un long silence du serveur comme une ligne morte. Quand l'un des deux se produit, reconnectez-vous et réautorisez-vous depuis le début. Espacez les tentatives au lieu d'insister : commencez autour d'une seconde et doublez l'attente jusqu'à un plafond proche d'une minute, afin qu'une rafale de reconnexions ne déclenche pas les limites de débit de Tradovate alors que vous êtes déjà hors ligne. Une fois reconnecté, réabonnez-vous aux cotations et aux événements que vous suiviez ; le nouveau socket repart vierge.
La trame authorize et la trame de heartbeat
// Première trame après la trame d'ouverture « o » :authorize0{yourAccessToken}// Envoyée toutes les 2.5 secondes tant que la connexion est active :[]
Trois habitudes pour que tout reste banal
Avec un flux de données de marché, l'objectif est que tout soit banal. Donnez au heartbeat son propre minuteur fiable, consignez chaque code de fermeture pour distinguer une coupure réseau d'un échec d'authentification, et réabonnez-vous toujours après une reconnexion. Maîtrisez ces trois points et le socket tiendra une séance entière sans que vous ayez à y penser.
Automatisez cela avec PickMyTrade
Vous ne voulez pas développer vous-même les heartbeats, les workers et la logique de reconnexion ? Laissez PickMyTrade maintenir la connexion en direct avec Tradovate tout en acheminant vos alertes TradingView directement vers votre compte.
Oubliez la plomberie des heartbeats
Laissez PickMyTrade maintenir la connexion en direct avec Tradovate tout en acheminant vos alertes TradingView directement vers votre compte.
Commencez votre essai gratuit de 7 joursFoire aux questions
Toutes les 2.5 secondes. Envoyez à ce rythme une trame dont le texte est [] et le serveur maintient la connexion ouverte ; laissez l'écart s'allonger et il ferme le socket.
Rien d'autre qu'un tableau JSON vide sous forme de texte. Elle ne transporte aucune donnée ; son seul rôle est d'indiquer au serveur que votre client est toujours en vie.
Les navigateurs brident setInterval et setTimeout dans les onglets en arrière-plan : votre heartbeat prend du retard et le serveur met fin à la connexion pour dépassement de délai. Exécutez le minuteur dans un Web Worker ou dans un processus Node.js pour l'éviter.
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, non affiliée à Tradovate, Inc., ni approuvée ou parrainée par celle-ci. « 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 sur la plateforme et dans la documentation officielles de Tradovate avant d'agir.