Tradovate API

Tradovate-WebSocket „Connection to Remote Host Lost“

Der Socket läuft stundenlang einwandfrei und bricht dann mit Connection to remote host was lost ab, oft rund um die 24-Stunden-Marke. Hier erfahren Sie, was tatsächlich ausfällt, und welches Muster aus Heartbeat, Reconnect und Token einen Feed dauerhaft am Leben hält.

On This Page

Wenn Ihr Bot rund um die Uhr ES- oder NQ-Kurse streamt, killt nichts eine Strategie schneller als ein Tradovate-WebSocket, der still mit “Connection to remote host was lost.” stirbt. Es ist eines der häufigsten Probleme mit der Tradovate-API: Der Socket läuft stundenlang einwandfrei und bricht dann ab, sehr oft rund um die 24-Stunden-Marke, und nimmt Ihre Live-Marktdaten und das Order-Routing mit. Manchmal sehen Sie es als rohen WebSocket-Abbruch (Code 1006, “abnormal closure”). Manchmal wirkt es wie eine Massentrennung. Manchmal ist es einfach ein toter Feed, der nie eine Ausnahme auslöst.

Es gibt keine einzelne Zauber-Einstellung, die das behebt. Was einen Socket tatsächlich am Leben hält, ist ein Bündel zusammenwirkender Gewohnheiten: 2,5-Sekunden-Heartbeats, automatische Wiederverbindung, Token-Erneuerung und der Wechsel der Verbindung, bevor sie veraltet. PickMyTrade bringt diese Reconnect- und Re-Auth-Logik mit, sodass Ihre TradingView-Alarme Tradovate weiter erreichen, selbst wenn ein selbstgebauter Socket still umgefallen wäre.

Kurze Checkliste für einen verlorenen Tradovate-WebSocket

  • Heartbeat alle 2,5 Sekunden, senden Sie einen leeren []-Frame, damit der Server Ihren Client nie als inaktiv einstuft und schließt.
  • Vertrauen Sie setInterval in einem Browser-Tab nicht, die Hintergrunddrosselung lässt Ihren Timer unter 2,5 s fallen und tötet den Socket. Verwenden Sie stattdessen eine Prüfung per Nachrichten-Zeitstempel.
  • Bei jedem Schließen automatisch neu verbinden, wenn der Socket schließt, öffnen Sie ihn neu, autorisieren Sie neu und abonnieren Sie Ihre Marktdaten-Symbole neu.
  • Erneuern Sie das Token vor Ablauf, rufen Sie renewAccessToken etwa 15 Minuten vor Ablauf des rund 90 Minuten gültigen Zugriffstokens auf und halten Sie die Sitzungen innerhalb des Limits gleichzeitiger Sitzungen von Tradovate.
  • Wechseln Sie die Verbindung vor ca. 24 Stunden, bauen Sie den Socket per Timer ab und wieder auf, statt darauf zu warten, dass der Server ihn trennt.
  • Beim Reconnect ein Backoff einsetzen, verteilen Sie die Versuche, damit ein Reconnect-Sturm nicht die Ratenlimits von Tradovate auslöst und Sie aussperrt.

Was „Connection to Remote Host Was Lost“ bedeutet

“Connection to remote host was lost” ist die Art von Tradovate, Ihnen mitzuteilen, dass der WebSocket zu seinen Servern geschlossen und nicht mehr nutzbar ist. Es ist ein Ereignis auf Transportebene, keine abgelehnte Order, keine fehlerhafte Anfrage. Die Leitung selbst ist weggefallen. Intern zeigt sich das meist als abnormaler WebSocket-Abbruch (Close-Code 1006), also eine Verbindung, die ohne sauberen Close-Handshake abgebrochen ist, sodass Ihr Client nicht immer genau sagen kann, warum.

Und hier stolpern viele: Eine verlorene Verbindung ist bei einem langlebigen Feed normal und erwartbar. Netzwerke zucken, Load Balancer recyceln, Leerlauf-Sockets werden entfernt, Tokens laufen ab, und sehr lange Sitzungen werden serverseitig gewechselt. Selbst ein vorbildlicher Client, der Live-Daten streamt, kann den Socket nach genügend Stunden Laufzeit verlieren. Das Ziel ist also nicht ein Socket, der nie abbricht, das ist unmöglich. Das Ziel ist ein Client, der den Abbruch sofort bemerkt und sich selbst wiederherstellt, ohne dass Sie ihn überwachen müssen.

Diese Unterscheidung ist für das Risiko wichtig. Stirbt Ihr Feed still und Ihr Code geht weiter davon aus, verbunden zu sein, können Sie Fills verpassen, Stop-Auslösungen verpassen oder Orders in ein veraltetes Marktbild feuern. Behandeln Sie jeden WebSocket als Wegwerfobjekt und jede Trennung als Routineereignis, das zu behandeln ist, nicht als Notfall.

Die häufigsten Ursachen für einen abgebrochenen Tradovate-WebSocket

1. Verpasste Heartbeats (Server-Leerlauf-Timeout)

Das ist die mit Abstand häufigste Ursache. Das WebSocket-Protokoll von Tradovate verlangt, dass der Client alle 2,5 Sekunden einen Heartbeat sendet, einen Frame, dessen Text ein leeres Array ist, [], um zu beweisen, dass er noch lebt. Hört der Server 2,5 Sekunden nichts von Ihnen und streamt Ihnen nicht aktiv Daten, behandelt er den Client als inaktiv und schließt die Verbindung. Und hier der Haken: Solange der Server aktiv Nachrichten pusht (etwa bei einem regen Marktdaten-Abonnement), sendet er keine eigenen Heartbeats, sodass es allein Ihrem Client obliegt, die []-Frames fließen zu lassen.

2. Browser-/Timer-Drosselung

Wenn Sie im Browser entwickeln und Heartbeats mit setInterval oder setTimeout planen, tappen Sie in eine subtile Falle: Browser drosseln Timer in Hintergrund- oder inaktiven Tabs und dehnen Ihr 2,5-Sekunden-Intervall auf mehrere Sekunden. Sobald es das Fenster überschreitet, schließt der Server den Socket. Verlassen Sie sich nicht auf setInterval, sondern takten Sie Ihre Heartbeats ab der zuletzt tatsächlich empfangenen Nachricht.

3. Ablauf des Zugriffstokens

Ihr WebSocket wird einmal mit einem Zugriffstoken autorisiert, und dieses Token hat laut API-Dokumentation von Tradovate eine begrenzte Lebensdauer von etwa 90 Minuten ab Erstellung. Läuft das Token hinter einer aktiven Verbindung ab, ist die Verbindung nicht mehr authentifiziert und kann getrennt werden. Ein langlaufender Client, der sein Token nie erneuert, sieht den Socket in vorhersehbarem Takt sterben.

4. Langlebige Verbindungen über ca. 24 Stunden

Eine Verbindung länger als 24 Stunden aufrechtzuerhalten, ist für sich genommen eine anerkannte Ursache für Abbrüche. Selbst mit perfekten Heartbeats und einem frischen Token ist ein Socket, der seit etwa einem Tag offen ist, ein Hauptkandidat dafür, serverseitig recycelt zu werden. Deshalb stirbt eine rohe Verbindung, die “den ganzen Nachmittag funktionierte”, rätselhaft über Nacht.

5. Reconnect-Stürme und das Sitzungslimit

Bricht ein Socket ab, bombardiert naiver Code den Server oft mit sofortigen, aufeinanderfolgenden Reconnect-Versuchen. Das kann die Anfrage-Ratenlimits von Tradovate auslösen und die Lage verschlimmern, und wiederholtes erneutes Authentifizieren (statt Erneuerung) kann Sie gegen die Obergrenze gleichzeitiger Sitzungen laufen lassen. Das Ergebnis ist ein Client, der in einer Reconnect-Schleife festhängt und sich nie stabilisiert.

So beheben Sie eine verlorene Tradovate-WebSocket-Verbindung: Schritt für Schritt

Den Heartbeat alle 2,5 Sekunden richtig senden

1

Jede eingehende Nachricht mit einem Zeitstempel versehen

Speichern Sie bei jeder über den Socket empfangenen Nachricht einen Zeitstempel (ein einfaches new Date() genügt).

2

Mit dem letzten Heartbeat vergleichen

Vergleichen Sie in kurzem Takt “jetzt” mit dem Zeitstempel der zuletzt empfangenen Nachricht.

3

Den Heartbeat bei Bedarf senden

Sind seit der letzten Nachricht mehr als 2500 ms vergangen, senden Sie mit der send-Methode des Sockets einen einzelnen Heartbeat-Frame, der genau [] enthält.

4

Ein festes setInterval vermeiden

Steuern Sie dies über eine nachrichtenbasierte Prüfung statt über ein festes setInterval, damit die Browser-Drosselung die Lücke nicht unbemerkt dehnen und Sie trennen kann.

Diese eine Gewohnheit löst die Mehrheit der Meldungen “connection to remote host was lost”, weil sie die Leerlauf-Timeout-Regel des Servers direkt erfüllt.

Automatische Wiederverbindung und Neuabonnement-Logik hinzufügen

1

Den Abbruch sofort erkennen

Hängen Sie einen Handler an das close- (und error-) Ereignis des Sockets, damit ein Abbruch sofort erkannt wird.

2

Einen frischen Socket öffnen

Gehen Sie beim Schließen davon aus, dass die Verbindung fälschlich verloren ging, und öffnen Sie einen frischen WebSocket zum selben Endpunkt.

3

Die Autorisierungsanfrage erneut senden

Senden Sie die Autorisierungsanfrage erneut mit einem aktuell gültigen Zugriffstoken, ein neuer Socket ist nicht autorisiert, nur weil Ihr vorheriger es war.

4

Alles neu abonnieren

Abonnieren Sie jedes Marktdaten-Symbol und jeden User-/Order-Sync neu, den Sie zuvor abgehört haben, da Abonnements einen Reconnect nicht überleben.

5

Exponentiell zurückfahren

Hüllen Sie Reconnect-Versuche in ein exponentielles Backoff (warten Sie zum Beispiel 1 s, dann 2 s, dann 4 s, nach oben begrenzt), damit ein längerer Ausfall nicht zur Ratenlimit-Sperre wird.

Das Zugriffstoken erneuern und den Socket neu autorisieren

1

Eine Erneuerung vor Ablauf planen

Lesen Sie bei der ersten Authentifizierung die Ablaufzeit des Tokens aus der Auth-Antwort und planen Sie eine Erneuerung davor ein.

2

renewAccessToken frühzeitig aufrufen

Rufen Sie renewAccessToken etwa 15 Minuten vor Ablauf des Tokens auf. Das Erneuern (statt einer kompletten Neuautorisierung) verlängert Ihre aktuelle Sitzung, statt eine neue zu öffnen, wodurch Sie unter dem Limit gleichzeitiger Sitzungen von Tradovate bleiben.

3

Den aktiven Socket neu autorisieren

Stellen Sie nach der Erneuerung sicher, dass der aktive Socket mit dem frischen Token autorisiert ist. Am sichersten ist es, sich neu zu verbinden und einen neuen authorize-Frame mit dem erneuerten Token zu senden, denn allein das Erneuern des Tokens hält einen bereits offenen Socket nicht immer authentifiziert.

Bestätigen, dass der API-Zugriff aktiviert ist und Sie innerhalb des Sitzungslimits liegen

1

Bestätigen, dass der API-Zugriff aktiviert ist

Öffnen Sie im Tradovate Web Trader die Application Settings und bestätigen Sie, dass API Access (das API-Add-on) für Ihr Konto aktiviert ist, ein Socket kann nicht autorisiert bleiben gegenüber einem Konto, das für die API-Nutzung nicht freigeschaltet ist.

2

Die Anzahl gleichzeitiger Sitzungen prüfen

Prüfen Sie, dass Sie nicht mehr gleichzeitige Sitzungen betreiben, als Tradovate über Ihren Bot, die Desktop-App, TradingView und alle weiteren Verbindungen hinweg erlaubt; zusätzliche Sitzungen können Ihre API-Verbindung offline schalten.

