Indikator wird beschädigt - Seite 3

 
AnkaSoftware:

JIC, Bitte beachten Sie, dass das Problem nicht auf 32-Bit-Plattformen auftritt. Ich habe in einem der früheren Beiträge etwas Code bereitgestellt.

Sie haben zwei (oder mehr) getrennte Rechner, die nicht unbedingt genau dieselben Daten empfangen. Das 64-Bit-System könnte sich beispielsweise auf einem stark ausgelasteten VPS-Knoten befinden, der gelegentlich Datenverkehr und/oder Verbindungen verliert, z. B. weil der physische Knoten an der Grenze der Prozessorauslastung oder Bandbreite arbeitet. (Es gibt noch viele andere mögliche Erklärungen; das ist nur eine.)

Solange Sie nicht verstehen, warum das Zeichnen der lila Linien aufhört, wenn es eine Lücke in den M1-Balken gibt, würde ich alles andere als Zufall betrachten.

Abschließend möchte ich auf meine erste Aussage zurückkommen: Es gibt keinen Grund, warum 64-Bit-Windows Probleme wie die von Ihnen beschriebenen verursachen sollte. Viele Leute haben in diesem Forum berichtet, dass MT4 auf den Plattformen x, y und z nicht richtig funktioniert, nur um dann festzustellen, dass das Problem bei ihrem Code liegt. Sie haben entweder den ersten echten MQL4-Fehler seit mehreren Jahren in einer ausgereiften Software entdeckt, die von buchstäblich Millionen von Menschen genutzt wird, oder das Problem liegt in Ihrem Code. Nach den bisherigen Erkenntnissen - z. B. separaten Berichten von Ihnen, dass das Problem entweder nach 16 Stunden oder nach 3-4 Stunden auftritt - ist es sehr wahrscheinlich, dass das Problem durch gelegentliche Schwankungen in den Daten verursacht wird, die Sie nicht richtig berücksichtigen.
 

AnkaSoftware:

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

d) Der Code wird wie folgt verwendet

Erklärungen

<code>

#property indicator_chart_window



  1. Nicht in \Programmdateien* auf Vista/Win7 installieren
  2. 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;
    }
    }
    Ich bin mir nicht sicher, was du hier versuchst zu tun. Zum einen berechnest du eine Menge Werte (start..end), speicherst aber nur EINEN (serie[bar]) Ich würde es codieren:
    void DrawMoveEx(double& serie[], int start, int end, double startlevel, double endlevel) {
       double a = (endlevel - startlevel) / (start - end);
       for(int x = start; x <= end; x++) serie[x] = a * x + startlevel;
    }

 
Anbei ein Beispielindikator, der das Problem reproduziert. Hängen Sie den Indikator auf einer 64-Bit-Windows-Plattform an einen M1-Chart an und lassen Sie ihn mindestens 4 Stunden lang laufen.
Dateien:
 
AnkaSoftware:
Anbei ein Beispielindikator, der das Problem reproduziert. Hängen Sie den Indikator auf einer 64-Bit-Windows-Plattform an einen M1-Chart an und lassen Sie ihn 4+ Stunden lang laufen.
Tut mir leid, ich habe nicht die Geduld, einen sauberen 64-Bit-Rechner für dieses Problem zu reservieren und dann 4 oder mehr Stunden zu warten.

Wenn dieser Indikator jedoch wirklich das Problem reproduziert, dann muss ich zustimmen, dass es interessant ist. Ich kann nicht sofort erkennen, wo sich ein internes Problem verstecken könnte. (Vorausgesetzt, Sie haben, wie schon zuvor, einen Zusammenhang zwischen dem Problem und einer kürzlich aufgetretenen Störung in der Verbindung zwischen MT4 und dem Broker definitiv ausgeschlossen. Sie haben erwähnt, dass Sie CNS vertrauen; Sie haben jedoch nicht bestätigt, dass im MT4-Journal keine Verbindungsprobleme erwähnt werden, die wiederum ein Backfilling der Balkenhistorie verursachen könnten).

Wenn Sie den Weg eines MT4-Problems verfolgen wollen, dann scheint es am wahrscheinlichsten, dass es mit der Übergabe der Indikator-Arrays per Referenz zusammenhängt. Arrays in MQL4 haben seltsame Eigenschaften wie immer statisch zu sein, und ich nehme an, es ist nur möglich, dass es eine seltsame latente Problem mit der Übergabe der speziellen Indikator-Puffer-Arrays durch Verweis, die nur Probleme auf Win64 auslöst ist. Warum allerdings das Betriebssystem in einem solchen Zusammenhang einen Unterschied macht, bleibt ein völliges Rätsel.

Ich würde versuchen, DrawMoveEx() so zu ändern, dass es keine Referenz auf das Indikator-Array mehr annimmt, und stattdessen gibt es separate Funktionen wie DrawMoveEx_Down1(), DrawMoveEx_Up1() usw., die einfach die Puffer als globale Variablen ansprechen. Wenn das einen Unterschied macht, dann herzlichen Glückwunsch, dann haben Sie mit ziemlicher Sicherheit einen MT4-Fehler gefunden. Möglicherweise der zweite heute.
 
AnkaSoftware:
Anbei ein Beispielindikator, der das Problem reproduziert. Auf einer 64-Bit-Windows-Plattform, hängen Sie den Indikator an ein M1-Diagramm an und lassen Sie ihn über 4 Stunden lang laufen.
Läuft seit über 5 Stunden auf Windows 7 Ultimate 64 bit, keine Probleme.
 
RaptorUK:
Läuft seit über 5 Stunden auf Windows 7 Ultimate 64 bit, keine Probleme.

JIC a) Wie von Ihnen vorgeschlagen, wurde der Code geändert, um die Übergabe der Referenz zu entfernen, was das Problem nicht behebt. Der geänderte Code liegt bei.

b) Die fehlenden Balken, auf die Sie sich beziehen, sind höchstwahrscheinlich auf die Bedingung "kein Handel" zurückzuführen, weshalb der Broker keine Balken sendet. IMHO, im Falle eines Verlustes der Verbindung, die fehlenden Bars sind verfügbar, sobald die Verbindung wiederhergestellt ist. Wenn Sie sich meinen Beispielcode ansehen, gibt es keine Abhängigkeit davon, dass die Balken zusammenhängend sind.

Raptor, vielen Dank für den Test. Vielleicht müssen Sie sich einloggen, um den Fehler zu sehen. Ich bin in der Lage, das Problem auf Windows Server 2008 R2 Enterprise zu reproduzieren. Könnte also ein O/S-Problem sein. Haben Sie eine Idee, woher ich eine Liste der empfohlenen MT4-Patches für eine bestimmte Plattform bekomme?

.

Dateien:
 
AnkaSoftware:

Haben Sie eine Idee, woher ich eine Liste der empfohlenen MT4-Patches für eine bestimmte Plattform bekomme?

So etwas gibt es nicht. Es gibt nur eine Version von MT4, die auf allen Windows-Versionen läuft, und es gibt keinen besonderen Grund, warum es mehr als eine geben sollte. Es gibt keine betriebssystemspezifischen Versionen oder Patches.
 
AnkaSoftware:
Anbei ein Beispielindikator, der das Problem reproduziert. Hängen Sie den Indikator auf einer 64-Bit-Windows-Plattform an einen M1-Chart an und lassen Sie ihn 4+ Stunden lang laufen.
Läuft immer noch gut, soweit ich das beurteilen kann... wie kann ich den Fehler reproduzieren?
 
RaptorUK:
Läuft immer noch gut, soweit ich das beurteilen kann ... wie kann ich den Fehler reproduzieren?
Sie müssen nichts tun. Sie müssen nur in das Diagramm hineinzoomen, um zu sehen, ob der Fehler aufgetreten ist.
 
AnkaSoftware:
Sie müssen nichts tun. Sie müssen nur in das Diagramm hineinzoomen, um zu sehen, ob der Fehler aufgetreten ist.

Wenn ich nach Linien suche, die nicht mit den Diagrammbalken verbunden zu sein scheinen (wie in Ihrem ersten Beitrag), dann habe ich keine Probleme.