Tradovate

NinjaTrader-Tradovate-Stop wird nicht auf Breakeven aktualisiert

NinjaTrader zeigt Ihren Stop auf Breakeven verschoben, der Kurs läuft direkt durch dieses Niveau zurück, und Sie tragen trotzdem den vollen Verlust. Der Orders-Bericht von Tradovate erzählt eine andere Geschichte als Ihr Bildschirm. Hier erfahren Sie, warum, und wie Sie die Lücke schließen.

On This Page

Sie haben zugesehen, wie NinjaTrader Ihren Stop auf Breakeven nachzog, der Kurs lief direkt durch dieses Niveau zurück, und statt eines Nullergebnisses nahmen Sie den vollen Verlust von 20 Punkten mit. Dann öffneten Sie den Orders-Bericht von Tradovate, und da war es: Der Stop stand noch immer auf Ihrem ursprünglichen Einstiegs-Stop-Preis. Diese Lücke ist das ganze Problem. Ihre Strategie zeigt auf Ihrem Bildschirm den neuen Preis, aber die Änderung hat die Live-Order des Brokers nie erreicht. Es tritt in verschiedenen Verkleidungen auf: ein Stop, der sich nie von seinem Startpreis bewegt, ein Trailing-Stop, der einige Ticks von dem abweicht, was Ihr Code vorgegeben hat, oder eine Änderung, die „einfach orange bleibt“ und nie bestätigt wird. Wenn Sie Ihr Risiko über eine Bridge wie PickMyTrade leiten, entfällt der fragile Übergang, an dem diese stillen Fehler passieren, aber zuerst müssen Sie verstehen, wo das Update tatsächlich verschwindet.

Kurze Checkliste für einen Stop, der nicht auf Breakeven wandert

  • Prüfen Sie zuerst den Orders-Bericht von Tradovate. Der Preis der aktiven Order beim Broker ist Ihre einzige Wahrheitsquelle, die Anzeige von NinjaTrader kann hinterherhinken oder abweichen.
  • Bestätigen Sie, dass die Änderung nicht abgelehnt wurde. Ein Stop, der in einem schnellen Markt auf die falsche Seite verschoben wird, wird abgelehnt, und die alte Order bleibt aktiv.
  • Prüfen Sie den neuen Stop-Preis: Er muss vor jedem ChangeOrder()-Aufruf unter dem Bid (Long) oder über dem Ask (Short) liegen.
  • Aktualisieren Sie Ihre Order-Referenz mit GetRealtimeOrder(), wenn die Strategie von historisch zu Echtzeit wechselt.
  • Drosseln Sie schnelle Änderungen. Eine Trailing-Schleife bei hohem Volumen kann die Annahme des Brokers überholen und Updates auf den Boden fallen lassen.
  • Fügen Sie Ihrer Stop-Update-Methode eine Fehlerbehandlung hinzu, damit eine fehlgeschlagene Änderung im Log erscheint, statt zu verschwinden.

Was „Stop wird nicht auf Breakeven aktualisiert“ tatsächlich bedeutet

NinjaTrader und Tradovate führen zwei getrennte Bilder Ihrer Order. NinjaTrader hält ein lokales Order-Objekt, das Ihre Strategie liest und schreibt. Tradovate hält die tatsächliche aktive Order, die die Börse ausführen wird. Ein ChangeOrder() oder ein Ziehen im Chart oder DOM ist eine Anfrage, die über die Verbindung gesendet wird und Tradovate bittet, diese Live-Order zu ändern. Bis Tradovate sie akzeptiert und eine Bestätigung zurücksendet, bleibt die Order des Brokers genau dort, wo sie war.

Hier liegt die Falle: NinjaTrader kann den neuen Breakeven-Preis bereitwillig anzeigen, während Tradovate nichts akzeptiert hat. Stellen Sie sich eine nicht verwaltete Strategie vor, die einen Stop von 20 Punkten setzt, ihn bei einem Gewinn-Trigger auf Breakeven verschiebt und ihn dann nachzieht. Bei einer volumenstarken Morgeneröffnung wird der Stop in NinjaTrader als verschoben angezeigt, doch der Orders-Bericht von Tradovate zeigt, dass er den ursprünglichen Preis nie verlassen hat. Der Kurs läuft durch den „Breakeven“ zurück, und die Position schließt am ursprünglichen Stop, weil die Order von Tradovate die ganze Zeit dort lag.

