[SERVICE DESK] Fehler beim Abrufen der Zeit der älteren TF im Timer! - Seite 14

 
Ich habe es aber schon ein paar Mal ausprobiert. Komisch, aber es funktioniert nicht immer. Manchmal kommt die Verbindung nicht rechtzeitig zustande.
Ich habe selbst eine gute Verbindung. Vielleicht ist das der Grund dafür.
 
Aber das ist nicht das, was ich bei diesem Test festgestellt habe. Selbst wenn ich jetzt mit Durchlaufzählung arbeite, erhalte ich 10 Durchläufe durch OnCalculate, auch heute noch. Es stellt sich heraus, dass die beste Option für Sie zu sein scheint, um eine kleine Verzögerung zu machen, wenn der Indikator startet.
 
Konstantin Nikitin:
Aber bei diesem Test ist mir etwas anderes aufgefallen. Selbst wenn ich jetzt mit Durchlaufzählung arbeite, erhalte ich 10 Durchläufe durch OnCalculate. Es stellt sich heraus, dass die beste Option für Sie ist, eine kleine Verzögerung beim Start des Indikators zu machen.

Ich wiederhole, es besteht kein Bedarf an einer Krückenlösung. Das derzeitige Verhalten passt mir nicht, die von den Entwicklern selbst gegebenen Ratschläge funktionieren nicht. Es bringt nichts, solche Dinge auf sich beruhen zu lassen. Es wurde ein Problem entdeckt, das von den Entwicklern gelöst werden muss.

 
Alexey Kozitsyn:

Ich wiederhole, es besteht kein Bedarf an einer Krückenlösung. Das derzeitige Verhalten passt mir nicht, die von den Entwicklern selbst gegebenen Ratschläge funktionieren nicht. Es bringt nichts, solche Dinge auf sich beruhen zu lassen. Wenn ein Problem entdeckt wird, muss es von den Entwicklern gelöst werden.

Ich habe beschrieben, was ich gesehen habe. Sie müssen sich überlegen, wie Sie das Problem lösen können. Ich meine, es ist überhaupt nicht gut, wenn man im ersten Durchgang verfolgt wird usw...

 
Konstantin Nikitin:

Ich habe beschrieben, was ich gesehen habe. Ich muss mir überlegen, wie ich damit umgehe. Das heißt, es ist nicht gut in irgendeiner Weise bekommen ersten Durchgang Tracking, etc.

Ich denke, dass es einen Mechanismus geben muss, der an solchen "dünnen" Stellen getestet wird und der korrekt mit Fehlernummern arbeitet (indem er bei jeder Anfrage anklopft), oder eine Art zusätzliche Prüfung in den Funktionen für den Zugriff auf die Historie (nämlich eingebaut, um nicht stundenlang nach solchen Problemen zu suchen). Und dieser Mechanismus sollte in der Dokumentation ausführlich beschrieben werden. Dann gibt es für die Entwickler keine Fragen mehr. Aber wie ist es jetzt? In der Dokumentation steht nichts über den Zugriff auf Daten aus älteren TFs, so dass die Entwickler selbst nicht wissen, wie sie die Daten erhalten können. Es gibt nur einige Links zu Foren der bärtigen Jahre, wo sie die gleiche Argumentation haben.

 
Wenn Sie den Unterschied mit dem Server in Stunden kennen. Sie können einen Vergleich zwischen der aktuellen Ortszeit und der Öffnungszeit des letzten Stundenbalkens verwenden. TimeCurrent ist nicht geeignet, da die Zeit möglicherweise nicht aktualisiert wird.
Etwa so
     MqlDateTime mqlDateTime;
     TimeToStruct( (TimeLocal()-60*3), mqlDateTime );
     mqlDateTime.min = 0;
     mqlDateTime.sec = 0;
     
     if( IsConnected() )
          Comment( TimeToString( iTime(Symbol(), PERIOD_H1, 0) ), "\n", TimeToString( StructToTime(mqlDateTime) ) );
 
Alexey Kozitsyn:

Übrigens haben Sie Ihre Frage nach der Terminalversion nicht beantwortet.

Terminal 1121 und 1090

Alexey Kozitsyn:

Die Kommunikation mit dem Server ist hergestellt. Bei der Anforderung von Senior-TF-Daten, wenn die Daten nicht bereit sind - Fehler oder Rückgabe 0. Wenn die Daten bereit sind - NUR aktuelle Daten zurückgeben. Das war's. Wenn die Daten lange Zeit nicht bereit sind, soll ein Fehler oder 0 zurückgegeben werden.

Hier liegt kein Fehler vor. Es gibt eine Verbindung und Verlaufsdaten.
Die Daten, die sich bereits im Terminal befinden, werden sofort angezeigt.
Neue Daten kommen mit einer Verzögerung, weil es notwendig ist, eine Anfrage an den Broker zu senden und sie hochzuladen, wenn etwas fehlt.

Sobald neue Daten erscheinen, wird sofort ein Tick erzeugt (auch jetzt, wenn der Markt geschlossen ist).
Sie brauchen nur zu prüfen, ob ein neuer Balken auftaucht, und Ihre Variablen selbst zu ändern.

ps. es gibt kein Flag für Datenrelevanz in mt4.

 
Taras Slobodyanik:

Terminal 1121 und 1090

Hier liegt kein Fehler vor. Es besteht eine Verbindung und es sind Verlaufsdaten vorhanden.
Die Daten, die sich bereits im Terminal befinden, werden sofort angezeigt.
Neue Daten kommen mit einer Verzögerung an, da eine Anfrage an den Broker gesendet und hochgeladen werden muss, wenn etwas fehlt.

Sobald neue Daten erscheinen, wird sofort ein Tick erzeugt (auch jetzt, wenn der Markt geschlossen ist).
Sie brauchen nur zu prüfen, ob ein neuer Balken auftaucht, und Ihre Variablen selbst zu ändern.

ps. es gibt kein Datenaktualisierungsflag in mt4.

Wie gesagt, ich muss es noch einmal mit dem aktualisierten Terminal versuchen.

Ich stimme kategorisch nicht mit dem Verhalten überein, das nicht kontrolliert werden kann. Die Funktion gibt ohne Fehler falsche Daten zurück - das ist falsch. Sie werden später selbst in eine solche Situation geraten und sich fragen, wo das Problem liegt.

Angenommen, die Funktion gab zunächst einen Fehler zurück. Sie werden freigelassen. Bei der nächsten Abfrage gab die Funktion den Fehler nicht zurück und lieferte einige "falsche" Daten. Ist das in Ordnung?

 

Was meinen Sie mit falschen Daten?

Wenn sie nicht da sind oder keine Verbindung besteht oder was auch immer, dann liegt ein Fehler vor.
Und es gibt nichts zu zählen.

Wenn alle Daten korrekt sind, ist alles in Ordnung und alles läuft.

Ihr Indikator verfolgt die Datenaktualisierung nicht.
Neue Barren kommen vom Makler und werden nicht überprüft.
Ich habe ein paar Zeilen hinzugefügt, um zu zeigen, dass alles korrekt ist, wenn Sie es überprüfen.

Es ist eine Arbeitssituation, um einen neuen Balken zu prüfen.

 
Taras Slobodyanik:

Was meinen Sie mit falschen Daten?

Und schauen Sie sich meinen allerersten Beitrag an. Sehen Sie dort den Fehler 4066? Dann tritt der Fehler 0 auf und es werden falsche Daten zurückgegeben. Warum prüft die Funktion ( in diesem Fall SeriesInfoInteger()) vor dem Senden der Daten nicht auf Relevanz? Warum wird das Fehlerflag nicht gesetzt? Ich warte lieber ein bisschen länger, bis die internen Prüfungen bestanden sind, als später nach Fehlern zu suchen.

Aber danach habe ich eine Menge Ratschläge bekommen, mit denen ich immer noch kein Ergebnis erzielt habe. Und es stellte sich heraus, dass es nicht einmal um den Timer ging.