Indikator wird beschädigt - Seite 5

 
Rosh:

Was meinen Sie mit Verfälschungen? Ich habe gerade Ihren Indikator an EURUSD M1 angehängt und ich sehe keine Werte.


Das 32bit Client Terminal MetaTrader 4 zeigt das gleiche Bild. Sind Sie sicher, dass der von Ihnen bereitgestellte Indikator funktioniert?
 
Rosh:

Das 32bit-Client-Terminal MetaTrader 4 zeigt das gleiche Bild. Sind Sie sicher, dass der bereitgestellte Indikator funktioniert?
Es sieht so aus, als hätten Sie die Originalversion des Beispielcodes heruntergeladen (Zeitstempel 2011.10.11 18:06). Damit wird 25 Minuten lang nichts gezeichnet. In init() wird drawTime auf TimeCurrent() gesetzt, und der Code in start() wird nur ausgelöst, wenn drawTime + 1500 < TimeCurrent() ist.

Die zweite Version mit dem Zeitstempel 2011.10.12 06:37 sieht so aus, als sollte sie sofort mit dem Zeichnen beginnen.

Aber wie auch immer, die Probleme treten offenbar erst nach mehreren Stunden auf.
 
jjc:
Es sieht so aus, als hätten Sie die Originalversion des Beispielcodes heruntergeladen (Zeitstempel 2011.10.11 18:06). Damit wird 25 Minuten lang nichts gezeichnet.
Ok, ich werde warten
 

Das 32bit-Client-Terminal MetaTrader 4 zeigt das gleiche Bild. Sind Sie sicher, dass der bereitgestellte Indikator funktioniert?

- Ja. Ich habe den gleichen Indikator auch auf einem 32-Bit-Rechner laufen, seit gestern Abend, ca. 18 Uhr. Das Problem tritt nicht auf.

Wenn Sie einen weiteren möglichen MT4-Fehler verfolgen wollen, was passiert, wenn Sie Low[i] und High[i] statt iLow() und iHigh() verwenden?

- In meinem aktuellen Code werden iHighest / iHigh / iLowest / iLow etc. verwendet. Im Beispielcode wurde High/Low verwendet, um die Komplexität zu reduzieren.

 
RaptorUK:
Ich habe eine Idee ... aber muss jetzt raus, ich habe den Indikator zu einem neuen Diagramm hinzugefügt, werde meine Idee testen, wenn ich zurückkomme und die Ergebnisse posten.

OK, bin gerade zurückgekommen, das Diagramm sah gut aus, seit ich den Indikator zum ersten Mal geladen habe ... dann habe ich meine Idee ausprobiert ... Ich blätterte nach oben, um das Diagramm nach rechts zu verschieben, damit neue Daten heruntergeladen werden konnten ... und siehe da . .

Dies ist, was ich in diesem Thread am 2011.10.07 19:08 vorgeschlagen habe.

 
RaptorUK:

OK, bin gerade zurückgekommen, das Diagramm sah gut aus, seit ich den Indikator zum ersten Mal geladen habe ... dann habe ich meine Idee ausprobiert ... Ich blätterte nach oben, um das Diagramm nach rechts zu verschieben, damit neue Daten heruntergeladen werden konnten ... und siehe da . .

Okay, Sie vermuten also, dass sich die Balkenhistorie aus irgendeinem Grund ändert und rückgefüllt wird, und dass der Indikator davon betroffen ist, weil er nur auf einer Vorwärtsbasis zeichnet und nicht dem üblichen Indikatorverhalten der Neuberechnung auf der Grundlage von Dingen wie IndicatorCounted() folgt?
 
jjc:
Okay, Sie vermuten also, dass sich die Balkenhistorie aus irgendeinem Grund ändert und rückgefüllt wird, und dass der Indikator davon betroffen ist, weil er nur auf einer Vorwärtsbasis zeichnet und nicht dem üblichen Indikatorverhalten der Neuberechnung auf der Grundlage von Dingen wie IndicatorCounted() folgt?
Ich habe mir den aktuellen Code nicht angesehen. . aber ja, etwas in der Art von dem, was Sie geschrieben haben.
 
RaptorUK:
Ich habe mir den aktuellen Code nicht angesehen. . aber ja, etwas in der Art, wie Sie es geschrieben haben.

Okay, zusammenfassend lässt sich sagen, dass die Situation wie folgt aussieht:

* Ein normaler Indikator verwendet IndicatorCounted(), um festzustellen, welche Balkenwerte "schmutzig" sind und (neu) berechnet werden müssen.

* Wenn Sie der Historie weitere Balken hinzufügen, indem Sie zurückblättern, wird IndicatorCounted() auf Null zurückgesetzt. Daher wird ein normaler Indikator zu diesem Zeitpunkt alle historischen Werte neu berechnen.

* Der Indikator hier tut dies nicht. Er ignoriert IndicatorCounted() und zeichnet nur auf einer Vorwärtsbasis.

* Aus irgendeinem Grund füllt der Win64-Rechner von AnkaSoftware regelmäßig mit älteren Daten auf, der Win32-Rechner jedoch nicht. Das Betriebssystem ist in diesem Zusammenhang wahrscheinlich nur ein Zufall.

* Es ist ein bisschen frech, dass MT4 die Indikatorpuffer nicht an die neu hinzugekommenen Balken anpasst und sich stattdessen darauf verlässt, dass der Indikatorcode alle alten Werte neu berechnet, weil IndicatorCounted() zurückgesetzt wird. (Dies ist jedoch einigermaßen vertretbar, da die Hinzufügung älterer Balkenwerte bei vielen Indikatoren potenziell die nachfolgenden Berechnungen beeinflusst. So ändert sich beispielsweise ein EMA, wenn auch nur um einen winzigen Wert, wenn Sie einen zusätzlichen Balken am Anfang der Historie hinzufügen).

 
jjc:

* Es ist ein bisschen frech, dass MT4 die Indikatorpuffer nicht an die neu hinzugefügten Balken anpasst und sich stattdessen darauf verlässt, dass der Indikatorcode alle alten Werte neu berechnet, weil IndicatorCounted() zurückgesetzt wird.

Wenn man darüber nachdenkt, ist das eigentlich falsch. Es gibt einen guten Grund, warum MT4 versucht, den Indikator anzuweisen, alles neu zu berechnen, und dieses Szenario könnte hier zutreffen.

Nehmen wir an, der Indikator läuft schon eine Weile, aber dann kommt es zu einer Unterbrechung der Verbindung mit dem Broker, die mehrere Takte dauert. Bei der Wiederherstellung der Verbindung erhält MT4 einen Tick und beginnt mit dem Zeichnen der Indikatorwerte für den letzten Balken. Getrennt davon, asynchron und langsamer, erhält er die historischen Daten für die fehlenden Takte, die während der Unterbrechung stattgefunden haben. Diese werden in der Mitte der Balkenhistorie eingefügt, und daher ist es für jeden normalen Indikator notwendig, die alten Werte zumindest ab dem Beginn der Unterbrechungsperiode neu zu zeichnen. In der Praxis ist es verständlich, dass MT4 den Ansatz "alles neu zeichnen" wählt. Die einzige Frage ist, ob MT4 die Pufferwerte automatisch in EMPTY_VALUE ändern sollte, wenn sie potenziell ungültig sind.
 

Betrifft dieses Problem NUR Indikatoren-basierte?

wie über andere, sagen High[], low[], oder iHigh, iLow, iLowest, iBarshift, etc, etc...., das ist, was ich lieber wissen und klar sein über.