Auslesen von Indikatorpuffern, die auf Diagramm eingestellt sind

 

Ein Indikator wird auf dem Diagramm platziert. Sie wird durch Timer-, ChartEvent- und Calculate-Ereignisse neu gezeichnet.

Ich benötige ein Skript, das die aktuellen Werte seiner Indikatorpuffer(INDICATOR_DATA) liest, die mit STRG+D angezeigt werden können. Ist es möglich, dies in MT4 zu tun?

 

Die Lösung mittels DLL ist im Artikel"Datenübertragung zwischen Indikatoren - eine einfache Lösung dieses Problems" beschrieben. Allerdings müssen Sie den Aufruf des externenGetPtr in den Quellcode des Indikators aufnehmen, was nicht immer möglich ist.

Ohne DLL ist es möglich, nur Lesen (ohne Schreiben, die auch in dem Artikel getan wird) von Puffern durchführen? Hat sich seit dem Zeitpunkt, an dem der Artikel geschrieben wurde (2010), etwas an diesem Thema geändert?

 
iCustom() wird helfen.
iCustom - Технические индикаторы - Справочник MQL4
iCustom - Технические индикаторы - Справочник MQL4
  • docs.mql4.com
iCustom - Технические индикаторы - Справочник MQL4
 
Alexey Viktorov:
iCustom() wird helfen.

In diesem Fall ist es leider so, dass

Neuzeichnen durch Timer, ChartEvent und Calculate-Ereignisse.

wird nicht helfen.

 
Wie viele Werte benötigen Sie? Lassen Sie den Indikator selbst Duplikate dieser Werte in den globalen Variablen des Terminals, in den Eigenschaften der Objekte im Diagramm, in den Dateien
 
Alexander Puzanov:
Wie viele Werte benötigen Sie? Lassen Sie den Indikator selbst die Duplikate dieser Werte in globalen Variablen des Terminals, in Eigenschaften von Objekten im Diagramm, in Dateien speichern

Ich benötige ein Skript, um die Werte von Puffern (mindestens einen) eines Indikators in einem Diagramm abzurufen. Die Ablage von Puffern aus einem Indikator in einer Datei ist kein Skript, das Puffer liest.

Im obigen Artikel wird eine schöne Lösung über Zeiger vorgestellt, mit der Sie die Puffer anderer Indikatoren im Diagramm nicht nur lesen, sondern sogar überschreiben können. Dies wird als Pufferlesen bezeichnet. Aber es ist eine DLL.

Sie sehen, wir können das folgende Schema umsetzen

  • wartet der Indikator auf eine globale Variable, die ihre Puffer in die Datei schreibt.
  • Das Skript erstellt eine solche Variable zur Laufzeit und erhält die entsprechenden Dateien.
Aber das ist nicht einmal eine Krücke. Es werden keine Puffer gelesen.

Nach dem Schweigen zu urteilen, mehr als sieben Jahre, da dieses Problem öffentlich auf dem vierten Forum angekündigt wurde (google erinnert sich), haben die Entwickler nicht eine funktionale erstellt.

Aus irgendeinem Grund können sie immer noch nicht die Indikatordaten aus dem Diagramm auslesen! Klingt wahnhaft, ist aber so.

 
comp:

In diesem Fall ist es leider so, dass

wird nicht helfen.

Warum nicht? iCustom() liest den Indikatorpuffer unabhängig davon, wie dieser Puffer gefüllt ist. Schließlich wird der Puffer ohnehin auf der Ebene der globalen Variablen deklariert.
 
Alexey Viktorov:
Warum nicht? iCustom() liest den Indikatorpuffer, unabhängig davon, wie dieser Puffer gefüllt ist. Schließlich wird der Puffer ohnehin auf der Ebene der globalen Variablen deklariert.

Denn iCustom weiß nichts über Timer- und ChartEvent-Ereignisse.

Zum Beispiel füllt der Indikator im Diagramm jede Sekunde (Timer-Ereignis) seinen einzigen Puffer mit Zufallszahlen (oder wendet den EMA auf vorherige Pufferwerte an). Das sind ziemlich viele Codezeilen. iCustom wird in diesem Fall niemals das zurückgeben, was Sie auf dem Diagramm sehen werden.

 
comp:

Denn iCustom weiß nichts über Timer- und ChartEvent-Ereignisse.

Zum Beispiel füllt der Indikator im Diagramm jede Sekunde (Timer-Ereignis) seinen einzigen Puffer mit Zufallszahlen (oder wendet den EMA auf vorherige Pufferwerte an). Das sind ziemlich viele Codezeilen. iCustom wird dann niemals das zurückgeben, was Sie auf dem Diagramm sehen.

Ich verstehe mein Missverständnis, danke.
 
Alexey Viktorov:
Warum nicht? iCustom() liest den Indikatorpuffer, unabhängig davon, wie dieser Puffer gefüllt ist. Schließlich wird der Puffer ohnehin auf der Ebene der globalen Variablen deklariert.

iCustom liest keine Puffer aus dem Indikator auf dem Chart, es erstellt eine eigene Kopie des Indikators im Speicher und liest daraus, nur die Pufferkopien werden nicht auf dem Chart angezeigt. Aber wenn der Indikator zeichnet etwas auf dem Chart unabhängig, wird es gezeichnet werden, wenn sie über iCustom, die Probleme schafft, durch die Art und Weise

Wenn der Indikator beispielsweise den folgenden Code enthält, wird er beim Aufruf von iCustom gezeichnet, und der Text überlagert den Text des Indikators im Diagramm

ObjectSetString(0, ShortName, OBJPROP_TEXT, "какой-то текст");
ChartRedraw();
 
Alexey Volchanskiy:

iCustom liest keine Puffer aus dem Indikator auf dem Chart, es erstellt eine eigene Kopie des Indikators im Speicher und liest daraus, nur die Pufferkopien werden nicht auf dem Chart angezeigt. Aber wenn der Indikator zeichnet etwas auf dem Chart unabhängig, wird es gezeichnet werden, wenn sie über iCustom, die Probleme schafft, durch die Art und Weise

Wenn der Indikator beispielsweise den folgenden Code enthält, wird er beim Aufruf von iCustom gezeichnet, und der Text überlagert den Text des Indikators im Diagramm

Das ist seltsam. Ich habe irgendwo im Leitfaden gelesen, dass, wenn der Indikator bereits gestartet ist, keine Kopie erstellt wird. Vielleicht verstehe ich etwas nicht.
Grund der Beschwerde: