Nun, der Fehler 4066 ist ein typisches Problem für MTF-Benutzer, das Terminal hat die Daten anderer TFs nicht gepumpt und muss die Integrität der Daten anderer TFs überprüfen.
Schauen Sie sich den Code und das, was ich geschrieben habe, genauer an, bevor Sie Ratschläge geben.
Der Code enthält eine Prüfung auf Fehler und eine Prüfung auf leere Daten. Und wenn eine Funktion falsche Daten zurückgibt, ohne dass ein Fehler auftritt, dann ist das ein Fehler!
Schauen Sie sich den Code und das, was ich geschrieben habe, genauer an, bevor Sie Ratschläge geben.
Der Code enthält eine Prüfung auf Fehler und eine Prüfung auf leere Daten. Und wenn eine Funktion falsche Daten zurückgibt, ohne dass ein Fehler vorliegt, ist das ein Fehler!
Vielleicht habe ich etwas übersehen, und zeigen Sie mir, wo Sie die Integrität des Verlaufs prüfen, zum Beispiel in der ProzedurCheckCurrentHourOpenTime()
Was verstehen Sie unter Integrität der Geschichte?
Ich spreche von der Tatsache, dass beim Abrufen von Verlaufswerten eine Fehlerprüfung durchgeführt wird. In jeder Funktion gibt es eine Kontrolle. Hier ist sie:
//--- Проверяем, получено ли время открытия часового бара if(tempHourOpenTime==0 || err!=0) // Если время бара не получено return(false); // Возвращаем ложь
D.h. wenn der Wert Null oder ein Fehler empfangen wird, wird die Zeit nicht in die globale Variable geschrieben. Glauben Sie, dass das nicht ausreicht?
Der Punkt ist, dass die Funktion SeriesInfoInteger() zunächst einen Fehler zurückgibt, aber beim nächsten Durchlauf NO! Und es gibt auch nicht den richtigen Wert zurück!SeriesInfoInteger() gibt nur Informationen für eine bestimmte Abfrage zurück. In diesem Fall wollen wir die letzte bekannte Bar-Eröffnungszeit in der Historie nach Symbol und Periode zurückgeben. Hier liegt kein Fehler vor, sondern es wird das zurückgegeben, was im Moment das Neueste ist. Ich werde Ihnen zeigen, wie Sie die Integrität des Verlaufs überprüfen können.
SeriesInfoInteger() gibt nur Informationen für eine bestimmte Abfrage zurück. In diesem Fall wollen wir die letzte bekannte Bar-Eröffnungszeit in der Historie nach Symbol und Periode zurückgeben. Hier liegt kein Fehler vor, sondern es wird das zurückgegeben, was im Moment das Neueste ist. Ich werde zum PC gehen und Ihnen zeigen, wie Sie die Integrität des Verlaufs überprüfen können.
Sie meinen, hier liegt kein Fehler vor? Warum gibt es dann "gefälschte" Fehlercodes aus? Es heißt, die Geschichte sei in Ordnung, wo sie es nicht ist...
Was soll das heißen, hier liegt kein Fehler vor? Warum gibt er dann "falsche" Fehlercodes aus? Es heißt, die Geschichte sei in Ordnung, wo sie es nicht ist...
Noch einmal: Diese Funktion prüft nicht die Integrität der Historie! Er gibt die Informationen zurück, die er darin finden konnte. In diesem speziellen Fall wurde der Stundenbalken gefunden, der beim Abschalten des Terminals angefordert wurde. Der Rest der Geschichte ist noch nicht geladen worden.
Um zu prüfen, ob die Historie einer bestimmten TF vollständig durchgeblättert ist, verwenden Sie einfach eine Funktion:
bool IsTFDataReady(ENUM_TIMEFRAMES eTF) { ResetLastError(); iTime(NULL, eTF, 1); return GetLastError() == ERR_NO_ERROR; }
Gibt die Funktion false zurück, sind die Daten für die angeforderte TF unvollständig. Ansonsten ist sie vollständig.
Noch einmal: Diese Funktion prüft nicht die Integrität der Geschichte! Er gibt die Informationen zurück, die er darin finden konnte. In diesem Fall wurde der Stundenbalken gefunden, der beim Herunterfahren des Terminals angefordert wurde. Der Rest der Geschichte ist noch nicht geladen worden.
Noch einmal. Es wird nirgendwo erwähnt. Das ist das Wichtigste. Zweitens, warum ist es dann irreführend, wenn zuerst der Fehlercode 4066 angezeigt wird und dann nicht mehr?
Um zu prüfen, ob der Verlauf einer bestimmten TF vollständig durchgeblättert ist, verwenden Sie einfach eine Funktion:
Gibt die Funktion false zurück, sind die Daten für die angeforderte TF unvollständig. Ansonsten ist sie vollständig.
Haben Sie es in der Zeitschaltuhr überprüft? Sehen Sie, dass ich Zeilen auskommentiert habe? Ich habe diese Funktion überprüft, sie zeigte keinerlei Fehler an und zeigte auch falsche Daten an. Ich werde es noch einmal überprüfen.

- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Ziel: Beim Starten des Indikators die aktuellen Daten im Timer abrufen: die Öffnungszeit des Wochen-, Tages- und Stundenbalkens. Dann schreiben Sie sie zur weiteren Verwendung in globale Variablen. Der aktuelle Zeitrahmen ist М1.
Umsetzung: Wir erhalten die Taktzeiten mit der Funktion SeriesInfoInteger().
Ergebnis: Wenn das Terminal mehrere Stunden gelaufen ist, z. B. weil es über Nacht ausgeschaltet war, erhalten wir ein solches Ergebnis bei seinem ersten Start (an einem Tag):
Wie Sie sehen können, ist der Zeitpunkt des Datenabrufs 2018.09.21 11:11, und für diese Zeit erhalten wir die Öffnungszeit des Tages = 2018.09.20 (obwohl es 2018.09.21 sein sollte) und die Öffnungszeit der Stunde = 2018.09.20 16:00 (obwohl es 2018.09.21 11:00 sein sollte). Und die vom Terminal zurückgegebene Zeit ist nichts anderes als die Daten zum Zeitpunkt des letzten Schließens. D.h. die Daten werden zwischengespeichert und unabhängig davon zurückgegeben, dass das Terminal heruntergefahren wurde. Und ich verstehe, wenn Fehler # 4066 würde jedes Mal zurückgegeben werden (angeforderte historische Daten in Update-Status), bis die Daten aktualisiert wird, aber nein, es ist ERROR Daten, die zurückgegeben wird! Dieser Fehler tritt nur einmal auf, und dann kann man damit leben. Es liegt ein eindeutiger Caching-Fehler vor. Ich bitte die Entwickler(@Slava), dies zu beachten!
Ich wiederhole. Fehlerhafte Daten werden angezeigt, wenn sie im Timer angefordert werden!
Terminal-Version: x64, 1090.