Tradovate API

Tradovate-API-Fehler 404 bei md/getChart-Verlaufsdaten

Sie haben ein WebSocket eingerichtet, eine saubere md/getChart-Anfrage gesendet und Not found: md/getChart zurückbekommen. In neun von zehn Fällen liegt es am falschen Socket oder an einem Symbol, das Tradovate nicht auflösen kann.

Geprüft vom PickMyTrade Trading Systems Team Zuletzt aktualisiert
· 7 Minuten Lesezeit
Tradovate-WebSocket-Client mit einer Not found: md/getChart 404-Antwort

Sie haben ein WebSocket eingerichtet, es autorisiert, eine saubere md/getChart-Anfrage für ein paar Hundert Bars an Historie gesendet, und der Server hat Ihnen Not found: md/getChart entgegengeschleudert. Am Payload scheint nichts falsch zu sein. Warum also ein 404 auf einen Endpunkt, der eindeutig in der Dokumentation existiert?

In neun von zehn Fällen liegt es an einer von zwei Sachen: Sie haben die Anfrage an das falsche Socket gesendet, oder Sie haben nach einem Symbol gefragt, das Tradovate nicht auflösen kann. Beides erzeugt ein “not found”, das von Ihrer Seite aus identisch aussieht. Gehen wir jede Ursache in der Reihenfolge durch, in der es sich zu prüfen lohnt, damit Ihre historischen Bars wieder fließen.

Was der 404 Ihnen wirklich sagt

Ein 404 bei einem REST-Aufruf bedeutet, dass der URL-Pfad nicht existiert. Über Tradovates WebSocket gilt dasselbe Prinzip: Der Frame, den Sie senden, benennt einen Endpunkt, und wenn das Socket, mit dem Sie verbunden sind, diesen Endpunkt nicht bedient, erhalten Sie Not found mit dem zurückgespiegelten Endpunktnamen. Das bedeutet nicht, dass Ihr Symbol ungültig oder Ihr Token abgelaufen ist. Es bedeutet: “Ich habe hier keine Route dafür.”

Diese Unterscheidung ist wichtig. Wenn die Meldung wortwörtlich Not found: md/getChart lautet, ist der Endpunkt selbst über diese Verbindung nicht erreichbar, was direkt auf das Problem mit dem falschen Socket hindeutet. Wenn die Anfrage die Marktdaten-Engine erreicht, der Kontrakt aber nicht gefunden werden kann, sehen Sie stattdessen einen Fehler, der mit dem Symbol zusammenhängt. Lesen Sie den genauen Text, bevor Sie anfangen, Code zu ändern.

Ursache 1: Sie greifen auf das falsche WebSocket zu

Das ist die große Ursache, und sie erwischt fast jeden beim ersten Mal. Tradovate betreibt zwei unterschiedliche WebSocket-Dienste, und diese sind nicht austauschbar:

  • Das Trading-/API-Socket verarbeitet Orders, Positionen, Konten und die übrigen Entitätsdaten. Live ist wss://live.tradovateapi.com/v1/websocket; Demo ist wss://demo.tradovateapi.com/v1/websocket.
  • Das Marktdaten-Socket verarbeitet Kurse, DOM und Charts. Live ist wss://md.tradovateapi.com/v1/websocket; Demo ist wss://md-demo.tradovateapi.com/v1/websocket.

Alle md/-Endpunkte, md/getChart, md/subscribeQuote, md/subscribeDOM, existieren ausschließlich auf dem Marktdaten-Socket. Senden Sie sie an das Trading-Socket, gibt es schlicht keine passende Route, und Sie erhalten Not found: md/getChart. Das Trading-Socket gibt keinen Hinweis darauf, dass Sie am falschen Ort sind; es meldet den Endpunkt einfach als fehlend.

Vergleich zwischen dem Tradovate-Trading-WebSocket-Host und dem separaten Marktdaten-WebSocket-Host

Die Lösung: Öffnen Sie eine zweite WebSocket-Verbindung zum Marktdaten-Host und senden Sie Ihre Chart-Anfrage dorthin. Ein häufiger Fehler ist, das Trading-Socket einwandfrei zu autorisieren und dann dieselbe Verbindung für Marktdaten wiederzuverwenden. Sie brauchen beide Sockets geöffnet, und jedes benötigt seinen eigenen authorize-Frame mit Ihrem Access Token, bevor es überhaupt auf eine Anfrage antwortet.