3

Ihre Marktdatenberechtigung bestätigen

Benötigen Sie speziell Echtzeit-API-Marktdaten, bestätigen Sie, dass Ihre Marktdatenberechtigungen vorhanden sind, da ein nicht autorisiertes Datenabonnement den Feed schließen kann.

Die Verbindung vor 24 Stunden proaktiv wechseln

Warten Sie nicht, bis der Server einen Tag alten Socket trennt, sondern kommen Sie ihm zuvor. Schließen Sie per Timer, deutlich unter der Obergrenze von ca. 24 Stunden, Ihren bestehenden WebSocket sauber und öffnen Sie einen neuen mit einem frisch erneuerten Token, dann neu autorisieren und neu abonnieren. Da Ihr Reconnect-Pfad bereits existiert (Sie haben ihn im vorherigen Schritt gebaut), ist ein geplanter Wechsel nur eine kontrollierte Version derselben Routine. Er macht aus einer überraschenden Trennung um 3 Uhr nachts eine geplante, unsichtbare Auffrischung.

Tabelle zur Fehlerbehebung

Fehler / Zustand Was es bedeutet Lösung
Connection to remote host was lostDer WebSocket zu Tradovate wurde geschlossen und ist unbrauchbarAutomatisch neu verbinden, neu autorisieren und neu abonnieren; sicherstellen, dass Heartbeats fließen
WebSocket closed with code 1006Abnormaler Abbruch, ohne sauberen Handshake getrenntAls normale Trennung behandeln; Socket mit Backoff neu öffnen
Socket stirbt etwa alle 90 MinutenDas Zugriffstoken hinter der Verbindung ist abgelaufenrenewAccessToken ca. 15 Min. vor Ablauf aufrufen und den Socket neu autorisieren
Feed bricht nach vielen Stunden / über Nacht abLanglebige Verbindung wurde recycelt (oft um 24 Stunden)Die Verbindung per Timer proaktiv vor ca. 24 Stunden wechseln
Trennung nur, wenn der Tab im Hintergrund istDer Browser hat Ihren setInterval-Heartbeat unter 2,5 s gedrosseltHeartbeats ab der zuletzt empfangenen Nachricht takten, nicht in festem Intervall
Reconnect-Schleife / neue Abbrüche nach dem ReconnectReconnect-Sturm löst Ratenlimits oder die Sitzungsobergrenze ausExponentielles Backoff hinzufügen; Tokens erneuern, statt neue Sitzungen zu authentifizieren
Datenfeed still, aber kein Fehler ausgelöstSocket halb offen; Server hat aufgehört zu senden, Client hat es nicht bemerktDen 2,5-s-Heartbeat erzwingen und verpasste Heartbeats als Trennung behandeln

Verhindern Sie das mit PickMyTrade

Wenn Ihr Ziel schlicht ist, TradingView-Alarme zuverlässig in Tradovate zu bekommen, müssen Sie diese gesamte Socket-Infrastruktur nicht selbst bauen und überwachen. PickMyTrade sitzt zwischen TradingView und Tradovate und hält die Verbindung für Sie gesund.

  • Verwaltete Reconnect-Logik, automatischer Reconnect, Re-Autorisierung und Neuabonnement bei jedem Abbruch, sodass ein verlorener Socket sich erholt, ohne dass Sie den Code schreiben oder pflegen müssen.
  • Integrierte Token-Erneuerung, Sitzungen werden vor Ablauf aufgefrischt, sodass die Verbindung authentifiziert bleibt, statt an der 90-Minuten-Token-Uhr zu sterben.
  • Verbindungswechsel, langlebige Verbindungen werden proaktiv recycelt, sodass der Abbruch nach ca. 24 Stunden Ihre Automatisierung nie offline erwischt.
  • Ratenlimit-sicheres Routing, Reconnects und Order-Fluss werden zeitlich gestreckt, um die Limits von Tradovate einzuhalten, und vermeiden die Reconnect-Sturm-Sperren, die rohe Sockets plagen.

