Kleiner Moneymanagement-Indikator durch neuen MQL4 ruiniert - Seite 3

 
mar:

angevoyageur, ich glaube du hast diesen Beitrag von mir nicht gesehen:

mar 2014.04.02 08:16 #

Du hast recht... Ich kann es nicht vermeiden :-)

"Was ich meinte, ist, kann ich warten, bis das Update abgeschlossen ist, bevor ich mit der SL-Berechnung weitermache? Das Problem ist, dass ich dem SL keinen Zufallswert geben kann, weil dann der ganze Indikator nutzlos ist. Ich möchte also auf den Fehler 4066 prüfen, und wenn er auftritt, möchte ich irgendwie warten und erneut prüfen, bevor ich weitermache."

Da kannst du sehen, dass ich den Ratschlag nicht befolgen kann und weil ich zu dieser Lösung gekommen bin, kannst du auch sehen, dass ich definitiv überprüft habe, was qjol mir geraten hat.

Nein, das tust du nicht, qjol schrieb :

Du musst also prüfen, ob eine der Variablen gleich 0.... ist, um eine Nullteilung zu vermeiden

Und du meldest danach einen Nullteilungsfehler. Aber es ist so wie du es willst.

 
mar:

Ein weiteres Beispiel:

Wenn Sie den MetaTrader öffnen, ist das Ergebnis Null! Und es bleibt Null, bis Sie den Zeitrahmen oder das Paar ändern. Ich denke, das ist genau das Problem des Fehlers bei der Division durch Null. Meinen Sie nicht auch?

Haben Sie das am Wochenende ausprobiert, als es keine eingehenden Ticks gab? Das ist der einzige Grund, den ich mir vorstellen kann, warum der Kommentar nicht aktualisiert wurde.
 
GumRai:

Haben Sie es am Wochenende versucht, als keine Ticks eingegangen sind? Das ist der einzige Grund, den ich mir vorstellen kann, warum der Kommentar nicht aktualisiert wurde.

Bei mir ist es genauso. Kein Häkchen, keine Aktualisierung.
 

Nein, ich habe es heute versucht. Es kamen viele Ticks herein, aber keine Aktualisierung des Kontostands. Ich habe fast eine Minute gewartet, aber der Kontostand war immer noch Null.


Die Sache ist die, dass dieses Problem in den letzten Jahren nie aufgetreten ist. Seitdem der neue MetaTrader eingeführt wurde, besteht dieses Problem. Ich glaube also nicht, dass es etwas mit dem Code zu tun hat. Es muss interne Änderungen innerhalb der Plattform selbst geben, die diesen Code zum Scheitern bringen. Und dieser Indikator besteht nur aus einer Kommentarzeile, und er schlägt fehl. Es muss also ein Plattform/Daten-Problem sein.

 
mar:

Nein, ich habe es heute versucht. Es kamen viele Ticks herein, aber keine Aktualisierung des Kontostands. Ich habe fast eine Minute gewartet, aber der Kontostand war immer noch Null.


Die Sache ist die, dass dieses Problem in den letzten Jahren nie aufgetreten ist. Seitdem der neue MetaTrader eingeführt wurde, besteht dieses Problem. Ich glaube also nicht, dass es etwas mit dem Code zu tun hat. Es muss interne Änderungen innerhalb der Plattform selbst geben, die diesen Code zum Scheitern bringen. Und dieser Indikator besteht nur aus einer Kommentarzeile, und er schlägt fehl. Es muss also ein Plattform/Daten-Problem sein.


Sind Sie sicher, dass der Indikator genau dem Code entspricht, den Sie gepostet haben?

Es scheint, als ob Sie einen Indikator prüfen, der den einzeiligen Code in init und nicht in start hat.

 

ich habe bereits alle deine Fragen beantwortet (einschließlich der zukünftigen Frage zu diesem Thema), aber vielleicht hast du sie nicht sorgfältig gelesen, dann lass es mich noch einmal tun


qjol:

Offensichtlich kann man die Aktualisierung nicht vermeiden ;-) aber man muss eine Situation der "Nullteilung" vermeiden

also muss man prüfen, ob eine der Variablen gleich 0.... ist, um eine Nullteilung zu vermeiden

und da man einen Indikator nicht stoppen kann, muss man sich etwas einfallen lassen


mar:


Kann ich warten, bis die Aktualisierung abgeschlossen ist, bevor ich mit der SL-Berechnung fortfahre?

Nein, das geht nicht (wurde bereits oben geschrieben)

qjol:
Und weil man einen Indikator nicht anhalten kann, muss man sich etwas einfallen lassen


mar:


