Tradovate-Indikator-Stapelüberlauf bei ~63.500 Bars
Scrollen Sie einen benutzerdefinierten Indikator weit genug zurück, und er bleibt einfach stehen, mit einem Maximum call stack size exceeded-Fehler in der Konsole. Es handelt sich um eine Browser-Obergrenze bei rund 63.500 Kerzen, und die Lösung besteht darin, weniger Historie zu laden, nicht mehr.
Sie sind mitten in einem Backtest, scrollen einen benutzerdefinierten Overlay-Indikator über Monate von Ein-Minuten-Bars zurück, und irgendwann bleibt der Indikator einfach stehen. Die Linie wird flach, die Bänder verschwinden, oder der Indikator weigert sich stillschweigend, weiterzuzeichnen. Öffnen Sie die Browser-Konsole, und da ist es: RangeError: Maximum call stack size exceeded. Das ist kein beschädigter Chart, kein fehlerhafter Datenfeed und keine falsche Konfiguration Ihrerseits. Es ist eine Obergrenze. Benutzerdefinierte Overlay-Indikatoren auf Tradovate brechen zuverlässig zusammen, sobald der geladene Chart etwa 63.500 Kerzen überschreitet, und keine Menge an zusätzlich gekauften Daten oder Browserwechsel verschiebt diese Wand. Die Lösung ist fast kontraintuitiv: weniger Historie laden, nicht mehr. Hier erfahren Sie genau, was passiert und wie Sie Ihre Overlays am Laufen halten.
Schnelle Lösung für den Stapelüberlauf bei ~63.500 Bars
- Laden Sie weniger Kerzen, Punkt. Der Überlauf wird durch zu viele Bars im Speicher ausgelöst, daher ist das Kürzen des geladenen Bereichs unter ~63.500 der ganze Trick.
- Wechseln Sie zu einem höheren Zeitrahmen. Derselbe Kalenderzeitraum benötigt auf einem 5-Minuten- oder 15-Minuten-Chart nur einen Bruchteil der Bars im Vergleich zu einem 1-Minuten-Chart.
- Scrollen Sie nicht so weit zurück. Jedes Zurückscrollen lädt mehr Historie in die Berechnung. Betrachten Sie ein engeres Fenster, und der Indikator zeichnet weiter.
- Drehen Sie Minimum Number of Bars to Load nicht hoch. Diese Einstellung höher zu stellen bringt Sie näher an die Obergrenze, nicht weiter davon weg.
- Teilen Sie lange Backtests in Abschnitte auf. Prüfen Sie einen weiten Zeitraum in kürzeren Datumssegmenten, sodass keine einzelne Ansicht die Grenze überschreitet.
- Verzichten Sie auf Sackgassen-Lösungen. Mehr historische Daten kaufen, den Browser wechseln und Indikatoren entfernen hilft nicht. Nur weniger Kerzen helfen.
Was „Maximum Call Stack Size Exceeded“ hier bedeutet
Die Charts von Tradovate laufen im Browser, in JavaScript. Jeder Indikator, den Sie hinzufügen, ist Code, der die Bars im Chart durchläuft und seine Werte neu berechnet. Ein benutzerdefiniertes Overlay, also etwas, das über dem Preis gezeichnet wird wie gleitende Durchschnitte, Bollinger-Bänder oder VWAP, muss die gesamte geladene Serie verarbeiten, um sich korrekt darzustellen. Diese Verarbeitung stützt sich auf den Call Stack des Browsers, einen Arbeitsspeicherbereich fester Größe, den die Engine nutzt, um verschachtelte Funktionsaufrufe im Blick zu behalten. Jeder Browser begrenzt, wie tief dieser Stack werden kann, und wenn eine Berechnung tiefer läuft als diese Grenze, wirft die Engine einen harten Stopp: RangeError: Maximum call stack size exceeded.
Bei Tradovate liegt der konkrete Fehlerpunkt für benutzerdefinierte Overlays bei etwa 63.500 Kerzen. Überschreiten Sie ihn, stoppt der Indikator die Berechnung, oft mit einem Fehler, der auf die interne Zeitreihenroutine des Charts zurückgeht (Sie sehen in der Konsole etwas wie replaceTail, wenn Sie nachsehen). Bemerkenswert ist, dass ~63.500 direkt neben 65.536 liegt, der klassischen 64K-Grenze. Das ist ein starker Hinweis darauf, dass es sich um eine fest eingebaute Obergrenze in der Chart-Engine handelt und nicht um einen zufälligen Fehler, was genau erklärt, warum das Problem aus keiner Richtung durchbrochen werden kann.
Warum es speziell benutzerdefinierte Overlays trifft
Der Auslöser ist die Gesamtzahl der Kerzen, nicht das, was auf dem Bildschirm sichtbar ist
Das ist der Teil, der Leute verwirrt. Sie sehen vielleicht nur ein paar hundert sichtbare Bars, wenn der Indikator stirbt, sodass es zufällig wirkt. Aber der Chart hält nicht nur das, was im Sichtfenster ist, er hält alles, was Sie geladen haben. Scrollen Sie weit genug zurück, führen Sie einen langen Market-Replay aus, oder öffnen Sie einen weiten Datumsbereich, und Tausende von Bars außerhalb des Bildschirms sitzen im Speicher und speisen die Berechnung des Indikators. Der sichtbare Chart wirkt ruhig; die zugrunde liegende Serie ist es, die die Sache zum Kippen bringt.
Niedrige Zeitrahmen erreichen die Obergrenze schnell
Bars summieren sich auf kleinen Intervallen schnell. Ein Ein-Minuten-Chart mit fortlaufenden Futures-Daten stapelt in nur wenigen Monaten Zehntausende von Kerzen an, sodass ein Backtest, der sich kurz anfühlt, ohne Vorwarnung deutlich über 63.500 hinausschießen kann. Stellen Sie dieselbe Studie auf 5-Minuten- oder 15-Minuten-Bars um, und derselbe historische Zeitraum benötigt nur einen Bruchteil der Kerzen, was Sie deutlich unter der Wand hält.
Ein Overlay ist immer noch eine vollständige Neuberechnung
Ihren Chart auf ein einziges benutzerdefiniertes Overlay zu reduzieren, fühlt sich an, als sollte es helfen, tut es aber nicht. Dieses eine Overlay muss sich immer noch über jede geladene Bar neu berechnen. Die Stacktiefe wird von der Größe der Serie bestimmt, nicht davon, wie viele Indikatoren darauf gestapelt sind. Die Anzahl der Kerzen ist also die entscheidende Zahl, und es ist die einzige Zahl, an der es sich zu arbeiten lohnt.
So beheben Sie den Stapelüberlauf: Schritt für Schritt
Kürzen Sie den geladenen Kerzenbereich
Klicken Sie mit der rechten Maustaste auf den Chart und öffnen Sie seine Einstellungen. Suchen Sie die Ladeeinstellung, die meist so etwas wie Minimum Number of Bars to Load heißt, und halten Sie sie moderat statt auf Maximum. Prüfen Sie die aktuelle Bezeichnung in Ihrer Version, da Tradovate die Formulierungen im Lauf der Zeit anpasst. Der Instinkt, wenn ein Indikator nicht zeichnet, ist, mehr Historie zu laden, damit er “genug” Daten hat. Widerstehen Sie dem hier. Bei diesem Fehler sind mehr Bars das Problem. Sie wollen weniger Kerzen, die den Indikator speisen, damit die Neuberechnung flach genug für den Stack des Browsers bleibt.
Wechseln Sie zu einem höheren Zeitrahmen
Das ist der mit Abstand wirksamste Hebel. Öffnen Sie den Intervall-Auswähler und steigen Sie von 1 Minute auf 5 Minuten, 15 Minuten oder höher um. Da jede Bar jetzt mehr Zeit abdeckt, schrumpft derselbe Datumsbereich auf deutlich weniger Kerzen, und Sie fallen sofort wieder unter die Obergrenze. Wenn Ihre Strategie tatsächlich eine Ein-Minuten-Auflösung benötigt, können Sie diese trotzdem bekommen, Sie betrachten sie einfach in kürzeren Fenstern statt in einem einzigen riesigen durchgehenden Ladevorgang.
Scrollen Sie nicht mehr so weit in die Vergangenheit
Jedes Mal, wenn Sie den Chart nach links ziehen, holt Tradovate mehr Historie und gibt sie an das Overlay weiter. Wenn Sie wochen- oder monatelang durch Daten mit niedrigem Zeitrahmen zurückgescrollt sind, steigt Ihre Kerzenzahl in Echtzeit. Setzen Sie den Chart auf ein aktuelles Fenster zurück und lassen Sie ihn mit einer kleineren Serie neu laden. Der Indikator, der gerade gestorben ist, beginnt wieder zu rechnen, sobald die geladene Anzahl wieder unter die Grenze fällt.
Bauen Sie die Ansicht mit einer Vorlage neu auf, dann fügen Sie das Overlay hinzu
Das nachträgliche Ändern der Bar-Einstellung eines Charts sorgt nicht immer dafür, dass die kleinere Serie sauber wirksam wird. Der zuverlässige Weg ist, einen Chart genau so einzurichten, wie Sie ihn möchten, auf einem höheren Zeitrahmen mit moderater Ladung, ihn als Vorlage zu speichern und diese Vorlage dann auf einen neuen Chart anzuwenden, bevor Sie das benutzerdefinierte Overlay hinzufügen. Das Laden des Overlays auf einen bereits reduzierten Chart vermeidet das erneute Durchlaufen der gesamten überdimensionierten Berechnung und liefert Ihnen ein sauberes Rendering.
Teilen Sie lange Backtests in Segmente auf
Wenn Sie ein ganzes Quartal oder Jahr auf einem kleinen Intervall überprüfen, versuchen Sie nicht, alles in einem einzigen durchgehenden Ladevorgang zu halten. Teilen Sie es in kürzere Datumssegmente auf, jeweils ein paar Wochen auf einem niedrigen Zeitrahmen, oder stellen Sie das Ganze auf ein höheres Intervall um. Sie erhalten dieselbe Analyse, ohne jemals ein einzelnes Overlay dazu zu zwingen, mehr als 60.000 Bars auf einmal zu verarbeiten.
Melden Sie es dem Support, wenn Sie unter der Obergrenze feststecken
Wenn ein Overlay den Call-Stack-Fehler auf einem moderaten, klar unter der Grenze liegenden Chart auslöst, lohnt es sich, das zu melden. Senden Sie dem Tradovate-Support das genaue Instrument, den Zeitrahmen, ungefähr wie viele Bars geladen waren, und den vollständigen Konsolenfehler einschließlich des replaceTail-Traces, falls Sie ihn erfassen können. Konkrete Zahlen helfen ihnen, das Problem zu reproduzieren. Gehen Sie einfach mit dem Wissen hinein, dass die ~63.500er-Wand selbst ein bekanntes Verhalten ist und nichts, was ein Support-Ticket abschaltet.



Was das Problem nicht behebt
Viele plausibel klingende Lösungen bewirken hier gar nichts, und das zu wissen erspart Ihnen einen ganzen Nachmittag:
- Mehr historische Daten kaufen. Das ist der größte Fehler. Zusätzliche Daten treiben Sie noch weiter über die Grenze hinaus, da der Überlauf ja gerade durch das Kerzenvolumen verursacht wird.
- Den Browser wechseln. Die Call-Stack-Grenze ist bei Chrome, Edge, Firefox und Safari ungefähr gleich, sodass ein neuer Browser die Obergrenze kaum verschiebt.
- Alle Indikatoren bis auf einen entfernen. Ein einzelnes Overlay berechnet sich weiterhin über die gesamte Serie neu, daher ist die Anzahl der geladenen Kerzen, nicht die Anzahl der Indikatoren, das, was überläuft.
- Minimum Number of Bars to Load höher drehen. Das treibt die Kerzenzahl in Richtung der Wand. Das ist die falsche Richtung.
Jede dieser Maßnahmen lässt die ~63.500er-Obergrenze genau dort, wo sie ist. Der einzige Hebel, der das Ergebnis verändert, ist das Laden weniger Kerzen.
Troubleshooting-Tabelle
| Symptom | Wahrscheinliche Ursache | Lösung |
|---|---|---|
| Benutzerdefiniertes Overlay hört nach weitem Zurückscrollen auf zu zeichnen | Geladene Kerzenzahl hat ~63.500 überschritten | Auf ein aktuelles Fenster zurücksetzen; zu einem höheren Zeitrahmen wechseln |
| Konsole zeigt “Maximum call stack size exceeded” | Die Neuberechnung des Overlays lief tiefer als der Call Stack des Browsers | Geladenen Bereich reduzieren, bis die Zahl unter die Obergrenze fällt |
| Bänder/Durchschnitte sterben bei einem langen 1-Minuten-Backtest | Niedriger Zeitrahmen hat zu viele Bars angehäuft | Intervall erhöhen oder den Zeitraum in kürzere Segmente aufteilen |
| Mehr Daten kaufen hat es verschlimmert | Zusätzliche Historie hat die Zahl noch weiter über die Grenze getrieben | Historie stattdessen kürzen; weniger Daten, nicht mehr |
| Minimum Bars to Load zu erhöhen hat nicht geholfen | Höhere Ladung hat Sie näher an die Obergrenze gebracht | Ladung reduzieren und eine gekürzte Vorlage anwenden, bevor Sie das Overlay hinzufügen |
| Fehler tritt auf einem kleinen, klar unter der Grenze liegenden Chart auf | Möglicher meldenswerter Defekt | Support Instrument, Zeitrahmen, Kerzenzahl und vollständigen Fehler-Trace senden |
Führen Sie die Strategie außerhalb des Charts mit PickMyTrade aus
Hier kommt der größere Punkt. Wenn ein Browser-Overlay echte Arbeit in Ihrem Prozess leistet, Einstiege während eines Backtests liefert oder ein Live-Signal steuert, sind Sie von einer Chart-Engine abhängig, die eine feste Obergrenze eingebaut hat. Das ist in Ordnung, um sich ein Setup anzusehen. Es ist ein Risiko für die Automatisierung. Der sauberere Ansatz ist, die Logik an einer dafür gebauten Stelle laufen zu lassen und den Chart für das zu nutzen, worin Charts gut sind: den Preis zu betrachten.
- Bauen Sie die Bedingung dort, wo sie skaliert. Eine Chartplattform wie TradingView kann Ihre Overlay-Logik in einem Skript ausdrücken und einen Webhook auslösen, sobald Ihre Bedingungen eintreten, ohne Abhängigkeit von einer geladenen Kerzenzahl in einem Browser-Tab.
- Leiten Sie es direkt an Tradovate weiter. PickMyTrade nimmt diesen Webhook entgegen und platziert die Order automatisch auf Ihrem Tradovate-Konto, sodass das Signal ohne Chart dazwischen zu einer Ausführung wird.
- Spiegeln Sie über Konten hinweg. Derselbe Auslöser kann mehrere Evaluierungs- oder finanzierte Konten gleichzeitig steuern, sodass Sie kein fragiles Overlay auf jedem Bildschirm erneut ausführen müssen.
- Ratenlimit-sicheres Routing. Der Orderfluss wird zeitlich gestaffelt, um innerhalb der Anfragegrenzen von Tradovate zu bleiben, und vermeidet so die Retry-Stürme, die separate Sperrungen verursachen.
Sie behalten Ihre Overlays für die visuelle Analyse, gekürzt unter der Obergrenze, und übergeben die Ausführung an eine Pipeline, die es nicht kümmert, wie viele Kerzen ein Chart gerade lädt.
Führen Sie Ihre Strategie außerhalb der Chart-Engine aus
Bauen Sie Ihre Overlay-Logik in TradingView auf und lassen Sie PickMyTrade das Signal an Tradovate weiterleiten, ohne dass eine Kerzenzahl-Obergrenze im Weg steht.
Starten Sie Ihre kostenlose TestversionHäufig gestellte Fragen
Es handelt sich um einen browserseitigen Fehler. Der Chart läuft in JavaScript, und jedes benutzerdefinierte Overlay berechnet sich selbst über die Bars im Chart neu. Sobald die Anzahl der geladenen Kerzen groß genug wird, läuft diese Berechnung tiefer, als der Call Stack des Browsers zulässt, und wirft einen RangeError: Maximum call stack size exceeded. Bei Tradovate tritt das bei benutzerdefinierten Overlay-Indikatoren bei rund 63.500 Kerzen auf, und das Overlay hört ab diesem Punkt einfach auf zu zeichnen oder zu aktualisieren.
Weil der Auslöser die Gesamtzahl der Kerzen ist, nicht das, was Sie auf dem Bildschirm sehen können. Weit zurückscrollen, einen langen Replay ausführen oder über einen weiten Datumsbereich auf einem niedrigen Zeitrahmen backtesten häuft Bars im Speicher an. Wenn die Neuberechnung des Overlays etwa 63.500 Kerzen überschreitet, läuft der Call Stack über und der Indikator gibt auf. Kürzen Sie den geladenen Bereich wieder unter diese Obergrenze, und er beginnt wieder zu rechnen.
Es ist keine veröffentlichte Spezifikation, sondern der praktische Punkt, an dem benutzerdefinierte Overlays zusammenbrechen. Die Zahl liegt genau um die 64.000-Marke, was ein klassisches Zeichen für eine interne Obergrenze in der Chart-Engine ist und nicht für eine willkürliche Zahl. Behandeln Sie es als feste Arbeitsgrenze: Halten Sie die geladene Kerzenzahl komfortabel darunter, und die Overlays verhalten sich normal.
Tun Sie das Gegenteil von mehr Historie laden. Wechseln Sie zu einem höheren Zeitrahmen, sodass derselbe Datumsbereich deutlich weniger Bars benötigt, scrollen Sie nicht mehr so weit in die Vergangenheit, verengen Sie das Fenster, das Sie betrachten, und halten Sie Minimum Number of Bars to Load moderat statt auf Maximum. Wenn Sie einen langen Zeitraum backtesten, teilen Sie ihn in kürzere Abschnitte, sodass keine einzelne Ansicht die Obergrenze überschreitet.
Nein. Mehr Daten machen es schlimmer, nicht besser. Der Überlauf wird dadurch verursacht, dass zu viele Kerzen gleichzeitig verarbeitet werden, sodass zusätzliche Historie Sie weiter über die Grenze hinaustreibt. Zusätzliche Daten kaufen, den Browser wechseln oder den Chart auf ein einziges Overlay reduzieren lassen die Obergrenze alle genau dort, wo sie ist. Der einzige Hebel, der hilft, ist das Laden weniger Kerzen.
Nicht nennenswert. Die Call-Stack-Obergrenze ist bei den gängigen Browsern in etwa gleich, sodass ein anderer Browser fast nichts bringt. Auch das Entfernen von Indikatoren bis auf ein Overlay hilft nicht, da ein einzelnes benutzerdefiniertes Overlay sich weiterhin über die gesamte Kerzenzahl neu berechnen muss. Das Reduzieren des geladenen Bereichs ist es, was das Problem tatsächlich löst.
Ja, und für die Automatisierung ist das der sauberere Weg. Statt sich auf ein Browser-Overlay zu verlassen, das bei langen Historien in die Knie geht, bauen Sie Ihre Logik in einer Chartplattform wie TradingView auf und lösen einen Webhook aus, sobald Ihre Bedingungen eintreten. Leiten Sie diesen Webhook durch eine Automatisierungsbrücke, sodass sie den Trade auf Ihrem Tradovate-Konto platziert. Die Strategie läuft außerhalb des Charts, sodass ein Call-Stack-Limit auf einem geladenen Chart nie zwischen Ihrem Signal und Ihrer Ausführung steht.
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 Drittanbieter-Automatisierungsplattform und steht in keiner Verbindung zu Tradovate, Inc. oder Bookmap und wird von diesen weder unterstützt noch 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 immer den aktuellen Ablauf in der offiziellen Plattformdokumentation, bevor Sie handeln.