Schluss mit der Socket-Überwachung

Möchten Sie aufhören, Ihren Socket zu überwachen? Starten Sie Ihre kostenlose 7-Tage-Testphase, verknüpfen Sie heute Ihre Alarme und handeln Sie ohne Ablehnungen.

Starten Sie Ihre kostenlose 7-Tage-Testphase

Häufig gestellte Fragen

Fast immer, weil der Client seinen 2,5-Sekunden-Heartbeat nicht mehr gesendet hat, das Zugriffstoken abgelaufen ist oder die Verbindung einfach gealtert ist (lange Sitzungen jenseits von ca. 24 Stunden werden recycelt). Fügen Sie Heartbeats, Token-Erneuerung und automatischen Reconnect hinzu, und die Abbrüche werden zum Nicht-Ereignis.

Alle 2,5 Sekunden. Senden Sie einen Frame, dessen Text ein leeres Array ist, []. Hört der Server 2,5 Sekunden nichts von Ihnen, während er Ihnen keine Daten streamt, schließt er den Socket wegen Inaktivität.

Browser drosseln setInterval/setTimeout in inaktiven Tabs, sodass sich Ihr Intervall über 2,5 Sekunden hinaus dehnt. Versehen Sie statt eines festen Intervalls jede empfangene Nachricht mit einem Zeitstempel und senden Sie nur dann einen Heartbeat, wenn seit dem letzten mehr als 2500 ms vergangen sind.

Ein Zugriffstoken hält laut API-Dokumentation von Tradovate etwa 90 Minuten. Rufen Sie renewAccessToken etwa 15 Minuten vor Ablauf auf, um die Sitzung zu verlängern, und stellen Sie dann sicher, dass der Socket mit dem erneuerten Token autorisiert ist. Ein erneutes Verbinden und das erneute Senden eines authorize-Frames ist der sicherste Weg, ihn authentifiziert zu halten.

Ja. Ein neuer Socket beginnt ohne Abonnements, daher müssen Sie nach dem erneuten Öffnen und Autorisieren jedes Symbol und jeden Sync neu abonnieren, den Sie vor dem Abbruch abgehört haben.

Nein. Es ist eine erwartbare Eigenschaft sehr langlebiger Verbindungen. Die verlässliche Antwort besteht darin, die Verbindung proaktiv zu wechseln, bevor sie dieses Alter erreicht, statt darauf zu warten, dass der Server sie trennt.

Sofortige, aufeinanderfolgende Reconnect-Versuche bombardieren den Server und können die Anfragegrenzen von Tradovate auslösen, und wiederholtes erneutes Authentifizieren kann die Obergrenze für gleichzeitige Sitzungen erreichen. Fügen Sie zwischen den Versuchen ein exponentielles Backoff hinzu und erneuern Sie Tokens, statt neue Sitzungen zu starten.

Wenn Sie nur TradingView-Alarme an Tradovate übermitteln müssen, ja. PickMyTrade verwaltet Heartbeat, Token-Erneuerung, Reconnect und Verbindungswechsel für Sie, sodass Sie keinen widerstandsfähigen WebSocket-Client selbst pflegen müssen.

Dieser Leitfaden dient ausschließlich Bildungs- und Informationszwecken und stellt keine Finanz-, Anlage- oder Handelsberatung dar. Der Handel mit Futures und anderen gehebelten Produkten birgt ein erhebliches Verlustrisiko und ist nicht für jeden Anleger geeignet. PickMyTrade ist eine unabhängige Automatisierungsplattform eines Drittanbieters und steht in keiner Verbindung zu Tradovate, Inc., wird von diesem weder unterstützt noch gesponsert. „Tradovate“ und alle zugehörigen Namen, Logos und Marken sind Eigentum ihrer jeweiligen Inhaber. Plattformfunktionen und Abläufe ändern sich im Laufe der Zeit. Bestätigen Sie daher stets den aktuellen Ablauf in der offiziellen Tradovate-Plattform und -Dokumentation, bevor Sie handeln.