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?
- docs.mql4.com
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.
Aus irgendeinem Grund können sie immer noch nicht die Indikatordaten aus dem Diagramm auslesen! Klingt wahnhaft, ist aber so.
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.
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.
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.
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();
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
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
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?