Indikator wird beschädigt

 

Alle,

Ich habe einen Indikator entwickelt, der für die ersten 16 Stunden oder so gut läuft, danach wird er beschädigt und beginnt, Linien auf dem ganzen Diagramm zu zeichnen. Ich überprüfe auch den Wert von IndicatorCounted() und sein Wert wird nicht negativ, wenn ich die beschädigten Linien bekomme. Ich möchte die Indikatorpuffer nicht neu initialisieren, da die Historie der "gültigen Züge/Linien" verloren gehen würde. Haben Sie Vorschläge zur Behebung des Problems?

Bilder des normalen und des beschädigten Indikators finden Sie in der angehängten Zip-Datei.

Dateien:
images.zip  61 kb
 
Keine Gedankenleser hier - kein Code = keine Hilfe
 
WHRoeder:
Keine Gedankenleser hier - kein Code = keine Hilfe

Herzlichen Dank.
 

meine Lieben,

kann mir jemand den Link zum Download des metaEditor 4 schicken?

Vielen Dank.

 
tiger961:

meine Lieben,

kann mir jemand den Link zum Download des metaEditor 4 schicken?

Vielen Dank.


Tiger Sie müssen einen neuen Thread zu starten, anstatt auf andere Threads zu stapeln.

Der Editor ist mit kostenlosen MT4-Terminal-Download von jedem Broker zur Verfügung.

 

Einige weitere Informationen -

a) Die Beschädigung der Indikatoren tritt nur auf der Windows 64-Bit-Plattform auf.

b) Ich habe einen Dump des Indikator-Arrays vor und nach der Beschädigung gemacht - die gleichen sind in der beigefügten xls-Datei mit Kommentaren verfügbar.

c) Gilt die Einstellung "Max Bars in Chart" nur, wenn Sie den Chart öffnen? Die Anzahl der Balken und der zugehörigen Indikatoren wächst mit jedem weiteren hinzugefügten Balken.

d) Der Code wird wie folgt verwendet

Deklarationen

<code>

#property indicator_chart_window

#property indicator_buffers 8

#property indicator_color1 Rot

#eigenschaft indicator_width1 2

</code>

Für die Initialisierung des Indikators -

<code>

SetIndexBuffer(0, Down1);

SetIndexStyle(0, DRAW_LINE);

SetIndexEmptyValue(0, EMPTY_VALUE);

</code>

Zum Hinzufügen von Liniendaten

<code>

void DrawMoveEx(double& serie[], int start, int end, double startlevel, double endlevel) {

double a = (endlevel - startlevel) / (start - end);

double y;

int bar;


for(int x = 0; x <= start - end; x++) {

y = a * x;

bar = start - x;

serie[bar] = startlevel + y;

}

}

</code>

 
AnkaSoftware:
a) Die Beschädigung der Indikatoren erfolgt nur auf der Windows 64-Bit-Plattform
Installieren Sie keine Programmdateien* unter Vista/Win7
 
WHRoeder:
Installieren Sie keine Programmdateien* auf Vista/Win7
Richtig, die Installation erfolgt unter C:/metatrader4/<terminal dir>. Ich glaube, das Problem ist nicht auf ein Pfadproblem zurückzuführen, sondern auf eine Speicherbeschädigung. Der Indikator läuft in den ersten 3-4 Stunden einwandfrei, danach beginnt die Korruption.
 

Ich vermute, dass es nichts dergleichen ist...

Ich habe etwas Ähnliches erlebt, wenn neue historische Daten zum Diagramm hinzugefügt werden, indem das Diagramm nach rechts gescrollt wird.

 
RaptorUK:

Ich vermute, dass es nichts dergleichen ist...

Ich habe etwas Ähnliches erlebt, als neue historische Daten zum Diagramm hinzugefügt wurden, indem das Diagramm nach rechts gescrollt wurde.

Hmm, "neue historische Daten werden dem Diagramm hinzugefügt", wie? Der Indikator wird gestartet und bleibt ungestört. Wir haben einen festen Rückblick von 1000 Balken. Der Indikator lädt keine historischen Daten.

Kann jemand aus dem Entwicklungsteam einen Blick darauf werfen?

 
AnkaSoftware:

Hmm, "neue historische Daten werden in das Diagramm eingefügt", wie? Der Indikator wird gestartet und bleibt ungestört. Wir haben einen festen Rückblick von 1000 Balken. Der Indikator lädt keine historischen Daten.

Kann jemand aus dem Entwicklungsteam einen Blick darauf werfen?

Ich stimme RaptorUK zu: Es ist kolossal unwahrscheinlich, dass es sich um einen Fehler in MT4 handelt und nicht um Ihren Code oder um etwas, das mit 64-Bit-Windows zu tun hat. Ich habe Berichte über Leistungs- und Stabilitätsprobleme mit MT4 gesehen, die sich als begründet herausstellten (z. B. https://www. mql5.com/en/forum/135355), aber ich habe noch nie einen Bericht über einen MT4-Sprachfehler gesehen, der sich als richtig erwiesen hat.

Lassen Sie mich auf einen Unterschied zwischen Ihren Screenshots von "Move Normal" und "Move Error" hinweisen. Bei "Move Normal" gibt es keine offensichtlich fehlenden Balken. Bei "Fehler verschieben" hingegen scheinen die Diagrammdaten zu fehlen. Die meisten Markierungen auf der X-Achse liegen 16 Minuten auseinander, aber der Abstand zwischen der zweiten und dritten Markierung beträgt 21 Minuten (06:08 bis 06:29). Das kann das Problem sein oder auch nicht, aber ich würde in Ihrem Code nach Stellen suchen, die davon ausgehen, dass es eine kontinuierliche Reihe von Balken geben wird. Wenn es z.B. gerade 8 Uhr morgens ist, sollten Sie im Code nach Stellen suchen, die davon ausgehen, dass (a) der Balken für 7 Uhr morgens 60 Balken zurückliegt oder sogar (b) dass überhaupt ein Balken für 07:00 Uhr existiert.