ProRealCode - Trading & Coding with ProRealTime™
Ich habe einen benutzerdefinierten ProScreener (ProBuilder), der ca. 33 Instrumente in Echtzeit auswertet, implementiert in zwei unabhängigen Skripten, die dieselbe Logik zur Berechnung der Zeitfenster-Spanne (Range) verwenden. Am 02.10.2026 änderte sich für den DAX eine interne Variable meines Codes (die den höchsten innerhalb eines festen Zeitfensters erreichten Kurs speichert, 00:00–08:59 MESZ plus eine einzige erlaubte Verlängerung bis 09:05) auf der Kerze von 09:00:00–09:05:00 MESZ. Mein Kerzenchart (5-Minuten-Timeframe) zeigt für genau diese Kerze ein Hoch von 25.012,1 — niedriger als der Wert, den mein Code bereits vor 09:00 Uhr akkumuliert hatte (25.063,9). Meine Logik (IF high > CajaMax THEN CajaMax = high) hätte diesen Wert also gar nicht ändern dürfen. Trotzdem erfasste mein Skript als Endwert 25.111 — eine Differenz von 99 Punkten gegenüber dem im Chart angezeigten Hoch dieser Kerze. Fast zwei Stunden später (10:53 MESZ) hatte sich dieselbe interne Variable erneut geändert, diesmal auf 25.143,9 — ein dritter, abweichender Wert, weit außerhalb jedes Zeitfensters, das meine Logik zur Berechnung dieser Spanne verwendet. Ich konnte dies zum selben Zeitpunkt identisch in meinen zwei unabhängigen Skripten bestätigen, was einen eigenen Programmierfehler ausschließt und auf ein Problem an der Datenquelle hindeutet. Soweit ich weiß, führt ProScreener den gesamten Code nach Abschluss jedes Scan-Zyklus über das gesamte Instrumenten-Universum erneut von der ersten Kerze an aus. Könnte eine verspätete Korrektur/Konsolidierung einer bereits “geschlossenen” Kerze durch den Datenfeed erklären, dass sich meine akkumulierte Variable bei späteren Neuberechnungen ändert, Stunden nach dieser Kerze? Ich habe dasselbe Muster (eine Bereichsgrenze mit einem Wert, der nicht dem Chart entspricht) bei anderen Instrumenten (CL, GBPUSD) in früheren Sitzungen reproduziert. Plattformversion: [bitte ergänzen] Kontotyp / Datenfeed: [bitte ergänzen] Instrument / genaues Ticker-Symbol: DAX, [genauen Code ergänzen] Chart-Timeframe: 5 Minuten ProScreener-Timeframe: [bitte ergänzen] Eingestellte Zeitzone: MESZ (UTC+2) Datum der Reproduktion: 02.10.2026 Beobachtete Werte (DAX): – Reales Box-Hoch (Chart, Box-Indikator): 25.063,9 – Hoch der Kerze 09:00–09:05 (Chart): 25.012,1 – Intern erfasster Wert (~09:00–09:55): 25.111 – Später intern erfasster Wert (10:53 MESZ, gleicher Tag): 25.143,9 Ich kann bei Bedarf den relevanten Code-Ausschnitt (nur Box-Konstruktion, ohne die proprietäre Trading-/Scoring-Logik) sowie Screenshots von Chart und Screener-Ausgabe für diesen Fall nachreichen.
Anbei der relevante Codeausschnitt (nur Berechnung der Sitzungsspanne/Box, ohne die eigentliche Handelslogik), der das in der Anfrage beschriebene Verhalten reproduziert. CajaMax/CajaMin entsprechen den im Text genannten internen Werten; UltimaExtCaja ist eine zusätzlich eingebaute Diagnosevariable, die die Uhrzeit der letzten Änderung von CajaMax/CajaMin speichert.
// ============================================================
// Codeausschnitt zur Fehlermeldung an ProRealTime-Support
// DAX, Sitzung 02.10.2026 — Berechnung der Sitzungsspanne (Box)
// ------------------------------------------------------------
// Auszug OHNE die eigentliche Handels-/Scoring-Logik (Entry, SL,
// TP1/TP2, Filter, Score-Gewichtung usw.) — nur der Teil, der die
// Variablen CajaMax/CajaMin (Session-Hoch/-Tief) berechnet und der
// im gemeldeten Fall das beschriebene Verhalten zeigt. Identisch in
// den zwei unabhaengigen Skripten, die denselben Fehler zeigen.
// ============================================================
// --- Sommerzeit-Berechnung (Europe/Berlin, automatisch) ---
aDay = date MOD 100
aMonth = (date MOD 10000 - date MOD 100) / 100
aDayOfWeek = DayOfWeek
IF aDayOfWeek = 7 THEN
aDayOfWeek0Dom = 0
ELSE
aDayOfWeek0Dom = aDayOfWeek
ENDIF
aLastSunDay = aDay - aDayOfWeek0Dom
IF aMonth >= 4 AND aMonth <= 9 THEN
aAutoDST = 1
ELSIF aMonth = 3 THEN
IF aLastSunDay >= 25 THEN
aAutoDST = 1
ELSE
aAutoDST = 0
ENDIF
ELSIF aMonth = 10 THEN
IF aLastSunDay >= 25 THEN
aAutoDST = 0
ELSE
aAutoDST = 1
ENDIF
ELSE
aAutoDST = 0
ENDIF
IF aAutoDST = 1 THEN
berlinOffset = 2
ELSE
berlinOffset = 1
ENDIF
utcStartHour = 0
utcEndHour = 7
HoraInicioBox = (utcStartHour + berlinOffset) * 10000
HoraFinBox = (utcEndHour + berlinOffset) * 10000 - 100
// --- Erkennung Sitzungswechsel (taeglicher Reset um 00:00 CET/CEST) ---
NewSessionCET = (time < time[1]) OR (DayOfWeek <> DayOfWeek[1] AND DayOfWeek[1] = 5)
// --- Initialisierung / Carry-forward, jede Kerze ---
CajaMax = CajaMax[1]
CajaMin = CajaMin[1]
inBox = inBox[1]
// Diagnosevariable (read-only, nur zur Fehlersuche hinzugefuegt):
// speichert die Uhrzeit (HHMMSS) der letzten Aenderung von CajaMax/CajaMin.
UltimaExtCaja = UltimaExtCaja[1]
// --- Taeglicher Reset ---
IF NewSessionCET THEN
CajaMax = 0
CajaMin = 0
UltimaExtCaja = 0
ENDIF
// --- Aufbau der Sitzungsspanne (00:00-08:59 CEST im gemeldeten Fall) ---
IF time > HoraInicioBox AND time <= HoraFinBox THEN
IF NewSessionCET OR inBox = 0 THEN
CajaMax = high
CajaMin = low
inBox = 1
UltimaExtCaja = time
ELSE
IF high > CajaMax THEN
CajaMax = high
UltimaExtCaja = time
ENDIF
IF low < CajaMin THEN
CajaMin = low
UltimaExtCaja = time
ENDIF
ENDIF
ELSE
inBox = 0
ENDIF
// --- Einzige erlaubte Verlaengerung: die eine Kerze, die HoraFinBox kreuzt ---
IF time > HoraFinBox AND time[1] <= HoraFinBox THEN
IF CajaMax > 0 AND CajaMin > 0 THEN
IF high > CajaMax THEN
CajaMax = high
UltimaExtCaja = time
ENDIF
IF low < CajaMin THEN
CajaMin = low
UltimaExtCaja = time
ENDIF
ENDIF
ENDIF
// ------------------------------------------------------------
// Am Ende des Skripts (ProScreener-Ausgabe) werden u.a. folgende
// Werte angezeigt, auf die sich die Fehlermeldung bezieht:
// CajaMax, CajaMin -> interner Session-Hoch/-Tief-Wert
// UltimaExtCaja -> Uhrzeit der letzten Aenderung (Diagnose)
//
// Beobachtete Werte fuer DAX, 02.10.2026:
// Reales Box-Hoch (Chart): 25.063,9
// Hoch der Kerze 09:00-09:05 (Chart): 25.012,1
// CajaMax, erstmals beobachtet (~09:xx): 25.111
// CajaMax, spaeter beobachtet (10:53 CEST):25.143,9
// UltimaExtCaja zeigte in beiden Faellen: 09:00:00
// -----------------------------------------------------------
In der ProRealTime-Sprache sind diese Anweisungen:
CajaMax = CajaMax[1]
CajaMin = CajaMin[1]
inBox = inBox[1]
UltimaExtCaja = UltimaExtCaja[1]
überflüssig, da ALLE Variablen mit demselben Wert, den sie in der vorherigen Kerze hatten, in die neue Kerze übernommen werden.
Die Verwendung von [1] für den Zugriff auf den Wert der vorherigen Kerze ist also nur dann sinnvoll, wenn dieser Wert in der Zwischenzeit geändert wurde.
Das dient allerdings nur der Dokumentation; es ist mit Sicherheit nicht die Ursache für dein Problem.
Warum fragst du nicht die KI?
Ich weiß nicht, ob dir diese hier weiterhelfen kann:
ansonsten kannst du es mit ChatGPT, Gemini, Copilot usw. versuchen.
Danke für den Hinweis zu den [1]-Zeilen — verstanden, das ist nur Dokumentation und sicher nicht die Ursache.
Bevor ich die eigentliche Frage wiederhole, die naheliegenden Alternativerklärungen habe ich bereits geprüft und ausgeschlossen:
time/DayOfWeek der jeweiligen Kerze, nicht auf deren Position innerhalb der ProScreener-Rekonstruktion.Ich habe die Frage zusätzlich mit Perplexity, ChatGPT und der ProRealCode-KI (ai.prorealcode.com) geprüft, wie vorgeschlagen. Keine davon konnte eine offizielle Dokumentation oder einen Forenbeitrag mit Moderator-Bestätigung finden, die bestätigt, dass der High/Low-Wert einer bereits abgeschlossenen Kerze sich zwischen zwei ProScreener-Zyklen ändern kann — alle drei stufen das explizit als “nicht bestätigt” ein, nicht als widerlegt.
Die eigentliche Frage bleibt also: Kann der High/Low-Wert einer bereits abgeschlossenen Kerze zwischen zwei vollständigen ProScreener-Zyklen (für dasselbe Instrument, Konto, Feed und Timeframe) unterschiedlich ausfallen? In meinem Fall änderte sich mein akkumulierter Session-Höchstwert für den DAX zwischen 09:00 und 10:53 Uhr gleich zweimal (25.111 → 25.143,9), obwohl die betroffene Kerze laut Chart (Hoch 25.012,1) diese Änderung logisch nicht hätte auslösen dürfen — und das bei einer Kerze, die zu diesem Zeitpunkt längst abgeschlossen war.
Gibt es einen dokumentierten Mechanismus (späte Datenkorrektur/-konsolidierung des Feeds für eine bereits geschlossene Kerze, oder etwas anderes), der das erklären könnte?
Jeder Wert kann sich innerhalb derselben Kerze ändern, wenn der Screener während ihrer Laufzeit (z. B. 1 Sekunde, 1 Minute usw.) mehrfach ausgeführt wird (stets im Live-Modus); tatsächlich sollten Screener sehr häufig – idealerweise bei jedem Tick – ausgeführt werden, sofern die Servergeschwindigkeit dies zulässt.
Wenn du hingegen einen festen Wert benötigst, musst du dich auf die zuletzt abgeschlossene Kerze beziehen – nicht auf die aktuelle – und für den gewünschten Datenpunkt den Index [1] verwenden.
Hallo,
wenn ich den DAX-Chart zum Vergleich heranziehe, sehe ich einige Unterschiede zu der Beschreibung, die du gibst…
Am Freitag, den 2. Oktober, DAX M5 (UTC+2), liegt das High der Kerze von 09:00–09:05 bei 25.012,1. Das höchste High bis zu diesem Zeitpunkt liegt bei 25.063,9. Das stimmt vollständig mit deiner Beschreibung überein…
Danach schreibst du, dass die interne Variable fast zwei Stunden später, um 10:53 CEST, den Wert 25.143,9 anzeigt…
Genau hier gibt es jedoch eine Abweichung zu meinem Chart: In meinem Chart erscheint der Wert 25.143,9 bereits bei der Kerze von 09:50–09:55 CEST. Die Zeitangaben laufen also auseinander. Was du als „fast zwei Stunden später“ beschreibst, erscheint in meinem Chart bereits innerhalb derselben Stunde.
Mein Verdacht ist deshalb, dass irgendwo etwas mit dem „BerlinOffset“ nicht stimmt. Damit verbunden ist für mich auch das ziemlich frustrierende Problem, herauszufinden, in welcher Zeitzone „time“ innerhalb des ProScreener tatsächlich verwendet wird. Ich habe das bisher nie zuverlässig nachvollziehen können…
Könnte es sein, dass hier eine unterschiedliche Zeitzone bzw. eine falsche Berechnung des BerlinOffset dazu führt, dass die Zeitstempel im ProScreener und im Chart nicht übereinstimmen?
09:00-09:05 (UTC+2)
Hallo robertogozzi,
danke nochmal für deine Erklärung zur Live-Neubewertung von Kerzen im ProScreener. Wir haben den vorgeschlagenen Fix umgesetzt — die Box-Berechnung liest seitdem High[1]/Low[1]/Time[1] (letzte abgeschlossene Kerze) statt high/low/time (laufende Kerze).
Leider hat das Problem nicht gelöst, nur verschoben. Wir haben beide Varianten parallel über mehrere Handelstage mit echten Instrumenten verglichen (ProScreener-interne CajaMax/CajaMin gegen die reale Box, die ein separater, auf demselben Chart laufender Indikator anhand derselben Kerzen zeichnet):
High[1]/Low[1] (abgeschlossene Kerze): Abweichungen von 29 bis 69 Punkten je nach Instrument und Tag, mal auf der CajaMax-, mal auf der CajaMin-Seite.high/low (laufende Kerze, Originalzustand): Abweichungen von 3 bis 44 Punkten, ebenfalls unregelmäßig verteilt.Das deutlichste Beispiel von heute (EURUSD, 5-Minuten-Zeitrahmen, mit der High[1]/Low[1]-Variante aktiv): Die reale Box lag bei HIGH=1,12543 / LOW=1,12221. Der ProScreener berechnete intern CajaMin=1,11823 — 39,8 Pips zu niedrig. Der reale Ausbruch (Short) wurde vom separaten Chart-Indikator sauber erkannt und lag zum Zeitpunkt der Prüfung bereits bei +0,7R Gewinn. Der ProScreener zeigte dagegen State=0 — keine Ruptur erkannt —, weil der Kurs seine eigene (zu niedrige) CajaMin-Schwelle schlicht noch nicht unterschritten hatte.
Auffällig: Dasselbe Instrument (EURUSD) war an einem anderen Handelstag, mit derselben Codeversion, exakt korrekt (CajaMin traf den realen Wert auf den Pip genau). Das Problem ist also weder instrumentspezifisch noch abhängig davon, welche Kerze gelesen wird — es tritt unregelmäßig auf, mal stärker, mal gar nicht.
Daraus unsere Vermutung, die wir aber nicht verifizieren können: Könnte es sein, dass der Feed Kursdaten für eine Kerze, die der ProScreener bereits als “abgeschlossen” behandelt (egal ob laufende oder vorherige Kerze), nachträglich korrigiert — nachdem CajaMax/CajaMin aus dieser Kerze bereits fixiert wurden? Das würde erklären, warum weder high/low noch High[1]/Low[1] zuverlässig sind, da beide auf Daten basieren, die der Feed später noch revidieren kann.
Gibt es in ProBuilder/ProRealTime eine Möglichkeit, so eine nachträgliche Korrektur zu erkennen — zum Beispiel eine Funktion, die bestätigt, dass für eine bestimmte historische Kerze keine weiteren Revisionen mehr folgen? Oder kennst du einen anderen Mechanismus, der erklären könnte, warum ein in ProBuilder berechneter Kerzen-Höchst-/Tiefstwert dauerhaft und deutlich vom realen Chart abweicht, obwohl die Formel nachweislich korrekt ist und bereits abgeschlossene Kerzen verwendet?
Danke dir schon mal für jeden Hinweis.
Ich kann das nicht einsehen; ich glaube, nur IG oder ProRealTime können verlässliche Analysen der Kerzen durchführen und überprüfen, ob diese nach der Schließung verändert wurden.
Ich empfehle dir, in der Plattform die Tastenkombination Strg+M (Ctrl+M) zu drücken, um eine Support-Anfrage zu stellen.
Hallo Lili,
ich habe mir den Thread und deinen Code angesehen. Ich kann das Problem nicht abschließend bestätigen, sehe aber zwei Punkte, die ich vor einem Support-Ticket prüfen würde. Dass der Feed Kerzen nachträglich korrigiert, sehe ich im Thread nicht belegt.
1. TIME ist die Schlusszeit der Kerze
In ProBuilder liefert TIME die Schlusszeit der Kerze, nicht die Öffnungszeit (OPENTIME). Eine M5-Kerze mit der Beschriftung 08:55 hat also time = 090000. Deine “einzige erlaubte Verlängerung” bei time = 09:00:00 ist daher die Kerze 08:55-09:00 und nicht die Kerze 09:00-09:05, mit der du sie vergleichst.
2. Mögliche Zeitverschiebung zwischen Screener und Chart
JS hat in seinem Chart gesehen, dass 25.143,9 schon in der Kerze 09:50-09:55 CEST auftaucht, nicht erst um 10:53. Dazu passt, dass deine Diagnosevariable UltimaExtCaja bei beiden Werten auf 09:00:00 steht, obwohl sich CajaMax geändert hat. Eine wirklich abgeschlossene Kerze kann ihr Hoch nicht ändern. Wenn aber die time-Werte im Screener gegenüber dem Chart um eine Stunde versetzt sind (z. B. CET statt CEST), baut sich deine Box in Wirklichkeit bis ca. 10:00 CEST auf. Sie würde dann die Stunde 09:00-10:00 CEST mit der Londoner Eröffnung aufnehmen.
Das würde einiges erklären: Die Abweichung tritt nur an Tagen auf, an denen diese zusätzliche Stunde neue Extremwerte bringt, also unregelmäßig. Ein echter Ausbruch kann so in der Box “verschwinden”, wie bei deinem EURUSD-Beispiel. Und der Wechsel auf High[1]/Low[1] ändert nichts, weil das Zeitfenster falsch liegt und nicht die gelesene Kerze. Ob das bei dir zutrifft, kann ich ohne deine Daten nicht sagen.
3. Datenquelle: Chart und Screener sind nicht unbedingt identisch
Der ProScreener arbeitet mit den offiziellen Marktdaten des Instruments, nicht mit individuell angepassten Chart-Daten. Falls dein Chart bzw. dein Box-Indikator mit einer eigenen Konfiguration läuft (andere Zeitzone, angepasste Handelszeiten/Session, andere Datenquelle oder Einstellungen), sind Abweichungen zwischen Chart-Indikator und Screener möglich, auch bei identischer Formel. Bitte prüfe, ob der Chart, mit dem du vergleichst, dieselben Daten und dieselbe Zeitzone verwendet wie der Screener.
Test
Lass dir im Screener und im Chart für dieselbe Kerze time, OpenTime und Timestamp MOD 86400 ausgeben und vergleiche die Werte. Wenn sie um eine Stunde abweichen, ist die Ursache gefunden.
Möglicher Ansatz ohne Sommerzeit-Berechnung
Timestamp ist ein Unix-Zeitstempel der Kerzenschlusszeit und damit unabhängig von Zeitzone und Sommerzeit. Damit lässt sich die Box direkt in UTC definieren (ungetestet, bitte selbst prüfen):
utcSek = Timestamp MOD 86400
// Box 00:00-07:00 UTC, bezogen auf die Schlusszeit der Kerze
IF utcSek > 0 AND utcSek <= 25200 THEN
// Box aufbauen
ENDIF
Dann entfallen berlinOffset und die gesamte DST-Logik.
Falls der Test eine Verschiebung zeigt, hat sich das Support-Ticket bei ProRealTime erledigt. Ansonsten ist ihre Antwort zur Datenkorrektur durch den Feed die richtige Auskunft.
Describe what this topic is trying to build, in plain English, and ProRealAI writes the ProRealTime™ indicator, screener or system for you.
Interne Variable weich vom Chart-OHLC derselben geschlossenen Kerze ab
This topic contains 9 replies,
has 5 voices, and was last updated by
Nicolas
5 days, 9 hours ago.
| Forum: | ProBuilder: Indikatoren & Custom Tools |
| Language: | German |
| Started: | 10/02/2026 |
| Status: | Active |
| Attachments: | 5 files |
The information collected on this form is stored in a computer file by ProRealCode to create and access your ProRealCode profile. This data is kept in a secure database for the duration of the member's membership. They will be kept as long as you use our services and will be automatically deleted after 3 years of inactivity. Your personal data is used to create your private profile on ProRealCode. This data is maintained by SAS ProRealCode, 407 rue Freycinet, 59151 Arleux, France. If you subscribe to our newsletters, your email address is provided to our service provider "MailChimp" located in the United States, with whom we have signed a confidentiality agreement. This company is also compliant with the EU/Swiss Privacy Shield, and the GDPR. For any request for correction or deletion concerning your data, you can directly contact the ProRealCode team by email at privacy@prorealcode.com If you would like to lodge a complaint regarding the use of your personal data, you can contact your data protection supervisory authority.