[SERVICE DESK] Fehler beim Abrufen der Zeit der älteren TF im Timer! - Seite 15
Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Ihr Indikator verfolgt die Datenaktualisierung nicht.
Es kommen neue Barren vom Broker und Sie überprüfen sie nicht.
Ich habe ein paar Zeilen hinzugefügt, um zu zeigen, dass bei der Überprüfung alles korrekt angezeigt wird.
Es ist eine Arbeitssituation - wir testen die neue Bar.
Was Sie nicht sagen! Wie kommen Sie darauf, dass ich neue Balken im Auge behalten muss? Steht das in der Dokumentation? Ich meine, dass ich den Wert der Funktion erhalten MUSS, und dann muss ich ihn unbedingt mit dem vorherigen Wert vergleichen? Es gibt eine Funktion, die so konzipiert ist, dass sie mit hohen Zeitrahmen arbeitet. Die Funktion kann einen Fehler zurückgeben, wenn sie keine Daten hat, oder einen falschen Wert zurückgeben (in diesem Fall gleich 0). Das ist alles. Die Programmierer müssen nichts tun, um einen 100%ig korrekten Wert zu erhalten.
Aber schauen Sie, was ich in der Dokumentation für SeriesInfoInteger() gefunden habe:
Um zusätzliche Informationen über den Fehler zu erhalten, müssen Sie die Funktion GetLastError() aufrufen.
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()) nicht auf Relevanz, bevor sie die Daten sendet? 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.
Ok, lesen Sie die Hilfe)
SeriesInfoInteger
Gibt Informationen über den Zustand der historischen Daten zurück.
Was bedeutet das Wort "historisch"?
Wenn die Historie geladen ist, tritt kein Fehler auf.
Niemals! Und wie kommen Sie darauf, dass ich unbedingt neue Bars verfolgen sollte? Steht das in der Dokumentation? Ich meine, ich MUSS den Wert der Funktion erhalten, und dann muss ich ihn unbedingt mit dem vorherigen vergleichen? Es gibt eine Funktion, die so konzipiert ist, dass sie mit hohen Zeitrahmen arbeitet. Die Funktion kann einen Fehler zurückgeben, wenn sie keine Daten hat, oder einen falschen Wert zurückgeben (in diesem Fall gleich 0). Das ist alles. Die Programmierer müssen nichts tun, um einen 100%ig korrekten Wert zu erhalten.
Aber schauen Sie, was ich in der Dokumentation für SeriesInfoInteger() gefunden habe:
In meinem Code siehe GetLastError()? Hier ist ein Scheck. Diese Kontrolle muss notwendig und ECHT sein! Alles andere sind Krückenlösungen.Sie brauchen nichts zu tun).
...Makler schickt Ihnen aktualisierte Daten - wenn Sie wollen, verwenden Sie diese für die Berechnung, wenn nicht - kein Problem, verwenden Sie die vorhandene Historie).
ps. es ist Wochenende, der Markt ist geschlossen, Sie haben falsche Daten in Ihrem Terminal!
und es liegt kein Fehler vor!!!)
ok, lesen Sie die Hilfe)
Was bedeutet das Wort Geschichte?
Wenn der Verlauf geladen ist, tritt kein Fehler auf.
Sie sind nichts schuldig.)
...der Makler sendet Ihnen aktualisierte Daten - wenn Sie diese zur Berechnung verwenden wollen, wenn nicht - kein Problem, verwenden Sie History)
Jede Zecke, die am Terminal eintrifft, ist bereits eine Geschichte. Und ich möchte die tatsächlichen Werte oder Fehler erhalten. Wenn Ihnen das passt - ok.
Jede Zecke, die am Terminal eintrifft, ist bereits eine Geschichte. Und ich möchte die aktuellen Werte oder Fehler erhalten. Wenn das für Sie in Ordnung ist, ist das in Ordnung.
Ja, der Verlauf ist das, was bereits heruntergeladen wurde oder was in der Vergangenheit heruntergeladen wurde.
Und was erst jetzt (nach dem letzten Zitat) aktualisiert wird, ist nicht die Geschichte, sondern sind die neuen Rohdaten.
Überprüfen Sie die Kerzenzeit, nicht die Berechnung der Balken.
Auf diese Weise wird sie korrekt aktualisiert (überprüft).
Taras, hier ist das Ergebnis deines Codes:
Taras, hier ist das Ergebnis deines Codes:
Ja, es ist der erste Tick, derjenige, der die fertige Geschichte hervorbringt, derjenige, der verfügbar ist.
Nach diesem Tick (wenn es neue Balken gibt), kommt sofort der zweite Tick, in dem mein Code Ihre Variablen aktualisiert und sie die richtigen Daten anzeigen.
ps. Sie können Ihre eigene Funktion einfügen, um den neuen Balken zu überprüfen, es wird die gleiche sein.
Ich selbst überprüfe ständig die Anzahl der Balken, wenn sich die Zahl um mehr als 1 geändert hat, bedeutet das, dass man alles neu berechnen muss, wenn sich die Zahl um 1 geändert hat, bedeutet das nur einen neuen Balken. Und ich überprüfe nur die kritischsten Fehler, und ich sehe diesen Verzögerungs-Fehler nicht.
Ja, das ist das erste Häkchen, das die fertige Geschichte angibt.
Nach diesem Tick (wenn es neue Balken gibt), kommt sofort der zweite Tick, in dem mein Code Ihre Variablen aktualisiert und sie die richtigen Daten anzeigen.
Hat sich die Zahl um mehr als 1 geändert, so handelt es sich um einen neuen Balken.
Ich selbst überprüfe ständig die Anzahl der Balken, wenn sich die Zahl um mehr als 1 geändert hat, bedeutet das, dass man alles neu berechnen muss, wenn sich die Zahl um 1 geändert hat, bedeutet das nur einen neuen Balken. Und ich überprüfe nur die kritischsten Fehler, und ich sehe diesen Verzögerungs-Fehler nicht.
Dies ist übrigens ein weiteres Argument, das dafür spricht, dass der Fehler passiert ist. Es handelt sich um einen Fehler in der Berechnung des Indikators! Ich habe einen Expert Advisor geschrieben:
Läuft auf demselben Diagramm wie der Indikator. Schauen wir uns die Ergebnisse an:
Was wir sehen. Wir sehen, dass alles in Ordnung ist. Alle geladen, und beachten Sie, dass es keine Fehler gibt, werden die Daten sofort aktualisiert! Die Hauptfrage ist, warum die GMT-Daten normal erhalten werden können, während der Indikator "mit Diamanten spielen" muss. Sollten die Programme nicht gleich funktionieren? Warum funktioniert der gleiche Code in einem Indikator und in einem Expert Advisor unterschiedlich? Dies sollte nicht der Fall sein.
Dies ist übrigens ein weiteres Argument, das für einen Fehler spricht. Es ist der FEHLER in der Berechnung des Indikators! Ich habe einen Expert Advisor geschrieben:
Läuft auf demselben Diagramm wie der Indikator. Schauen wir uns die Ergebnisse an:
Was wir sehen. Wir sehen, dass alles in Ordnung ist. Alle geladen, und beachten Sie, dass es keine Fehler gibt, werden die Daten sofort aktualisiert! Die Hauptfrage ist, warum die GMT-Daten normal erhalten werden können, während der Indikator "mit Diamanten spielen" muss. Sollten die Programme nicht gleich funktionieren? Warum funktioniert der gleiche Code in einem Indikator und in einem Expert Advisor unterschiedlich? Dies sollte nicht der Fall sein.
Alle Indikatoren befinden sich in einem einzigen Thread, und bis zum Ende des Ablaufs (d.h. bis zum nächsten Aufruf von OpsulCalcuter) geschieht nichts Neues, d.h. Sie erhalten nichts schneller als das Ende des Ablaufs. Der Expert Advisor befindet sich in einem eigenen, separaten Thread, so dass er beim Starten seinen Start für Datenaktualisierungen verschieben und Daten aktualisieren kann - alles andere im Terminal bleibt davon unberührt. Das ist seit der Geburt so, und es gibt keine Möglichkeit, es zu beheben, da die metatrader4-Umgebung begraben wurde.
Da es am Terminal liegt, eine Verbindung herzustellen und etwas mit dem Laden, Prüfen usw. zu tun, befinden sich alle Indikatoren in einem Thread, und es passiert nichts Neues, bis alles in dem Thread endet (tatsächlich bis zum nächsten Aufruf von OpCalculate), d. h., wenn man sich in diesem Thread befindet, wird man sowieso nichts schneller als bis zum Ende des Threads bekommen. Der Expert Advisor befindet sich in einem eigenen, separaten Thread, so dass er beim Starten seinen Start für Datenaktualisierungen verschieben und Daten aktualisieren kann - alles andere im Terminal bleibt davon unberührt. Das ist seit der Geburt so, und es gibt keine Möglichkeit, es zu beheben, weil die metatrader4 Umgebung begraben wurde.
Ich bin mir der Tatsache bewusst, dass alle Indikatoren eines Symbols in einem Thread sind, während jeder Experte seinen eigenen Thread hat. Dies ist jedoch nicht der Fall. Die Entwickler sind die Entwickler, die Fehler in ihren Kreationen beheben. Programme sollten nicht anders funktionieren! Wenn die Indikatoren etwas übersehen haben, handelt es sich um einen Fehler und es gibt kein Problem. Der Expert Advisor hat irgendwie die richtigen Daten ohne Fehler erhalten! Wir können es also umsetzen. @Slava, können Sie Ihre Meinung dazu abgeben, ob das offensichtlich fehlerhafte Verhalten korrigiert wird? Oder zumindest eine zusätzliche Dokumentation (dass mit prev_calculated = 0 keine korrekten Daten von Senior TFs erhalten werden können)?
Ja, ich weiß, dass alle Indikatoren eines Symbols in einem Thread sind und jedem Experten ein anderer Thread zugewiesen ist. Dies ist jedoch nicht der Fall. Die Entwickler sind die Entwickler, die Fehler in ihren Kreationen beheben. Programme sollten nicht anders funktionieren! Wenn die Indikatoren etwas übersehen haben, handelt es sich um einen Fehler und es gibt kein Problem. Der Expert Advisor hat irgendwie die richtigen Daten ohne Fehler erhalten! Wir können es also umsetzen. @Slava, können Sie Ihre Meinung dazu abgeben, ob das offensichtlich fehlerhafte Verhalten korrigiert wird? Oder ist es zumindest ein Zusatz zur Dokumentation (dass wir keine korrekten Daten von hohen TF erhalten können, wenn prev_calculated = 0)?
In der Dokumentation heißt es, dass der Expert Advisor bis zu 5 Sekunden Zeit hat, um Daten zu empfangen, und während dieser Zeit versucht das Terminal, Daten für den Expert Advisor zu empfangen. Dem Indikator ist eine solche Möglichkeit nicht gegeben, und ebenso wenig sollte er eine Aktualisierung der Historie verlangen, sie ist für ihn nicht entscheidend, wenn sie entscheidend ist, dann muss sie in einem Expert Advisor berechnet werden. Der Grundgedanke ist, dass die gewünschte Situation bei der derzeitigen Umsetzung nicht möglich ist. Grundsätzlich sind TFs Zeitgeber, und es gibt Zeiträume, in denen diese mehreren Zeitgeber in einem Moment zusammenfallen - dies ist ein 100%ig übereinstimmender, synchroner Prozess (mit Ausnahme der Öffnungs-/Schließungszeit), da der erste Tick einer Minute des aktuellen TFs mit der ersten Minute der Fünf-Minuten-Zeit, der Stunde usw. zusammenfällt. - es wird lediglich derselbe Wert in mehrere Variablen geschrieben, und es ist logisch, eine Reihe von benötigten TFs zu setzen und alle erforderlichen Daten auf einmal zu erhalten. Warum die Entwickler dies getan haben und nicht umgekehrt, weiß ich nicht. Vielleicht kann (wird) es im bestehenden Terminal-Betriebsmodell wegen der Client-Server-Trennung nicht gemacht werden, denn wenn wir jetzt Experten erlauben, Indikatoren zu verwenden, werden sie das Terminal aufhängen.
Wenn es Sie interessiert, können Sie am Ende des Tages sehen, wie der Indikatoraufruf funktioniert, der Indikator ruft einen anderen Indikator auf, expert(_asktfexp) ruft indicator(_asktf_sample) auf, der indicator(_asktf) aufruft. Wenn ein Indikator von einem Experten aufgerufen wird, wird der Timer im Indikator nicht gestartet. Lösungen mit einem Timer im Indikator sind also nur für Fälle gedacht, in denen der Indikator nur im Chart hängt und nicht aufgerufen wird (was im Allgemeinen logisch ist).