Noch eine Falle zum selben Thema: Umgebung abgleichen. Wenn Ihr Access Token vom Live-Auth-Endpunkt stammt, verwenden Sie md.tradovateapi.com. Wenn er von Demo stammt, verwenden Sie md-demo.tradovateapi.com. Ein Live-Token mit dem Demo-Marktdaten-Host zu kombinieren (oder umgekehrt) führt zur Ablehnung, noch bevor die Chart-Anfrage überhaupt eine Rolle spielt. Hostnamen werden gelegentlich aktualisiert, also überprüfen Sie die aktuellen anhand von Tradovates eigener Entwicklerdokumentation, statt einem Snippet zu vertrauen, das Sie vor einem Jahr kopiert haben.

Ursache 2: Das Symbol ist kein echter Kontrakt

Angenommen, Ihr Socket ist korrekt und Sie erhalten dennoch eine Not-found-Antwort im Zusammenhang mit der Anfrage. Schauen Sie sich das Symbol genau an. Chart-Anfragen benötigen einen vollständig qualifizierten Futures-Kontrakt, nicht die Produktwurzel, die Sie in einer Watchlist sehen.

“YM” ist für sich genommen nicht handelbar, es ist die Wurzel. Was Tradovate auflösen kann, ist der konkrete Kontrakt, wie YMH5, wobei H der Monatscode für März und 5 das Jahr 2025 ist. Übergeben Sie die reine Wurzel, einen falschen Monatscode oder einen bereits abgelaufenen und zum nächsten Quartal gerollten Kontrakt, kann die Engine nichts finden, um daraus einen Chart zu erstellen. Hier ist die Standard-Monatscode-Tabelle für Futures:

Monat Code Monat Code
JanuarFJuliN
FebruarGAugustQ
MärzHSeptemberU
AprilJOktoberV
MaiKNovemberX
JuniMDezemberZ
Tradovate-Kontraktsuche mit einem vollständig qualifizierten Futures-Symbol samt Monatscode und Jahr

Statt eine Symbolzeichenkette fest zu codieren, lösen Sie den aktuellen Frontmonat-Kontrakt programmatisch auf. Die Endpunkte contract/find und die Produktsuche im Trading-Socket liefern Ihnen das exakte handelbare Symbol, sodass Sie nie raten müssen, ob ES von Dezember auf März gerollt ist. Wenn Sie einen kontinuierlichen oder “Frontmonat”-Alias verwenden müssen, prüfen Sie unbedingt, ob Tradovate diesen für Charts tatsächlich akzeptiert, viele kontinuierliche Notationen, die in einer Charting-Oberfläche funktionieren, lassen sich in einem rohen md/getChart-Aufruf nicht auflösen. Im Zweifelsfall fordern Sie den expliziten Kontrakt an.

Das ist auch der klassische Grund, warum eine Anfrage, die letztes Quartal funktioniert hat, plötzlich einen 404 wirft: Der von Ihnen fest hinterlegte Kontrakt ist abgelaufen. Rollovers erfolgen nach einem festen Zeitplan, und ein abgelaufenes Symbol verschwindet aus der Daten-Engine. Automatisieren Sie den Rollover, statt ihm manuell hinterherzujagen.

Ursache 3: Ihre Marktdaten-Berechtigung ist nicht eingerichtet

Korrektes Socket, gültiger Kontrakt, und trotzdem nichts Brauchbares? Prüfen Sie jetzt, wozu Ihr Konto tatsächlich berechtigt ist. Zwei Ebenen sind hier relevant.

Erstens muss der API-Zugriff selbst aktiviert sein. Das ist das Add-on API Access in Ihren Tradovate-Kontoeinstellungen, das den programmatischen Zugriff aktiviert und es Ihnen ermöglicht, die für Ihren Auth-Flow benötigten Anmeldedaten zu generieren. Ohne dieses Add-on trägt Ihr Token nicht die Berechtigungen, die die Marktdaten-Engine erwartet.

Tradovate-Einstellungsbildschirm zum Aktivieren des API-Zugriffs und der Börsen-Marktdaten-Abonnements

Zweitens erfordern Echtzeit-Marktdaten über die API die entsprechende Börsenvereinbarung und Lizenz. Für CME-Produkte bedeutet das eine monatliche Marktdatenlizenz zusätzlich zu Ihrem Plan. Der genaue Betrag wird von der Börse festgelegt und ändert sich im Laufe der Zeit. Bestätigen Sie daher die aktuelle Zahl bei Tradovate, statt einer Angabe zu vertrauen, die Sie irgendwo gelesen haben, es handelt sich typischerweise um eine wiederkehrende monatliche Gebühr, nicht um einen trivialen Betrag. Ohne diese Berechtigung kann eine korrekt formulierte Chart-Anfrage weiterhin unzugänglich oder leer zurückkommen, weil Sie Daten anfordern, für deren Empfang Ihr Konto nicht lizenziert ist. Wenn Ihre Symbole als unzugänglich statt als not-found angezeigt werden, ist genau das die Art von Problem, mit der Sie es zu tun haben.

Wenn Sie ein Prop-Firm- oder Evaluierungskonto haben, können Sie diese Daten oft überhaupt nicht selbst abonnieren, die Firma kontrolliert das. In diesem Fall läuft die Behebung der Berechtigung über den Support Ihrer Firma, nicht über den von Tradovate.

Ursache 4: Ein fehlerhafter Frame oder ein nicht autorisiertes Socket

Das WebSocket von Tradovate spricht kein reines JSON. Jede Anfrage ist ein Textframe mit einer bestimmten Struktur: der Endpunkt, dann die Anfrage-ID, dann eine (oft leere) Query-Zeile, dann der JSON-Body, getrennt durch Zeilenumbrüche, zum Beispiel md/getChart\n2\n\n{ ... }. Bringen Sie diese Struktur durcheinander, kann der Server den Endpunktnamen möglicherweise nicht korrekt parsen, was sich als Fehler im Stil von not-found äußern kann, obwohl Ihre Absicht in Ordnung war.

  • Zuerst autorisieren. Der allererste Frame auf dem Marktdaten-Socket muss authorize\n1\n\n<yourAccessToken> sein. Senden Sie md/getChart, bevor das Socket autorisiert ist, wird es nicht ausgeführt.
  • Socket am Leben halten. Die Verbindung erwartet einen periodischen Heartbeat-Frame. Verpassen Sie ihn, bricht das Socket ab; Anfragen an eine halbtote Verbindung schlagen auf verwirrende Weise fehl.

Bauen Sie den Frame genau wie dokumentiert auf, autorisieren Sie, bevor Sie anfragen, und senden Sie Heartbeats nach Zeitplan. Die meisten “zufälligen” 404s auf einem Socket, das vor einer Stunde noch funktioniert hat, lassen sich auf einen dieser drei Punkte zurückführen.

Eine kurze Checkliste, um den 404 zu beheben

Prüfpunkt Was zu bestätigen ist
Richtiges Socketmd/getChart geht an md.tradovateapi.com (live) oder md-demo.tradovateapi.com (demo), nicht an das Trading-Socket.
Passende UmgebungLive-Token → Live-Marktdaten-Host; Demo-Token → Demo-Host.
Vollständiges KontraktsymbolVerwenden Sie Symbole im Stil von ESH5, nicht die Wurzel ES und keinen abgelaufenen Kontrakt.
Berechtigungen aktivAPI-Access-Add-on aktiviert und Börsen-Marktdatenlizenz aktiv.
Frame + AuthAutorisieren Sie das Socket zuerst und senden Sie dann einen korrekt durch Zeilenumbrüche getrennten Anfrage-Frame.

Sobald die Chartdaten zu fließen beginnen

Wenn die Anfrage erfolgreich ist, liefert die Antwort Ihnen Subscription-IDs zurück, eine historische ID und eine Echtzeit-ID, und streamt Bars. Die Historie kommt in Batches an, und jeder Batch endet mit einem “end of history”-Marker, damit Sie wissen, wann ein Abschnitt vollständig ist. Es gibt keine feste harte Obergrenze dafür, wie viel Sie pro Anfrage abrufen können, aber das praktische Limit verschiebt sich von Tag zu Tag, sodass eine große Anfrage (etwa Minutenbars über mehrere Jahre) abgeschnitten statt mit einem Fehler zurückkommt.

Um weiter zurückzublättern, nehmen Sie den ältesten empfangenen Zeitstempel, senden Sie eine neue md/getChart-Anfrage mit diesem als nächstgelegenem Zeitstempel und Ihrem Zieldatum als fernem Zeitstempel, und wiederholen Sie das, bis Sie den benötigten Zeitraum haben. Und wenn Sie mit einem Echtzeit-Chart fertig sind, brechen Sie ihn mit md/cancelChart unter Verwendung der Echtzeit-ID ab, damit Sie keine Subscription behalten, die Sie nicht mehr lesen.

Wo PickMyTrade ins Spiel kommt

Die meisten Menschen, die auf diesen 404 stoßen, wollen eigentlich keine WebSocket-Klempner werden, sie wollen eine Strategie auf Tradovate ausführen, ohne Sockets, Token und Frame-Formate im Auge behalten zu müssen. PickMyTrade automatisiert das Order-Routing von TradingView-Alerts zu Tradovate, sodass Sie nicht selbst rohe WebSocket-Frames verdrahten müssen, nur um eine Strategie auszuführen.

  • Keine rohe Socket-Verkabelung Ihre TradingView-Alerts werden an Tradovate weitergeleitet, ohne einen einzigen WebSocket-Frame von Hand zu codieren.
  • Verwaltete Authentifizierung Tokens und Hosts werden für Sie verwaltet, sodass eine Umgebungs-Fehlanpassung nie zu Ihrem Problem wird.
  • Symbolverwaltung die Kontraktauflösung wird im Hintergrund verwaltet, statt dass Sie Monatscodes und Rollovers manuell im Blick behalten müssen.
  • Rate-Limit-sicheres Routing staffelt den Order-Flow, sodass nichts an Tradovates Anfragelimits abprallt.

Überspringen Sie die rohe Socket-Verkabelung

Möchten Sie, dass Ihre TradingView-Strategie auf Tradovate handelt, ohne einen einzigen WebSocket-Frame von Hand zu codieren? Erfahren Sie, wie PickMyTrade den gesamten Order-Flow automatisiert.

Starten Sie Ihre kostenlose 5-Tage-Testversion

Häufig gestellte Fragen

Weil der Endpunkt auf dem Socket, an das Sie ihn gesendet haben, nicht existiert. Marktdaten-Endpunkte gibt es nur auf dem dedizierten Marktdaten-WebSocket. Senden Sie md/getChart über das Trading-/API-Socket, hat der Server dafür keine Route, sodass er mit Not found: md/getChart antwortet. Verschieben Sie die Anfrage zum Marktdaten-Host, und sie wird aufgelöst.

Live-Marktdaten verwenden wss://md.tradovateapi.com/v1/websocket, Demo verwendet wss://md-demo.tradovateapi.com/v1/websocket. Diese sind von den Trading-Sockets getrennt. Bestätigen Sie die aktuellen Hostnamen in Tradovates Entwicklerdokumentation, bevor Sie sie fest in Ihren Code übernehmen.

Chart-Anfragen benötigen ein vollständiges Kontraktsymbol, nicht die Wurzel. YM kann nicht aufgelöst werden, YMH5 (März 2025) hingegen schon. Ein Wurzelsymbol, ein falscher Monatscode oder ein bereits abgelaufener Kontrakt liefern alle not found zurück. Holen Sie sich zuerst das exakte handelbare Symbol über eine Kontraktsuche.

Echtzeit-Marktdaten über die API erfordern die entsprechende Börsenvereinbarung und Lizenz, die bei CME-Produkten eine wiederkehrende monatliche Gebühr ist. Der Betrag variiert und wird von der Börse festgelegt, bestätigen Sie daher den aktuellen Satz bei Tradovate. Ohne diese Lizenz kommen Symbole als unzugänglich zurück, selbst wenn Ihre Anfrage perfekt formuliert ist.

PickMyTrade automatisiert das Order-Routing von TradingView-Alerts zu Tradovate, sodass Sie keine rohen WebSocket-Frames verdrahten müssen, nur um eine Strategie auszuführen. Es ist kein Feed für historische Massendaten, aber für die Automatisierung entfernt es den größten Teil der Low-Level-Verkabelung, die Fehler wie diesen verursacht.

Dieser Leitfaden dient ausschließlich zu 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 Drittanbieter-Automatisierungsplattform und steht in keiner Verbindung zu Tradovate, Inc. und wird nicht von diesem Unternehmen unterstützt oder gesponsert. Alle zugehörigen Namen, Logos und Marken sind Eigentum ihrer jeweiligen Inhaber. Plattformfunktionen und -schritte ändern sich im Laufe der Zeit, bestätigen Sie daher stets den aktuellen Ablauf in der offiziellen Tradovate-Plattform und -Dokumentation, bevor Sie handeln.