Tradovate API

Tradovate-WebSocket mit Heartbeats am Leben halten

Ein Tradovate-WebSocket ist nichts, was man einmal einrichtet und vergisst. Schweigen Sie ein paar Sekunden lang, und der Server kappt die Leitung. Die Lösung ist ein Heartbeat: ein winziger Frame, den Sie alle 2.5 Sekunden senden, um zu zeigen, dass Sie noch zuhören.

On This Page

Ein Tradovate-WebSocket ist die Überholspur für Kurse, Fills und DOM-Updates: eine einzige offene Verbindung, statt für jeden Tick die REST-API zu bombardieren. Aber er ist nichts zum Einrichten und Vergessen. Wenn Sie ein paar Sekunden lang still sind, nimmt der Server an, dass Ihr Client sich verabschiedet hat, und kappt die Leitung. Die Lösung ist ein Heartbeat: ein winziger Frame, den Sie alle 2.5 Sekunden senden, um zu beweisen, dass Sie noch zuhören. Hier ist der komplette Handshake, dazu die Anleitung, wie Sie den Socket stundenlang ohne Aufsicht am Laufen halten.

Wie der Tradovate-Socket kommuniziert

Jede Nachricht auf dem Socket ist ein Frame: ein einzelnes Präfixzeichen, gefolgt von einem JSON-Array. Sie müssen nur vier davon erkennen:

Präfix Frame-Typ Bedeutung
oÖffnenWird einmalig direkt nach dem Öffnen des Sockets gesendet. Das ist Ihr Signal zur Autorisierung.
hHerzschlagDas eigene Keep-alive des Servers. Er lässt diese aus, solange er aktiv Daten an Sie streamt.
aDatenarrayDie eigentliche Nutzlast: Kurse, Fills sowie Positions- und Order-Ereignisse als JSON.
cSchließenDie Verbindung wird beendet. Führen Sie Ihre Aufräumroutine und Ihre Reconnect-Logik aus.

Ihre Aufgabe: Reagieren Sie auf o mit der Autorisierung, lesen Sie die a-Frames und halten Sie einen gleichmäßigen Heartbeat aufrecht, damit der Server nie denkt, Sie seien verstummt.

WebSocket am Leben halten: Schritt für Schritt

1

Socket öffnen und auf den „o“-Frame warten

Verbinden Sie sich zuerst mit dem richtigen Endpunkt. Der Trading-Socket liegt in der Demo-Umgebung unter wss://demo.tradovateapi.com/v1/websocket und für ein Live-Konto mit Guthaben unter wss://live.tradovateapi.com/v1/websocket. Marktdaten laufen über einen eigenen Socket: wss://md.tradovateapi.com/v1/websocket für den Live-Feed oder der md-demo-Host für den simulierten. Sobald die Verbindung offen ist, sendet der Server ein einzelnes o. Senden Sie nichts, bevor Sie es sehen.

2

Sitzung autorisieren

Sobald dieses o eintrifft, senden Sie Ihr Access-Token als allerersten Frame. Das Format lautet: Anfragename, Anfrage-ID, eine leere Query-Zeile, dann das Token als Body: authorize\n0\n\n{yourAccessToken}. Eine 200 als Antwort bedeutet, dass Sie authentifiziert sind und die Daten fließen können. Brauchen Sie ein Token? Holen Sie sich zuerst eines über den Tradovate-API-Zugang, und erneuern Sie es, bevor es mitten in der Sitzung abläuft.

3

Alle 2.5 Sekunden einen []-Heartbeat senden

Darauf kommt es an. Senden Sie alle 2.5 Sekunden einen Frame mit exakt dem Text [], einem leeren Array, nicht mehr. Solange diese Heartbeats ankommen, hält der Server den Socket offen. Wird die Pause länger, trennt er Sie. Eine Sache bringt viele aus dem Konzept: Der Server sendet keine eigenen h-Frames mehr, solange er aktiv Daten an Sie schickt. Das ist normal; Stille von der Serverseite ist kein Grund, Ihre eigenen Heartbeats einzustellen.

4

Vertrauen Sie setInterval in einem Browser-Tab nicht

Das ist die Falle, in die die meisten Browser-Apps tappen. Schicken Sie den Tab in den Hintergrund, drosselt Chrome setInterval und setTimeout, um Strom zu sparen. Ihr sauberer 2.5-Sekunden-Takt dehnt sich auf zehn, dreißig, sogar sechzig Sekunden, und der Socket stirbt unbemerkt, während Sie in einem anderen Tab E-Mails lesen. Verlagern Sie den Timer vom Main-Thread: Führen Sie den Heartbeat in einem Web Worker aus, der beim Fokusverlust des Tabs nicht in gleicher Weise gedrosselt wird. Wenn Sie die Verbindung in einem Node.js-Prozess betreiben, entfällt das Problem komplett, denn es gibt keinen inaktiven Tab, der gedrosselt werden könnte. Ein leichterer Trick besteht darin, Heartbeats durch eingehenden Datenverkehr auszulösen und jedes Mal einen zu senden, wenn seit dem letzten mehr als 2.5 Sekunden vergangen sind; das funktioniert aber nur, solange Daten fließen.

5

Einen toten Socket erkennen und neu verbinden

Selbst ein einwandfreier Heartbeat übersteht weder ausgefallenes WLAN noch einen Server-Neustart. Achten Sie auf das close-Ereignis des Sockets und werten Sie auch eine lange Stille vom Server als tote Leitung. Wenn eines von beiden eintritt, verbinden Sie sich neu und autorisieren von vorn. Warten Sie zwischen den Versuchen mit Backoff, statt in Dauerschleife anzufragen: Beginnen Sie bei etwa einer Sekunde und verdoppeln Sie die Wartezeit bis zu einer Obergrenze von rund einer Minute, damit ein Reconnect-Sturm nicht die Rate-Limits von Tradovate auslöst, während Sie ohnehin offline sind. Sobald Sie wieder verbunden sind, abonnieren Sie die Kurse und Ereignisse erneut, die Sie beobachtet haben; der neue Socket startet leer.

Der Authorize-Frame und der Heartbeat-Frame

// Erster Frame nach dem „o“-Open-Frame:
authorize
0

{yourAccessToken}

// Wird alle 2.5 Sekunden gesendet, solange die Verbindung besteht:
[]

Drei Gewohnheiten, die es langweilig halten

Langweilig ist bei einem Marktdaten-Feed das Ziel. Geben Sie dem Heartbeat einen eigenen, zuverlässigen Timer, protokollieren Sie jeden Close-Code, damit Sie einen Netzwerkaussetzer von einem Authentifizierungsfehler unterscheiden können, und abonnieren Sie nach jedem Reconnect stets neu. Wenn Sie diese drei Dinge richtig machen, läuft der Socket durch eine komplette Sitzung, ohne dass Sie daran denken müssen.

Automatisieren Sie das mit PickMyTrade

Sie möchten Heartbeats, Worker und Reconnect-Logik nicht selbst bauen? Lassen Sie PickMyTrade die Live-Verbindung zu Tradovate aufrechterhalten, während es Ihre TradingView-Alerts direkt an Ihr Konto weiterleitet.

Verzichten Sie auf die Heartbeat-Installation

Lassen Sie PickMyTrade die Live-Verbindung zu Tradovate aufrechterhalten, während es Ihre TradingView-Alerts direkt an Ihr Konto weiterleitet.

Starten Sie Ihre kostenlose 7-Tage-Testphase

Häufig gestellte Fragen

Alle 2.5 Sekunden. Senden Sie in diesem Takt einen Frame mit dem Text [], und der Server hält die Verbindung offen; lassen Sie die Pause länger werden, schließt er den Socket.

Nichts außer einem leeren JSON-Array als Text. Er transportiert keine Daten; seine einzige Aufgabe ist es, dem Server mitzuteilen, dass Ihr Client noch aktiv ist.

Browser drosseln setInterval und setTimeout in Hintergrund-Tabs, sodass Ihr Heartbeat ins Hintertreffen gerät und der Server die Verbindung wegen Zeitüberschreitung trennt. Führen Sie den Timer in einem Web Worker oder einem Node.js-Prozess aus, um das zu vermeiden.

Diese Anleitung 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 weder von Tradovate, Inc. unterstützt noch gesponsert. „Tradovate“ und alle zugehörigen Namen, Logos und Marken sind Eigentum ihrer jeweiligen Inhaber. Funktionen und Schritte der Plattform ändern sich im Laufe der Zeit. Prüfen Sie daher stets den aktuellen Ablauf in der offiziellen Tradovate-Plattform und -Dokumentation, bevor Sie handeln.