Das Problem ist, dass ich SL nicht einen zufälligen Wert geben kann, weil dann der ganze Indikator nutzlos ist.


Ich habe Ihnen bereits eine Lösung gegeben

SL = MathFloor((iATR(NULL, PERIOD_D1, 7, 0)*MathPow(10,Digits-exp)+1)*0.1);
if (SL == 0) // because error 4066 (for example)
   {
   SL = Someting;
   }
lots=MoneyRisk/SL/(MarketInfo(Symbol(), MODE_TICKVALUE)*multi);


es ist nur zufällig, bis das Update beendet ist (nicht mehr als 2-3 Sekunden, mehr oder weniger) (IMHO ist das besser als eine Fehlermeldung zu bekommen und dann funktioniert der Indikator überhaupt nicht)

wenn du eine andere Lösung hast, kannst du sie gerne verwenden, du brauchst meine Erlaubnis nicht ;-)


mar:


Wechseln Sie auf einen beliebigen Zeitrahmen, außer D1. Dann ziehen Sie den Indikator auf Ihren Chart. Das Ergebnis wird ein Fehler wie oben sein. Es scheint mir, dass die ATR(5) des Tagescharts nicht korrekt ist, weil die DAILY DATA fehlen. Das Öffnen eines "frischen" Charts im D1-Zeitrahmen verursacht keinerlei Probleme. Und wenn man zu einem anderen Zeitrahmen wechselt, ist es auch in Ordnung, weil die ATR(5) korrekt ist. Ich habe festgestellt, dass ich zu jedem Paar wechseln kann, solange ich im D1-Chart bleibe. Aber der Wechsel zu anderen Paaren in anderen Zeitrahmen als D1 verursacht Probleme, solange MetaTrader die täglichen Daten nicht erhalten hat. Meine Frage ist nun, wie kann ich die täglichen Daten erhalten, damit meine ATR-Berechnung korrekt ist, wenn ich einen neuen Chart in einem Zeitrahmen öffne, der nicht D1 ist?


da Sie iATR ... PERIOD_D1 und noch einmal ... verwenden, müssen Sie warten, bis das Tagespaar die Aktualisierung beendet hat (2-3 Sekunden, es sei denn, Sie verwenden eine Einwahlverbindung)

 

qjol, es tut mir leid, dass ich so viele Missverständnisse hatte! Jetzt verstehe ich, dass du mir gesagt hast, ich solle den Indikator nur mit einigen zufälligen Daten füttern, damit die Division durch Null verschwindet. Ich habe auch nicht daran gedacht, dass der Indikator nach einer Datenaktualisierung den richtigen Wert verwendet. Tut mir leid, dass ich so dumm bin... :D

Aber trotzdem bleibt die Frage offen: warum zum Teufel hat es vorher funktioniert? Was ist mit dem neuen MetaTrader los?

 
mar:


Aber trotzdem bleibt die Frage offen: Warum zum Teufel hat es vorher funktioniert? Was ist falsch mit dem neuen MetaTrader?


Das hat nichts mit dem alten oder neuen MT4 zu tun, sondern damit, wie Indikatoren funktionieren und ausgeführt werden
da Indikatoren "nicht warten können " und sofort ausgeführt werden
aber, zu dieser Zeit haben Sie keine Daten für iATR ... PERIOD_D1 ist also gleich 0.
Deshalb erhalten Sie eine Null-Division
 
Das ist für mich absolut klar. Aber ich benutze diesen Indikator für eine ziemlich lange Zeit und ich hatte nie Daten-Probleme mit fehlenden Daten oder Dinge wie das. So frage ich mich, warum dies geschah das erste Mal, wenn ich die Build-625-Version von MT4 verwenden.
 
mar:

Nein, ich habe es heute versucht. Es kamen viele Ticks herein, aber keine Aktualisierung des Kontostands. Ich habe fast eine Minute gewartet, aber der Kontostand war immer noch Null.


Die Sache ist die, dass dieses Problem in den letzten Jahren nie aufgetreten ist. Seitdem der neue MetaTrader eingeführt wurde, besteht dieses Problem. Ich glaube also nicht, dass es etwas mit dem Code zu tun hat. Es muss interne Änderungen innerhalb der Plattform selbst geben, die diesen Code zum Scheitern bringen. Und dieser Indikator besteht nur aus einer Kommentarzeile, und er schlägt fehl. Es muss also ein Plattform/Daten-Problem sein.

Sind Sie sicher, dass der Indikator genau dem Code entspricht, den Sie gepostet haben?

Es scheint, als ob Sie einen Indikator prüfen, der den einzeiligen Code in init und nicht in start hat.