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

 
Vitaly Gorbunov:
Nun, ich würde nicht sagen, dass es eine Krücke ist. Ich erwarte einen Strom von Zitaten vom Server, sonst wird der Verlauf nicht aktualisiert. Eine andere Möglichkeit besteht darin, die lokale Zeit des Computers zu nehmen und sie um die Zeitzone zu korrigieren, was automatisch berechnet werden kann, und am Ende ohnehin auf die Aktualisierung der Kurse zu warten. Es ist ein bisschen schief, aber ich glaube nicht, dass Metakvotov etwas in MT4 ändern wird. Letztendlich handelt es sich um ein Serververbindungsproblem, das auf die eine oder andere Weise gelöst werden muss.

Dort. Und Sie haben erkannt, dass dies ein Problem ist! Aber ich denke, das sollte behoben werden und/oder die Hilfe sollte um einen Algorithmus für alle Fälle ergänzt werden.

Die Datenabfragefunktion sollte keine linkshändigen Daten ohne Fehler und Warnungen ausgeben!

Dies ist nicht mein erstes Thema (das vorherige war über MT5, ich habe keine klare Antwort darauf bekommen) über die Synchronisation und die folgenden Hänger/Fehler.

 
Alexey Kozitsyn:

Ja, das scheint zu funktionieren. Als Option kann sie verwendet werden. Ich danke Ihnen! Ich möchte aber trotzdem, dass die Funktionen richtig funktionieren.

Das funktioniert nur, wenn keine Balken fehlen - und das kann nicht garantiert werden. Angenommen, es gibt keine neuen Kurse auf dem Server für die aktuelle Stunde (und vielleicht auch für die vorherige Stunde). Dann ist der letzte Balken ein vorheriger.

 
Ihor Herasko:

Ihr Ansatz zur Überprüfung weist zwei wesentliche Fehler auf:

  1. In der OnInit() des Indikators können Sie keine korrekten Daten von irgendeinem TF erhalten, auch nicht von dem aktuellen. Das OnInit() des Indikators beim Start des Terminals wird fast in einem leeren Fenster ausgeführt (es sind möglicherweise nicht einmal die Daten vorhanden, die zum Zeitpunkt des Herunterfahrens des Terminals vorhanden waren). Auch das Marktumfeld ist oft noch nicht verfügbar. Die Hilfe enthält viele Warnungen darüber, was man in OnInit() nicht tun sollte. Daher gibt es nicht viel, was in den Code aufgenommen werden muss. In der Regel handelt es sich dabei um eine Überprüfung der Werte der eingestellten Parameter, die Bindung von Indikatorpuffern an Arrays und die Erstellung von Klassen, falls solche verwendet werden. Alles andere muss in OnCalculate() erledigt werden.
  2. Alle diese Prüfungen können nur durchgeführt werden, nachdem OnCalculate mindestens einmal aufgerufen wurde.

Igor, haben Sie den Code überprüft? Wo bekomme ich etwas in OnInit()?

2. Welche Kontrollen? Wo steht geschrieben, dass der Indikator mindestens einmal OnCalculate() verwenden muss, um korrekt zu funktionieren?

 
Alexey Navoykov:

Das funktioniert nur, wenn es keine verpassten Balken gibt, was nicht garantiert werden kann. Angenommen, es gibt keine neuen Kurse auf dem Server für die aktuelle Stunde (und vielleicht auch für die vorhergehende Stunde). Dementsprechend ist der letzte Balken irgendein vorheriger Balken.

Diese Lösung (wie gesagt, eine Krücke) ist so viel besser als nichts. Wie ich bereits sagte (und bewies), gibt es einen Fehler. Je schneller die Entwickler das Problem lösen, desto besser.

 
Es werden also keine falschen Daten ausgegeben, sondern die zuletzt empfangenen Daten, und der Fehler tritt erst auf, wenn das Terminal beginnt, den Kursstrom zu empfangen. In Ihrem Fall versuchen Sie, Daten zu empfangen, bevor die Anführungszeichen empfangen werden, und der Programmierer muss solche Ausnahmesituationen selbst behandeln. sowie eventuelle Verbindungsabbrüche. Was ist das Problem mit MT5?
 
Alexey Navoykov:

Das funktioniert nur, wenn es keine verpassten Balken gibt, was nicht garantiert werden kann. Angenommen, es gibt keine neuen Kurse auf dem Server für die aktuelle Stunde (und vielleicht auch für die vorherige Stunde). Daher ist der letzte Balken ein vorheriger Balken.

Die Methode mit iBarShift ermöglicht es, Lücken in der Historie zu erkennen, aber sie muss in bestimmten Abständen überprüft werden. Ich habe für mich selbst eine Prozedur geschrieben, die sich damit befasst, und danach habe ich die Lücken in MTF-Programmen vergessen.
 