Deshalb ist der Orders-Bericht wichtiger als der Chart. Wenn der aktive Preis des Brokers und der beabsichtigte Preis Ihrer Strategie nicht übereinstimmen, glauben Sie dem Broker. Alles Folgende dient dazu, diese Lücke zu schließen.

Die häufigsten Ursachen für einen NinjaTrader-Stop, der bei Tradovate nicht aktualisiert wird

1. Die Änderung traf die falsche Marktseite und wurde abgelehnt

Das ist die Ursache Nummer eins bei schnellen Bewegungen. Ein schützender Verkaufs-Stop für eine Long-Position muss unter dem Markt liegen, ein Kauf-Stop zur Absicherung einer Short-Position darüber. Versuchen Sie, einen Stop auf Breakeven zu verschieben, nachdem der Kurs dieses Niveau bereits durchlaufen hat, ist die Änderung eine ungültige Order, und der Broker lehnt sie mit etwas wie „Sell stop or sell stop limit orders can't be placed above the market.“ ab. NinjaTrader hat sein lokales Objekt möglicherweise schon aktualisiert, doch weil die Änderung abgelehnt wurde, behält Tradovate den vorherigen Stop zum ursprünglichen Preis aktiv.

Unter schnellen Bedingungen ist das kein Bug, sondern die Börse, die eine Order verweigert, die sie nicht erfüllen kann. Die Lösung ist defensive Preisgestaltung, wie unten beschrieben.

2. Ihr Code hat eine veraltete Order-Referenz geändert

NinjaTrader führt Ihre Strategie zuerst über historische Balken aus und wechselt dann in Echtzeit. Wenn Sie ein Order-Objekt im historischen Zustand in einer Variablen gespeichert haben und nach dem Live-Gang der Strategie weiter ChangeOrder() auf diese Referenz aufrufen, ändern Sie ein totes Objekt, und die Live-Order bei Tradovate sieht die Änderung nie. Die Dokumentation von NinjaTrader ist hier eindeutig: Wenn historische Order-Referenzen in Echtzeit übergehen, müssen Sie die Referenz mit dem Helfer GetRealtimeOrder() aktualisieren, sonst schlägt die Änderung fehl.

Ein enger Verwandter davon ist eine Änderung, die unmittelbar nach der Platzierung mit einem gerundeten oder veralteten Preis ausgelöst wird. Eine Strategie kann einen Stop bei 19802 anordnen, während die Tradovate-Order 19805.75 zeigt, und die Ursache ist die eigene Logik der Strategie, die den Stop direkt nach der Übermittlung ändert, nicht ein Broker-Fehler. Die Lehre ist einfach: Liegt die Zahl bei Tradovate nah dran, aber falsch, verdächtigen Sie Ihren Codepfad, nicht die Verbindung.

3. Drosselung bei hohem Volumen von Order-Änderungen

Tradovate drosselt, wie schnell es Order-Aktionen annimmt, und diese Limits variieren je nach Konto und ändern sich im Laufe der Zeit. Prüfen Sie die aktuellen API-Rate-Limits von Tradovate, statt von einer festen Zahl auszugehen. Eine Trailing-Routine, die bei jedem Tick oder jedem Balken ein ChangeOrder() auslöst, kann Änderungen schneller erzeugen, als der Broker sie annimmt. Dann werden einige Änderungen verworfen oder abgelehnt, während der lokale Zustand von NinjaTrader weitermarschiert und die beiden Bilder auseinanderdriften. Das ist das klassische Muster „in der Sim funktioniert, bei der Eröffnung fehlgeschlagen“ bei hohem Volumen.

4. NinjaTrader zeigt die Änderung lokal, aber der Broker hat sie nie bestätigt

Selbst bei sauberem Code kann die Verbindung eine Änderung in der Schwebe lassen. Sie verschieben einen Stop oder Take-Profit, und die Order „bleibt einfach orange“, wird nie bestätigt, und Trennen, Neuverbinden und Neustarten von NinjaTrader löst es nicht. In diesem Zustand gehen Sie davon aus, dass der Broker noch die alte Order hält. Bei einer hängenden Live-Order ist es richtig, Ihren Broker oder Evaluationsanbieter zu kontaktieren, um die Live-Order zu bestätigen und direkt zu verwalten, und dann Ihre Log- und Trace-Dateien einzureichen, damit es untersucht werden kann.

5. Verwaltete Order nicht live-until-cancelled, oder Tick-Rundung

Beim verwalteten Ansatz muss eine Order als live-until-cancelled markiert sein, damit sie über Balken hinweg änderbar bleibt. Wird das übersprungen, behandelt das Framework sie möglicherweise als nicht mehr änderbar, sodass Ihre Änderung stillschweigend nichts bewirkt. Die Preisrundung verschärft es: Wenn Ihr berechneter Breakeven nicht auf die Tickgröße des Instruments gerundet ist, kann der Broker ihn ablehnen oder verschieben, sodass die aktive Order von Ihrer Erwartung abweicht.

So beheben Sie einen NinjaTrader-Tradovate-Stop, der nicht aktualisiert wird

Ablehnungen wegen der falschen Marktseite beheben

  1. Lesen Sie vor jeder Stop-Änderung den aktuellen Markt. Liegt Ihr neuer Preis beim schützenden Verkaufs-Stop einer Long-Position auf oder über dem Bid, begrenzen Sie ihn auf einen Tick unter dem Bid (newPrice = GetCurrentBid() - TickSize); spiegeln Sie dies für Shorts gegen den Ask.
  2. Rücken Sie den Stop erst dann Richtung Breakeven vor, wenn der Kurs ihn um einen Puffer überschritten hat. Ordnen Sie Breakeven nicht in dem Moment an, in dem der Gewinn dem Stop-Abstand entspricht.
  3. Runden Sie den Endpreis auf die Tickgröße des Instruments, damit der Broker ihn nie verschieben muss.

Veraltete Order-Referenzen beheben

  1. Holen Sie in OnStateChange(), wenn die Strategie in Echtzeit übergeht, jedes Order-Objekt, das Sie ändern wollen, mit GetRealtimeOrder() erneut.
  2. Bestätigen Sie, dass die zurückgegebene Referenz nicht null ist, bevor Sie ChangeOrder() aufrufen. Null bedeutet, dass die Order bereits ausgeführt, storniert oder abgelehnt ist und nichts Aktives mehr zu ändern ist.
  3. Halten Sie schützende Orders im verwalteten Ansatz live-until-cancelled, damit sie über Balken hinweg änderbar bleiben.

Drosselung und Fehlerbehandlung hinzufügen

  1. Senden Sie eine Änderung nur, wenn sich der Zielpreis tatsächlich um mindestens einen Tick geändert hat. Überspringen Sie die überflüssigen ChangeOrder()-Aufrufe.
  2. Umhüllen Sie Ihre Stop-Update-Methode mit einer Fehlerbehandlung, die Order-ID, Zeitstempel und Ablehnungsgrund protokolliert, damit aus einem stillen Fehler eine sichtbare Logzeile wird. Eine bessere Fehlerbehandlung für eine Methode wie UpdateStopLoss ist oft die eine Änderung, die endlich den nächsten Fehler erfasst.
  3. Vergrößern Sie bei Nachrichten und der Cash-Eröffnung das Intervall zwischen Trailing-Updates, um unter der Annahmerate des Brokers zu bleiben.

NinjaTrader mit Tradovate abgleichen

  1. Halten Sie den Orders-Bericht (oder die Order History) von Tradovate neben NinjaTrader geöffnet, solange ein Live-Stop nachgezogen wird.
  2. Bestätigen Sie nach jeder Änderung, dass der aktive Preis bei Tradovate Ihrem beabsichtigten Preis entspricht. Wenn nicht, ist die Änderung nicht angekommen.
  3. Steckt eine Order unbestätigt fest, schließen oder verwalten Sie sie direkt bei Tradovate, statt der lokalen Anzeige von NinjaTrader zu vertrauen.

Tabelle zur Fehlersuche

Symptom / Fehler Was es bedeutet Lösung
Stop zeigt in NinjaTrader Breakeven, in Tradovate den ursprünglichen PreisDie Änderung erreichte den Broker nie oder wurde von ihm abgelehntDem Orders-Bericht von Tradovate vertrauen; Preisseite prüfen und Referenz erneut kontrollieren
Meldung „Sell stop ... can't be placed above the market“ (oder das Gegenstück beim Buy-Stop)Der neue Stop lag auf der falschen Seite eines schnellen MarktesNeuen Preis vor dem Absenden einen Tick jenseits von Bid/Ask begrenzen
Tradovate-Stop-Preis weicht um einige Ticks von der Strategie abDer Code ändert den Stop nach der Platzierung mit einem veralteten/gerundeten PreisAuf Tickgröße runden; sofortige erneute Änderung nach dem Einstieg unterlassen
Änderung „bleibt einfach orange“ / wird nie bestätigtLive-Order hängt in der VerbindungOrder direkt bei Tradovate verwalten; NinjaTrader-Logs/Trace einreichen
Trailing-Stop verliert Updates bei hohem VolumenÄnderungen überholten die Annahmerate des BrokersUpdates drosseln; nur bei einer echten Änderung um eine Tickgröße senden
ChangeOrder() bewirkt nach dem Echtzeitstart stillschweigend nichtsÄnderung eines veralteten historischen Order-ObjektsMit GetRealtimeOrder() neu holen; Orders live-until-cancelled halten

Verhindern Sie das mit PickMyTrade

  • Vom Broker bestätigter Order-Zustand, das Routing geht direkt zu Tradovate und verfolgt die tatsächlich aktive Order des Brokers, sodass Ihr Stop das widerspiegelt, was die Börse hält, und nicht eine veraltete lokale Kopie.
  • Prüfung von Menge und Symbol, blockiert fehlerhafte oder seitenfalsche Änderungen, bevor sie gesendet werden, und reduziert stille Ablehnungen.
  • Rate-Limit-sicheres Routing, verteilt den Orderfluss zeitlich, damit schnelle Trailing-Updates die Annahme des Brokers nicht überholen und verschwinden.
  • Multi-Konto-Synchronisierung, spiegelt den korrigierten Stop über jedes verbundene Konto, statt die Order eines Kontos zurückzulassen.

Schluss mit sich in Luft auflösenden Breakeven-Stops

Das Routing geht direkt zu Tradovate und verfolgt die tatsächlich aktive Order des Brokers, sodass Ihr Stop das widerspiegelt, was die Börse hält, und nicht eine veraltete lokale Kopie.

Starten Sie Ihre kostenlose 7-Tage-Testphase

Häufig gestellte Fragen

NinjaTrader führt eine lokale Kopie der Order, während Tradovate die echte aktive Order hält. Wurde die Änderung abgelehnt oder nie bestätigt, kann die Kopie von NinjaTrader voranschreiten, während der Stop des Brokers an Ort und Stelle bleibt. Prüfen Sie immer anhand des Orders-Berichts von Tradovate.

Meistens liegt es an der Strategie oder am schnellen Markt, nicht an Tradovate. Die üblichen Ursachen sind das Ändern einer veralteten Order-Referenz, das Senden eines Stops auf die falsche Marktseite oder das Auslösen von Änderungen schneller, als der Broker sie annimmt. Fügen Sie Ihrer Stop-Update-Methode Logging hinzu, um zu sehen, welcher Fall auftritt.

Es bedeutet, dass die Änderung in der Verbindung hängt und der Broker noch die vorherige Order hält. Verwalten Sie die Order direkt bei Tradovate und reichen Sie dann Ihre NinjaTrader-Log- und Trace-Dateien zur Untersuchung ein.

Prüfen Sie den neuen Stop-Preis vor dem Absenden: Halten Sie den Verkaufs-Stop einer Long-Position mindestens einen Tick unter dem aktuellen Bid, und rücken Sie erst auf Breakeven vor, nachdem der Kurs dieses Niveau mit einem Puffer überschritten hat.

Wenn Sie ein Order-Objekt während des historischen Warm-ups der Strategie speichern und es dann live ändern, ja. Holen Sie die Live-Referenz mit GetRealtimeOrder() erneut, sobald die Strategie in Echtzeit geht, sonst zielen Ihre ChangeOrder()-Aufrufe auf ein totes Objekt.

Schnelle Kursbewegungen machen Ablehnungen wegen der falschen Seite wahrscheinlicher, und eine geschäftige Trailing-Schleife kann die Order-Aktionsrate des Brokers überschreiten. Beides lässt die Anzeige von NinjaTrader der echten Order von Tradovate vorauseilen. Drosseln Sie Updates und setzen Sie in diesen Zeitfenstern auf defensive Preisgestaltung.

Eine Bridge kann Börsenregeln nicht außer Kraft setzen, aber bestätigungsbewusstes Routing, das den realen Order-Zustand des Brokers verfolgt und Änderungen dosiert, beseitigt die fragile Stelle, an der die lokale Kopie von NinjaTrader unbemerkt vom Live-Stop bei Tradovate abweicht.

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. oder Bookmap, wird von diesen weder unterstützt noch gesponsert. Alle genannten Namen, Logos und Marken sind Eigentum ihrer jeweiligen Inhaber. Funktionen und Schritte der Plattform ändern sich im Laufe der Zeit; bestätigen Sie daher den aktuellen Ablauf stets in der offiziellen Plattformdokumentation, bevor Sie handeln.