Tradovate API

Mantenere attivo il WebSocket di Tradovate con gli heartbeat

Un WebSocket di Tradovate non si configura una volta per tutte. Se resta in silenzio per qualche secondo, il server interrompe la linea. La soluzione è un heartbeat: un minuscolo frame che invia ogni 2.5 secondi per dimostrare che è ancora in ascolto.

On This Page

Un WebSocket di Tradovate è la corsia veloce per quotazioni, esecuzioni e aggiornamenti del DOM: una sola connessione aperta invece di martellare l'API REST a ogni tick. Ma non si configura e si dimentica. Se resta in silenzio per qualche secondo, il server presume che il Suo client si sia allontanato e interrompe la linea. La soluzione è un heartbeat: un minuscolo frame che invia ogni 2.5 secondi per dimostrare che è ancora in ascolto. Ecco l'handshake completo, più il modo per mantenere attivo il socket per ore senza doverlo sorvegliare.

Come comunica il socket di Tradovate

Ogni messaggio sul socket è un frame: un singolo carattere di prefisso seguito da un array JSON. Le basta riconoscerne quattro:

Prefisso Tipo di frame Che cosa significa
oAperturaInviato una sola volta, subito dopo l'apertura del socket. È il Suo segnale per autorizzare.
hBattitoIl keep-alive del server stesso. Lo salta mentre Le sta trasmettendo attivamente dei dati.
aMatriceIl payload vero e proprio: quotazioni, esecuzioni ed eventi di posizioni e ordini in JSON.
cChiusuraLa connessione si sta chiudendo: esegua la pulizia e la logica di riconnessione.

Il Suo compito: reagire a o autorizzando, leggere i frame a e mantenere un heartbeat costante in modo che il server non pensi mai che Lei sia scomparso.

Mantenere attivo il WebSocket: passo dopo passo

1

Apra il socket e attenda il frame «o»

Si colleghi prima all'endpoint giusto. Il socket di trading si trova su wss://demo.tradovateapi.com/v1/websocket nell'ambiente demo e su wss://live.tradovateapi.com/v1/websocket per un conto finanziato. I dati di mercato viaggiano su un socket dedicato: wss://md.tradovateapi.com/v1/websocket per il feed live, oppure l'host md-demo per quello simulato. Appena la connessione si apre, il server invia un singolo o. Non invii nulla prima di averlo visto.

2

Autorizzi la sessione

Non appena arriva quell'o, invii il Suo access token come primissimo frame. Il formato è il nome della richiesta, un id della richiesta, una riga di query vuota e poi il token come corpo: authorize\n0\n\n{yourAccessToken}. Una risposta 200 significa che è autenticato e i dati possono iniziare a fluire. Le serve un token? Ne ottenga uno prima tramite l'accesso API di Tradovate e, se scade a metà sessione, lo rinnovi prima che scada.

3

Invii un heartbeat [] ogni 2.5 secondi

Questo è il punto cruciale. Ogni 2.5 secondi invii un frame il cui testo è esattamente [], un array vuoto, nient'altro. Finché questi heartbeat continuano ad arrivare, il server tiene aperto il socket. Se l'intervallo si allunga, la disconnette. Una cosa che spiazza molti: il server smette di inviare i propri frame h mentre Le sta trasmettendo attivamente dei dati. È normale; il silenzio dal lato server non è un motivo per smettere di inviare i Suoi heartbeat.

4

Non si fidi di setInterval in una scheda del browser

Questa è la trappola in cui cadono la maggior parte delle app per browser. Se mette la scheda in background, Chrome limita setInterval e setTimeout per risparmiare energia. Il Suo ritmo pulito di 2.5 secondi si allunga a dieci, trenta, persino sessanta secondi, e il socket muore silenziosamente mentre legge la posta in un'altra scheda. Sposti il timer fuori dal thread principale: esegua l'heartbeat dentro un Web Worker, che non viene limitato allo stesso modo quando la scheda perde il focus. Eseguire la connessione in un processo Node.js evita il problema del tutto, perché non c'è alcuna scheda inattiva da limitare. Un trucco più leggero è far partire gli heartbeat in base al traffico in entrata, inviandone uno ogni volta che sono passati più di 2.5 secondi dall'ultimo, ma regge solo finché i dati continuano ad arrivare.

5

Rilevi un socket morto e si riconnetta

Nemmeno un heartbeat impeccabile sopravvive a una caduta del Wi-Fi o a un riavvio del server. Resti in ascolto dell'evento close del socket e consideri una linea morta anche un lungo silenzio da parte del server. Quando si verifica uno dei due casi, si riconnetta e autorizzi di nuovo da zero. Inserisca un backoff tra i tentativi invece di insistere: parta da circa un secondo e raddoppi l'attesa fino a un tetto vicino a un minuto, così una tempesta di riconnessioni non fa scattare i limiti di frequenza di Tradovate mentre è già offline. Una volta tornato online, si iscriva di nuovo alle quotazioni e agli eventi che stava seguendo; il nuovo socket parte vuoto.

Il frame authorize e il frame heartbeat

// Primo frame dopo il frame di apertura «o»:
authorize
0

{yourAccessToken}

// Inviato ogni 2.5 secondi mentre la connessione è attiva:
[]

Tre abitudini per mantenere tutto noioso

Con un feed di dati di mercato, la noia è l'obiettivo. Tenga l'heartbeat su un timer dedicato e affidabile, registri ogni codice di chiusura per distinguere un calo di rete da un errore di autenticazione e si iscriva sempre di nuovo dopo una riconnessione. Se rispetta questi tre punti, il socket reggerà un'intera sessione senza che Lei debba pensarci.

Automatizzi tutto questo con PickMyTrade

Non vuole costruire da solo heartbeat, worker e logica di riconnessione? Lasci che PickMyTrade mantenga attiva la connessione live con Tradovate mentre instrada i Suoi alert di TradingView direttamente al Suo conto.

Eviti l'impianto degli heartbeat

Lasci che PickMyTrade mantenga attiva la connessione live con Tradovate mentre instrada i Suoi alert di TradingView direttamente al Suo conto.

Inizi la prova gratuita di 7 giorni

Domande frequenti

Ogni 2.5 secondi. Invii a quel ritmo un frame il cui testo è [] e il server mantiene aperta la connessione; se lascia crescere l'intervallo, chiude il socket.

Nient'altro che un array JSON vuoto come testo. Non trasporta dati; il suo unico compito è comunicare al server che il Suo client è ancora attivo.

I browser limitano setInterval e setTimeout nelle schede in background, quindi il Suo heartbeat resta indietro e il server la disconnette per timeout. Esegua il timer in un Web Worker o in un processo Node.js per evitarlo.

Questa guida ha esclusivamente scopo educativo e informativo e non costituisce consulenza finanziaria, d'investimento o di trading. Il trading di futures e di altri prodotti a leva comporta un rischio sostanziale di perdita e non è adatto a tutti gli investitori. PickMyTrade è una piattaforma di automazione indipendente di terze parti e non è affiliata, approvata né sponsorizzata da Tradovate, Inc. «Tradovate» e tutti i nomi, i loghi e i marchi correlati sono di proprietà dei rispettivi titolari. Le funzionalità e i passaggi della piattaforma cambiano nel tempo, quindi verifichi sempre la procedura attuale nella piattaforma e nella documentazione ufficiali di Tradovate prima di agire.