Tradovate API

Errori WebSocket Tradovate 10054 / SSL / 502

WinError 10054, gli alert di versione del protocollo SSL e un 502 all'handshake sono i tre errori che uccidono più socket Tradovate. Ecco quali sono problemi TLS che può correggere e quali sono intoppi transitori del server che deve solo superare.

On This Page

Quando il suo bot trasmette quotazioni live di ES o NQ tramite l'API di Tradovate e il socket muore a metà sessione, ogni secondo offline è un fill che non può gestire. Tre errori WebSocket uccidono più connessioni di qualsiasi altra cosa: [WinError 10054] An existing connection was forcibly closed by the remote host, la coppia SSL SSL: TLSV1_ALERT_PROTOCOL_VERSION / SSL: SSLV3_ALERT_BAD_RECORD_MAC e un 502 Bad Gateway all'handshake. I primi due sono quasi sempre un problema di negoziazione TLS da parte sua. Il 502 è un intoppo transitorio del server. La correzione permanente è una combinazione in due parti: negoziare una versione moderna di TLS affinché l'handshake riesca e avvolgere il socket in una logica di riconnessione affinché una connessione caduta si reistanzi da sola invece di fermare di colpo la sua automazione. Un bridge come PickMyTrade gestisce entrambe per lei, ma se sviluppa il suo client, ecco come diagnosticare e correggere ogni variante.

Checklist rapida per gli errori del WebSocket Tradovate

  • Riceve un alert di protocollo/versione SSL? Forzi il suo client a TLS 1.2 o superiore. I server di Tradovate accettano TLS v1.1 e superiori, e i vecchi default come TLS 1.0 e SSLv3 vengono rifiutati.
  • Riceve WinError 10054 a caso? Lo tratti come un segnale atteso “l'abbiamo disconnessa”, non come un bug. Costruisca cattura e riconnessione invece di cercare di evitare ogni caduta.
  • Riceve un 502 Bad Gateway? È lato server. Attenda, poi riprovi l'handshake con backoff esponenziale e jitter.
  • Il socket si chiude dopo qualche minuto di calma? Le mancano gli heartbeat, invii un frame [] ogni ~2,5 secondi.
  • Il socket muore subito dopo un login altrove? Ha superato il limite di 2 sessioni. Un nuovo token invalida la vecchia sessione e ne chiude il socket.
  • Non si riconnetta mai in un ciclo serrato. Martellare l'endpoint può far scattare i limiti di frequenza e peggiorare le cose.

Cosa significa "[WinError 10054] An Existing Connection Was Forcibly Closed by the Remote Host"

WinError 10054 (scritto anche WSAECONNRESET) è un errore del livello sockets–di Windows, non specifico di Tradovate. Significa che la connessione TCP è stata reimpostata dall'altro capo prima del previsto dal suo codice. Lo consideri un messaggio generico di server websocket che dice, in sostanza, “Ehi, abbiamo interrotto la sua connessione, ci dispiace.” Per un socket di lunga durata, vederlo ogni tanto è normale.

Due cose lo scatenano soprattutto. Primo, un handshake TLS fallito: se il suo client e i server di Tradovate non riescono ad accordarsi su una versione di TLS o su una cipher suite, il server reimposta la connessione e Windows lo mostra come 10054. Questo stesso errore corrisponde a fallimenti di handshake pre-login in cui non esistono protocolli TLS corrispondenti tra client e server. Secondo, l'inattività o un intoppo di rete transitorio, un heartbeat limitato, un pacchetto Wi-Fi perso o un riciclo di routine del server.

Le varianti SSL rendono esplicita la causa dell'handshake. SSL: TLSV1_ALERT_PROTOCOL_VERSION significa che il server ha rifiutato la versione di TLS offerta dal suo client. SSL: SSLV3_ALERT_BAD_RECORD_MAC indica un record TLS corrotto o non corrispondente, spesso da uno stack SSL/TLS legacy. Un 502 Bad Gateway è ancora diverso: l'handshake ha raggiunto l'edge di Tradovate ma un nodo upstream è stato momentaneamente non disponibile, quindi nulla di ciò che cambia lato client lo “risolve”, riprova e basta.

Principali cause degli errori del WebSocket Tradovate

1. Versione di TLS obsoleta sul client

Questa è la causa più comune degli errori SSL e 10054. I server di Tradovate supportano TLS v1.1 o superiore, quindi qualsiasi client che usi ancora per default TLS 1.0 o SSLv3, vecchie build di Python, impostazioni legacy del framework .NET, un OpenSSL non aggiornato, si vede rifiutare l'handshake. Negozi TLS 1.2 o 1.3, che ogni endpoint Tradovate attuale accetta.

