Tradovate API

Mantenga activo el WebSocket de Tradovate con heartbeats

Un WebSocket de Tradovate no es de los que se configuran y se olvidan. Si guarda silencio unos segundos, el servidor corta la línea. La solución es un heartbeat: un pequeño frame que envía cada 2.5 segundos para demostrar que sigue escuchando.

On This Page

Un WebSocket de Tradovate es el carril rápido para cotizaciones, ejecuciones y actualizaciones del DOM: una sola conexión abierta en lugar de bombardear la API REST con cada tick. Pero no es de configurar y olvidar. Si guarda silencio unos segundos, el servidor asume que su cliente se ha marchado y corta la línea. La solución es un heartbeat: un pequeño frame que envía cada 2.5 segundos para demostrar que sigue escuchando. Aquí tiene el handshake completo, además de cómo mantener el socket activo durante horas sin tener que vigilarlo.

Cómo se comunica el socket de Tradovate

Cada mensaje del socket es un frame: un único carácter de prefijo seguido de un array de JSON. Solo necesita reconocer cuatro:

Prefijo Trama Qué significa
oAperturaSe envía una sola vez, justo después de abrirse el socket. Es su señal para autorizar.
hLatidoEl keep-alive propio del servidor. Lo omite mientras le está enviando datos de forma activa.
aMatrizLa carga útil real: cotizaciones, ejecuciones y eventos de posiciones y órdenes en JSON.
cCierreLa conexión se está cerrando; ejecute su limpieza y su lógica de reconexión.

Su tarea: reaccionar a o autorizando, leer los frames a y mantener un heartbeat constante para que el servidor nunca crea que se ha quedado a oscuras.

Mantener activo el WebSocket: paso a paso

1

Abra el socket y espere el frame «o»

Conéctese primero al endpoint correcto. El socket de trading está en wss://demo.tradovateapi.com/v1/websocket en el entorno demo y en wss://live.tradovateapi.com/v1/websocket para una cuenta con fondos. Los datos de mercado van por su propio socket: wss://md.tradovateapi.com/v1/websocket para el feed en vivo, o el host md-demo para el simulado. En cuanto se abre la conexión, el servidor envía una sola o. No envíe nada antes de verla.

2

Autorice la sesión

Tan pronto como llegue esa o, envíe su token de acceso como primer frame. El formato es el nombre de la solicitud, un id de solicitud, una línea de consulta en blanco y después el token como cuerpo: authorize\n0\n\n{yourAccessToken}. Una respuesta 200 significa que está autenticado y los datos pueden empezar a fluir. ¿Necesita un token? Obtenga uno primero a través del acceso a la API de Tradovate y, si caduca a mitad de sesión, renuévelo antes de que expire.

3

Envíe un heartbeat [] cada 2.5 segundos

Esto es lo esencial. Cada 2.5 segundos, envíe un frame cuyo texto sea exactamente [], un array vacío, nada más. Mientras esos heartbeats sigan llegando, el servidor mantiene el socket abierto. Si el intervalo se alarga, lo desconecta. Una cosa que confunde a muchos: el servidor deja de enviar sus propios frames h mientras le está enviando datos de forma activa. Es normal; el silencio del lado del servidor no es motivo para dejar de enviar sus propios heartbeats.

4

No confíe en setInterval en una pestaña del navegador

Esta es la trampa en la que caen la mayoría de las aplicaciones de navegador. Si pasa la pestaña a segundo plano, Chrome limita setInterval y setTimeout para ahorrar energía. Su limpio ritmo de 2.5 segundos se estira a diez, treinta, incluso sesenta segundos, y el socket muere en silencio mientras usted lee el correo en otra pestaña. Saque el temporizador del hilo principal: ejecute el heartbeat dentro de un Web Worker, que no se limita de la misma manera cuando la pestaña pierde el foco. Ejecutar la conexión en un proceso de Node.js lo evita por completo, porque no hay ninguna pestaña inactiva que limitar. Un truco más ligero es disparar los heartbeats a partir del tráfico entrante, enviando uno cada vez que hayan pasado más de 2.5 segundos desde el último, pero eso solo funciona mientras sigan llegando datos.

5

Detecte un socket muerto y reconecte

Ni siquiera un heartbeat impecable sobrevive a una caída del Wi-Fi o a un reinicio del servidor. Escuche el evento close del socket y considere también una línea muerta un largo periodo de silencio del servidor. Cuando se dispare cualquiera de los dos, reconecte y vuelva a autorizar desde cero. Espere entre intentos en lugar de insistir sin pausa: empiece en torno a un segundo y duplique la espera hasta un tope cercano a un minuto, para que una tormenta de reconexiones no active los límites de frecuencia de Tradovate cuando ya está desconectado. Una vez de vuelta, vuelva a suscribirse a las cotizaciones y eventos que seguía; el nuevo socket empieza en blanco.

El frame authorize y el frame de heartbeat

// Primer frame tras el frame de apertura «o»:
authorize
0

{yourAccessToken}

// Se envía cada 2.5 segundos mientras hay conexión:
[]

Tres hábitos para que todo sea aburrido

Con un feed de datos de mercado, lo aburrido es el objetivo. Mantenga el heartbeat en su propio temporizador fiable, registre cada código de cierre para distinguir un corte de red de un fallo de autenticación y vuelva a suscribirse siempre tras una reconexión. Si acierta con esos tres puntos, el socket aguantará una sesión completa sin que tenga que pensar en él.

Automatice esto con PickMyTrade

¿No quiere construir usted mismo heartbeats, workers y lógica de reconexión? Deje que PickMyTrade mantenga la conexión en vivo con Tradovate mientras envía sus alertas de TradingView directamente a su cuenta.

Olvídese de la fontanería del heartbeat

Deje que PickMyTrade mantenga la conexión en vivo con Tradovate mientras envía sus alertas de TradingView directamente a su cuenta.

Comience su prueba gratuita de 7 días

Preguntas frecuentes

Cada 2.5 segundos. Envíe un frame cuyo texto sea [] con ese ritmo y el servidor mantendrá la conexión abierta; si deja crecer el intervalo, cerrará el socket.

Nada más que un array JSON vacío como texto. No transporta datos; su única función es indicar al servidor que su cliente sigue activo.

Los navegadores limitan setInterval y setTimeout en las pestañas en segundo plano, por lo que su heartbeat se retrasa y el servidor lo desconecta por tiempo de espera. Ejecute el temporizador en un Web Worker o en un proceso de Node.js para evitarlo.

Esta guía tiene fines exclusivamente educativos e informativos y no constituye asesoramiento financiero, de inversión ni de trading. Operar con futuros y otros productos apalancados conlleva un riesgo sustancial de pérdida y no es adecuado para todos los inversores. PickMyTrade es una plataforma de automatización independiente de terceros y no está afiliada, respaldada ni patrocinada por Tradovate, Inc. «Tradovate» y todos los nombres, logotipos y marcas relacionados son propiedad de sus respectivos titulares. Las funciones y los pasos de la plataforma cambian con el tiempo, así que confirme siempre el proceso actual en la plataforma y la documentación oficiales de Tradovate antes de actuar.