Vitaly Gorbunov:
Es werden also keine Daten mehr ausgegeben, sondern die zuletzt empfangenen Daten, und der Fehler tritt erst auf, wenn das Terminal beginnt, den Kursdatenstrom zu empfangen. In Ihrem Fall versuchen Sie, Daten zu empfangen, bevor die Kurse beginnen. sowie eventuelle Verbindungsabbrüche. Was ist das Problem mit MT5?

Oh, Mann... Diese Phase des Abbaus haben wir bereits hinter uns. Siehe Ihr eigenes Protokoll:

2018.09.21 15:02:42.910 Custom indicator test XAUUSD,H1: removed
2018.09.21 15:15:27.985 test XAUUSD,H1: initialized
2018.09.21 15:15:29.520 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.21 15:15:29.552 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.21 15:15:29.589 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.21 15:15:29.605 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.21 15:15:29.636 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.21 15:15:29.667 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.21 15:15:29.705 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.21 15:15:29.736 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.21 15:15:29.768 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.21 15:15:29.805 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.21 15:15:29.837 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.21 15:15:29.868 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.21 15:15:29.906 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.21 15:15:29.937 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.21 15:15:29.969 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.21 15:15:30.006 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.21 15:15:30.038 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.21 15:15:30.069 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.21 15:15:30.106 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.21 15:15:30.138 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.21 15:15:30.169 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.21 15:15:31.880 test XAUUSD,H1: test.mq4: Данные истории по последнему часу отсутствуют! Ошибка #4066
2018.09.21 15:15:31.900 test XAUUSD,H1: test.mq4: Данные истории по последнему часу отсутствуют! Ошибка #0
2018.09.21 15:15:31.940 test XAUUSD,H1: test.mq4: Данные истории по последнему часу отсутствуют! Ошибка #0
2018.09.21 15:15:31.990 test XAUUSD,H1: test.mq4: Данные истории по последнему часу отсутствуют! Ошибка #0
2018.09.21 15:15:32.010 test XAUUSD,H1: test.mq4: Данные истории по последнему часу отсутствуют! Ошибка #0
2018.09.21 15:15:32.074 test XAUUSD,H1: test.mq4: Данные истории по последнему часу отсутствуют! Ошибка #0
2018.09.21 15:15:32.100 test XAUUSD,H1: test.mq4: Данные истории по последнему часу отсутствуют! Ошибка #0
2018.09.21 15:15:32.120 test XAUUSD,H1: test.mq4: Данные истории по последнему часу отсутствуют! Ошибка #0
2018.09.21 15:15:32.174 test XAUUSD,H1: test.mq4: Данные истории по последнему часу отсутствуют! Ошибка #0

Sequenz. Zuerst überprüfen wir die Verbindung. Sobald die Verbindung hergestellt ist, erhalten wir die Uhrzeit. Erklären Sie mir bitte, warum erst der Fehler 4066 zurückgegeben wird und dann nicht mehr! Was hat sich in den 20 ms seit dem letzten Aufruf geändert?

 
Vitaly Gorbunov:
Was ist das Problem mit MT5 dort sehr interessant zu lesen?

https://www.mql5.com/ru/forum/219829

Клинч в индикаторах mql5.
Клинч в индикаторах mql5.
  • 2017.11.15
  • www.mql5.com
Недавно столкнулся с одной крайне неприятной проблемой...
 
Alexey Kozitsyn:

Diese Lösung (wie gesagt, eine Krücke) ist so viel besser als nichts. Wie ich bereits sagte (und bewies), gibt es einen Fehler. Je schneller die Entwickler das Problem lösen, desto besser.

Nun, wenn wir über die beste Krücke sprechen, sollten wir nicht nur die aktuelle Stunde, sondern auch alle vorhergehenden Stunden seit dem letzten bekannten Balken prüfen. Andernfalls bleiben Sie bei dieser Prüfung stecken, wenn es für die aktuelle Stunde keine Notierungen gibt.
 
Alexey Kozitsyn:

Oh, Mann... Diesen Punkt haben wir bereits überschritten. Siehe Ihr eigenes Protokoll:

Sequenz. Zuerst überprüfen wir die Verbindung. Sobald die Verbindung hergestellt ist, erhalten wir die Uhrzeit. Erklären Sie mir bitte, warum erst der Fehler 4066 zurückgegeben wird und dann nicht mehr! Was hat sich in den 20 ms seit dem letzten Aufruf geändert?

Die Daten werden geladen Fehler 4066 dann ist es ein Fehler metakvotovtsev höchstwahrscheinlich empfangenen Daten verarbeitet wird für diese Situation ein Fehler nicht erfunden. Bis zu diesem Punkt ergibt alles einen Sinn.
Grund der Beschwerde: