![MQL5 - Sprache von Handelsstrategien, eingebaut ins Kundenterminal MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
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
P./S.: Nur für den Fall, ich möchte klarstellen, dass ich nicht begonnen habe zu sehen, was passiert, wenn das Terminal nach einer langen Zeit geladen wird (d.h. wenn viele neue Balken erscheinen sollen, nachdem das Terminal entladen wurde ).
Dina, funktioniert es bei dir? Ich habe seit 2-3 Stunden (nur heute, ohne die gestrigen Tests zu zählen) versucht, eine nicht funktionierende Version von OnInit zu bekommen, aber ohne Erfolg. Alles funktioniert immer so, wie es soll. Wenn ich den Indikator in zwei Charts einsetze und das Terminal neu starte, funktioniert er nur in dem Chart, der zum Zeitpunkt des Schließens und Öffnens des Terminals aktiv war. Auf der zweiten, nicht aktiven Karte funktioniert es nicht. Aber das ist meiner Meinung nach verständlich, denn es gibt kein Diagramm, das gerendert wird, und kein Diagramm selbst, obwohl die Daten empfangen werden.
Ja, Alexej, es funktioniert. Ich habe hier darüber geschrieben. Offensichtlich ist er in meinen Zitaten aus anderen Beiträgen optisch untergegangen.
Bitte sagen Sie mir, ob Sie vor dem Entladen des Terminals das Diagramm auf die neuesten Preise zurücksetzen?
Nein, das tue ich nicht. Denn genau das ist der Punkt. Ich möchte Ihnen im Einzelnen erklären, warum dies alles notwendig ist. Ein Händler verwendet das Diagramm wie ein Testgerät. Der Indikator blendet einen Teil des echten Diagramms rechts von der vermeintlich aktuellen Zeit aus (in Wirklichkeit liegt diese Zeit irgendwo in der Historie). Wenn Sie F12 drücken, wird die nächste Kerze im Online-Chart angezeigt, usw. Wenn Sie also das Terminal mit dem Indikator neu starten, wird die Chartposition nicht an die Stelle zurückgesetzt, an der der Händler seine Studien beendet hat. Als Ergebnis erhält er/sie ein leeres Diagramm, da das Terminal das Diagramm auf die letzte echte Kerze zurücksetzt. Und das, obwohl das Terminal an einem ganz anderen Ort entladen wurde.
Warum frage ich?
Ich habe Ihren Code verwendet, um zu sehen, wie er in meiner Situation funktionieren würde. Zuerst dachte ich, dass ich das von Ihnen beschriebene Problem reproduzieren würde. Später habe ich verstanden, dass das nicht der Fall ist. Wenn das Diagramm vor dem Entladen auf die letzten Preise zurückgesetzt wird, funktioniert es beim Laden des Terminals gemäß dem Code. Wenn ich vor dem Entladen nicht zu den letzten Preisen zurückkehre, bleibt das Diagramm dort, wo es vor dem Entladen war.
Interessante Beobachtung. Ich habe es selbst überprüft, aber leider hat sich nichts geändert. Ich bekomme immer noch die günstigsten Preise für das Wiederladen.
Ich schlage vor, dass Sie "Ihre Uhren synchronisieren". Ich teste dies alles mit Build 1861. Was ist Ihr Körperbau?
Dina, funktioniert es bei dir? Ich habe seit 2-3 Stunden (nur heute, ohne die gestrigen Tests zu zählen) versucht, eine nicht funktionierende Version von OnInit zu bekommen, aber alles ohne Erfolg. Alles funktioniert immer so, wie es soll. Wenn ich den Indikator in zwei Charts einsetze und das Terminal neu starte, funktioniert er nur in dem Chart, der zum Zeitpunkt des Schließens und Öffnens des Terminals aktiv war. Auf der zweiten, nicht aktiven Karte funktioniert es nicht. Aber das ist meiner Meinung nach verständlich, denn es gibt kein Diagramm, das gerendert wird, und kein Diagramm selbst, obwohl die Daten empfangen werden.
Setzen Sie es auf zwei Karten. Leider funktionieren beide auf die gleiche Art und Weise - die neuesten Preise werden beim Neuladen angezeigt.
Welche Bauart haben Sie?
... Nur eine Besonderheit ist mir aufgefallen: Wenn ich den Indikator auf zwei Charts platziere und das Terminal neu starte, funktioniert er nur auf dem Chart, der zu dem Zeitpunkt aktiv war, als ich das Terminal geschlossen und geöffnet habe. Auf der zweiten, nicht aktiven Karte funktioniert es nicht. Aber das ist meiner Meinung nach verständlich, denn es gibt kein Diagramm, das gerendert wird, und kein Diagramm selbst, obwohl die Daten empfangen werden.
Ich selbst habe nicht daran gedacht, es auf diese Weise auszuprobieren. Jetzt habe ich solche Experimente gemacht (auch mit Hilfe von Igors Code).
Auf diese Weise gelang es mir, das von ihm beschriebene Problem zu reproduzieren.
...
Ich schlage vor, dass wir "unsere Uhren synchronisieren". Ich teste dies alles mit Build 1861. Was ist Ihrer?
Ich habe auch 1861. Aber dank Alexey Viktorov ist es mir gelungen, das von Ihnen beschriebene Problem bei der Installation über OnInit() zu reproduzieren. /* vorher, wie ich in Ihren Beiträgen gesehen habe/.
Reihenfolge der Maßnahmen: Wie Siehier beschrieben haben.
I. Vor dem Entladen des Terminals habe ich jedoch die Karten auf die frischesten Preise umgestellt.
Und ich habe den Indikator auf zwei Charts eines Paares mit unterschiedlichen Zeitrahmen (GBPUSD M5 und GBPUSD H1) eingestellt.
Meine Ergebnisse sind die Ergebnisse dieser Experimente:
1. ich setze den Indikator zuerst auf dem GBPUSD M5 Chart, dann - auf dem GBPUSD H1. Nachdem ich die Charts auf neue Balken verschoben hatte, schloss ich das Terminal, wenn der GBPUSD H1 Chart aktiv war (d.h. der höhere Zeitrahmen war aktiv). Wenn ich unter diesen Bedingungen das Terminal erneut öffne, wird das Diagramm beim Öffnen auf die von Ihrem Code angegebenen Balken verschoben.
Wenn wir jedoch das Terminal mit dem aktiven Chart von GBPUSD M5 schließen (d.h. der untere Zeitrahmen ist aktiv) und dann das Terminal wieder öffnen, treten nach dem Laden des Terminals keine Verschiebungen auf einem der beiden Charts auf. Die Charts öffnen sich mit neuen Balken. Gleichzeitig erhalte ich für eine von ihnen einen Erfolg, für die andere einen Fehler:
Bei den Experimenten zu den Punkten 1 und 2 habe ich nach dem Neustart des Terminals und den Ergebnissen diesen Indikator aus den Charts gelöscht und dann wieder installiert.
3. wenn ich die gleichen Experimente gemacht habe, aber ohne den Indikator jedes Mal neu zu installieren, gibt es nach dem Neustart des Terminals keine Verschiebung des Diagramms nach dem Neustart des Terminals. Unabhängig davon, ob er in einem höheren oder niedrigeren Zeitrahmen aktiv ist. Die Charts öffnen sich mit neuen Balken. Die Meldungen sind die gleichen wie in Punkt 2(erfolgreich und Fehler 4111)
II. Darüber hinaus habe ich mit der gleichzeitigen Installation des Indikators auf denselben beiden Charts experimentiert, ohne diese Charts vor dem Entladen des Terminals auf neue Balken zurückzugeben.
Die Ergebnisse, die ich habe: Wenn ich auf einem höheren Zeitrahmen schließe/öffne, ist das Diagramm des höheren Zeitrahmens dort, wo es vor dem Schließen war. Der untere (nicht aktive) ist am frischesten.
Wenn Sie auf einem niedrigeren Zeitrahmen öffnen/schließen, wird der niedrigere Zeitrahmen auf den frischesten Bars geöffnet. Die Meldungen sind dieselben wie unter 2(Erfolg und Fehler 4111).
III. Das Problem ist jetzt mit dem folgenden aufgetreten:
Nach diesem Zurücksetzen des Indikators kam es nicht zu einer Verschiebung, aber die Meldung war erfolgreich:
Wenn jedoch vor einer solchen Neuinstallation des Indikators das automatische Blättern nicht nur jetzt, sondern einige Zeit später deaktiviert wurde, wurde das Problem nicht erkannt.
Irgendwie.
Das klingt, als sollten Sie sich an den Service Desk wenden.
Bei dem einen wird ein Erfolg und bei dem anderen ein Fehler angezeigt:
Das ist doch mal eine Überraschung! Es ist mir noch nicht gelungen, einen Fehler von ChartNavigate zu erhalten. Aber das ist schon etwas.
Offenbar beginne ich langsam zu verstehen, was das Problem im Kern ist.
Wenn Sie ChartNavigate() zum ersten Mal in OnInit() oder in OnCalculate() aufrufen, ist es sehr wahrscheinlich, dass noch nicht alle Daten des Diagramms geladen wurden. Die Funktion ChartNavigate() hat jedoch bereits funktioniert und war (zu diesem Zeitpunkt) erfolgreich. Die Daten werden dann geladen und im Diagramm angezeigt, was zu einer vollständigen Neuzeichnung und Verschiebung des Diagramms an seinen Anfang führt. Infolgedessen wird das Diagramm so angezeigt, als ob es nicht durch ChartNavigate() verschoben worden wäre.
Um das Diagramm erfolgreich zu verschieben, müssen wir daher irgendwie feststellen, dass die Diagrammdaten nicht mehr angezeigt werden (aufgrund der Verlaufsauslagerung). Erst nach Feststellung dieser Tatsache kann ChartNavigate() aufgerufen werden.
...
Um das Diagramm erfolgreich verschieben zu können, muss daher irgendwie festgestellt werden, dass die Daten des Diagramms nicht mehr angezeigt werden sollen (aufgrund des History Paging). Erst nach Feststellung dieser Tatsache kann ChartNavigate() aufgerufen werden.
Sie haben wahrscheinlich Recht. Beim Neustart des Terminals kann dies relevant werden. Bei meinen Experimenten war ich auch daran interessiert, den automatischen Bildlauf in Kombination mit (oder ohne) Zurücksetzen des Indikators zu aktivieren/deaktivieren. Eine Folge dessen, was ich in Block III, am Ende dieses Beitrags, beschrieben habe. Aber ich werde mich damit noch nicht näher befassen. Ich muss meine eigenen dringenden Probleme lösen. Deshalb werde ich vorerst weitergehen.
Setzen Sie es auf zwei Karten. Leider funktionieren beide auf die gleiche Art und Weise - die neuesten Preise werden beim Neuladen angezeigt.
Welche Bauart haben Sie?
Forum zum Thema Handel, automatisierte Handelssysteme und Strategietests
ChartNavigate bei der Initialisierung
Alexey Viktorov, 2018.06.25 15:10
Ich habe auch 1861. Es ist mir nur einmal gelungen, es zu reproduzieren. Alle anderen Versuche haben gut funktioniert.