2. Heartbeat mancanti o limitati

Una volta connesso, il suo client è responsabile di mantenere vivo il socket. Tradovate si aspetta un frame di heartbeat, il testo letterale [], circa ogni 2,5 secondi. Se perde la finestra, il server chiude la connessione, il che riemerge come 10054 alla sua lettura successiva. Nei browser è una trappola classica: le schede in background limitano i timer, quindi un heartbeat con setInterval() rallenta silenziosamente e il socket muore.

3. Il limite di 2 sessioni e l'invalidazione del token

Un utente Tradovate è limitato a un piccolo numero di sessioni simultanee. Quando viene creata una terza sessione (o altre), le sessioni più vecchie vengono chiuse. Richiedere un nuovo token di accesso avvia una nuova sessione e invalida il vecchio token, quindi qualsiasi WebSocket che usi ancora il token precedente viene disconnesso. Se il suo socket muore nell'istante in cui accede da un altro dispositivo o riautentica un secondo client, ecco perché.

4. Cadute transitorie 502 / lato server

A volte la colpa davvero non è sua. Un 502 Bad Gateway durante l'handshake, o un reset a metà sessione senza modifiche al codice da parte sua, è l'infrastruttura di Tradovate che si ricicla o è momentaneamente irraggiungibile. Non cerchi di evitare ogni caduta, la rilevi e si riprenda.

5. Riconnettersi in modo troppo aggressivo

L'altra faccia del ripristino è la sovracorrezione. Un ciclo di riconnessione senza ritardo travolge l'endpoint, può far scattare i limiti di frequenza di login e richieste e trasforma un intoppo di due secondi in un blocco. Ogni client affidabile ha bisogno di backoff, non di un tentativo while True.

Come risolvere gli errori del WebSocket Tradovate: passo dopo passo

Risolvere gli errori SSL / di versione del protocollo (e il 10054 causato dall'handshake)

1

Fissare una versione minima moderna di TLS

Richieda esplicitamente TLS 1.2 o 1.3 nel suo contesto socket/SSL invece di affidarsi al default del linguaggio.

2

Aggiornare il suo stack crittografico

Aggiorni Python (e il suo OpenSSL incluso), Node o il runtime .NET in modo che i protocolli più recenti siano effettivamente disponibili per la negoziazione.

3

Confermare l'endpoint

Punti all'host WebSocket Tradovate corretto e attuale, ad esempio wss://live.tradovateapi.com/v1/websocket per il live, l'host demo per la simulazione e l'host dei dati di mercato per le quotazioni. Confermi l'host esatto nella documentazione API attuale, poiché gli endpoint cambiano occasionalmente.

4

Ripetere il test dell'handshake

Una connessione pulita restituisce ora il frame open o del server invece di un alert SSL o di un 10054 immediato.

Mantenere viva la connessione con gli heartbeat

1

Inviare [] con cadenza di ~2,5 secondi

Dopo l'autorizzazione, inizi a emettere il frame con array vuoto in modo che il server non la veda mai come inattivo.

2

Non fidarsi di setInterval in un browser

Guidi gli heartbeat in modo reattivo: apponga un timestamp a ogni messaggio ricevuto e invii un heartbeat ogni volta che sono trascorsi ~2,5 secondi, oppure esegua il client in un Web Worker o come processo Node.js in modo che i timer non vengano limitati.

3

Fare attenzione al silenzio

Se non riceve alcun messaggio dal server per diversi secondi, presuma che il socket sia obsoleto e lo smantelli invece di aspettare che una lettura fallisca.

Aggiungere la logica di riconnessione per 10054 e 502

1

Catturare la caduta

Gestisca l'evento close/error del socket (inclusi 10054 e 502) invece di lasciare che l'eccezione fermi il suo programma.

2

Reistanziare e autorizzarsi di nuovo

Alla disconnessione, apra un nuovo socket ed esegua di nuovo l'handshake di autorizzazione completo, la vecchia sessione o il vecchio token potrebbero essere morti.

3

Backoff esponenziale con jitter

Parta da circa un secondo e aumenti il ritardo fino a un tetto ragionevole (decine di secondi), aggiungendo jitter casuale in modo che i client paralleli non si riconnettano all'unisono.

4

Limitare e segnalare

Limiti i tentativi e, se li esaurisce, faccia scattare un alert invece di ciclare all'infinito, è il segnale che è in gioco un vero guasto o un problema di limite di frequenza/sessione.

Tabella di risoluzione dei problemi

Errore Significato Correzione
[WinError 10054] An existing connection was forcibly closed by the remote hostIl server ha reimpostato la connessione TCP/WebSocket, fallimento dell'handshake o caduta transitoriaFissare TLS 1.2+, poi catturare e riconnettersi con backoff
SSL: TLSV1_ALERT_PROTOCOL_VERSIONIl server ha rifiutato la versione di TLS offerta dal suo clientForzare TLS 1.2/1.3; aggiornare lo stack crittografico
SSL: SSLV3_ALERT_BAD_RECORD_MACRecord TLS corrotto/non corrispondente da uno stack SSL legacyAggiornare OpenSSL/runtime e negoziare una versione moderna di TLS
502 Bad GatewayIndisponibilità transitoria lato server all'handshakeAttendere e riprovare con backoff esponenziale (lato server, non un suo bug)
Il socket si chiude dopo ~secondi di calmaHeartbeat persi, il server la tratta come inattivoInviare un heartbeat [] ogni ~2,5 secondi
Il socket muore subito dopo un nuovo login/tokenLimite di sessioni simultanee raggiunto; vecchio token invalidatoConsolidare le sessioni; riconnettersi e autorizzarsi di nuovo

Lo eviti con PickMyTrade

Se preferisce non mantenere un client WebSocket artigianale, PickMyTrade si colloca tra TradingView e Tradovate e gestisce la connessione per lei:

  • Connessione gestita e corretta in TLS, il bridge negozia un handshake TLS moderno e compatibile, così gli errori di versione del protocollo SSL e di record errato non raggiungono mai la sua strategia.
  • Heartbeat e riconnessione integrati, heartbeat e riconnessione con backoff esponenziale sono gestiti lato server, così un 10054 o un 502 si autoripara invece di fermare la sua automazione.
  • Instradamento consapevole della sessione, il flusso degli ordini è distanziato e sequenziato in modo da non far scattare i limiti di sessioni simultanee o di frequenza durante le riconnessioni.
  • Sincronizzazione multi-account, una volta ripristinata la connessione, lo stesso alert viene replicato su ogni account collegato senza ordini duplicati o mancati.

Lasci che il bridge gestisca il socket

Stanco di fare da babysitter a un socket grezzo? Inizi la prova gratuita di 7 giorni, colleghi i suoi alert oggi stesso e lasci che il bridge gestisca TLS, heartbeat e riconnessioni per lei.

Inizi la prova gratuita di 7 giorni

Domande frequenti

Di solito no. È un segnale generico «abbiamo interrotto la sua connessione» per le connessioni WebSocket di lunga durata. Diventa un problema solo se non si riconnette. Costruisca una logica di cattura e riconnessione e un 10054 occasionale diventa un non-evento.

I server di Tradovate accettano TLS v1.1 e superiori. Poiché TLS 1.0 e 1.1 sono deprecati in tutto il settore, negozi TLS 1.2 o 1.3: entrambi sono accettati e sono lo standard moderno.

Un 502 è lato server. L'handshake ha raggiunto l'edge di Tradovate ma un nodo upstream è stato brevemente non disponibile. Non c'è nulla da correggere lato client, attenda un momento e riprovi con backoff.

Circa ogni 2,5 secondi. L'heartbeat è un frame il cui testo è [] (un array vuoto). Se perde il ritmo, il server chiude il socket per inattività.

Probabilmente ha raggiunto il limite di sessioni simultanee. Creare un nuovo token di accesso avvia una nuova sessione e invalida il vecchio token, quindi qualsiasi socket che usi ancora il token precedente viene disconnesso. Riutilizzi una sola sessione, oppure si riconnetta e si autorizzi di nuovo.

Un ciclo senza ritardo martella l'endpoint e può far scattare i limiti di frequenza, peggiorando il ripristino. Aggiunga un backoff esponenziale con jitter, limiti i tentativi ed esegua di nuovo l'handshake di autorizzazione completo a ogni prova.

Un socket caduto non annulla gli ordini attivi lato Tradovate, ma perde la visibilità in tempo reale finché non si riconnette. Riconcili sempre posizioni e ordini dopo una disconnessione prima di inviare nuovi ingressi.

Sì. Un bridge come PickMyTrade mantiene per lei l'handshake TLS, gli heartbeat e la riconnessione, così lei invia un semplice alert e non tocca mai codice di socket grezzo.

Questa guida ha esclusivamente finalità educative e informative e non costituisce consulenza finanziaria, di investimento o di trading. Operare in futures e in altri prodotti a leva comporta un rischio di perdita sostanziale 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, loghi e marchi correlati sono di proprietà dei rispettivi titolari. Le funzionalità e i passaggi della piattaforma cambiano nel tempo: confermi sempre la procedura aggiornata nella piattaforma e nella documentazione ufficiali di Tradovate prima di agire.