erstens kann man "exp" nicht für einen int verwenden , er ist reserviert
zweitens drückt man den "SL" aus
SL = MathFloor((iATR(NULL, PERIOD_D1, 7, 0)*MathPow(10,Digits-exp)+1)*0.1);
in der Init-Sektion, schlechte Idee
denn wenn du den Fehler 4066 bekommst, ist "SL" = 0
dann erhält man eine Null-Division für "lots"
lots=MoneyRisk/SL/(MarketInfo(Symbol(), MODE_TICKVALUE)*multi);
und der Indikator stoppt und Sie müssen den Indikator neu laden.
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
Beispiel:
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);
Du hast recht... Ich kann es nicht vermeiden :-)
Was ich meinte, ist, kann ich warten, bis die Aktualisierung abgeschlossen ist, bevor ich mit der SL-Berechnung fortfahre? Das Problem ist, dass ich dem SL keinen zufälligen Wert geben kann, weil dann der ganze Indikator nutzlos ist. Ich würde also gerne auf den Fehler 4066 prüfen, und wenn er auftritt, würde ich gerne etwas warten und erneut prüfen, bevor ich weitermache.
Übrigens habe ich das gleiche Problem mit diesem Indikator. Aber warum war das im "alten" MetaTrader kein Problem? Hier erhalte ich immer eine Null für die ATR(5). WARUM?!?! Das ist vorher nie passiert... Ich hasse diesen neuen MetaTrader...!
int start() //---- { double Spread = MarketInfo(Symbol(), MODE_SPREAD); double ATR = iATR(NULL, PERIOD_D1, 5, 0); int exp1 = 0; if (Digits==5 || Digits==3) { Spread=Spread*0.1; exp1 = 1; } Comment ( "ADR(5): ",DoubleToStr(ATR*MathPow(10,Digits-exp1),1), " || TODAY: ",(iHigh(NULL, PERIOD_D1, 0)-iLow(NULL, PERIOD_D1, 0))*MathPow(10,Digits-exp1), " || ", DoubleToStr(((iHigh(NULL, PERIOD_D1, 0)-iLow(NULL, PERIOD_D1, 0))*MathPow(10,Digits-exp1)/(ATR*MathPow(10,Digits-exp1))*100), 2), "%", "\n" + "SPREAD: ", Spread, " || RATIO: ",DoubleToStr((Spread/ATR)*MathPow(10,-(Digits-exp1-2)), 2),"%" ); //---- return(0); }
Ich glaube, ich habe das Problem gefunden! Es ist definitiv ein Aktualisierungsproblem. Wenn ich jetzt die Währungen wechsle, funktioniert der Indikator. Aber dann habe ich ein Währungspaar geöffnet, das ich heute noch nicht geöffnet hatte. Dann bekam ich diese Meldung:
Sie müssen etwas eingeben wie
if(number==0)dothis; else dothis;
in ShowSpread.mq4
Suchen Sie einfach die Zeile, in der diese Nullteilung auftritt.
Ich glaube, ich habe das Problem gefunden! Es ist definitiv ein Aktualisierungsproblem. Wenn ich jetzt die Währungen wechsle, funktioniert der Indikator. Aber dann habe ich ein Währungspaar geöffnet, das ich heute noch nicht geöffnet hatte. Dann bekam ich diese Meldung:
angevoyageur, ich glaube du hast diesen Beitrag von mir nicht gesehen:
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."
Daran sieht man, dass ich den Ratschlag nicht befolgen kann und weil ich zu dieser Lösung gekommen bin, sieht man auch, dass ich definitiv überprüft habe, was qjol mir geraten hat.
- 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.
Hallo Coder,
ich habe einen kleinen Moneymanagement-Indikator erstellt, der bei mir gut funktioniert hat. Aber seit dem neuen MQL4 macht er Probleme, mit denen ich nicht umgehen kann.
Wenn Sie diesen Indikator auf Ihr Diagramm ziehen, werden einige Zahlen auf der ganz rechten Seite gedruckt. Die erste Zahl steht für den Stoploss in Pips und die zweite für die Lot-Größe. In den Optionen können Sie das Risiko auswählen. Die anderen Zahlen sind die Stoploss-Levels. Aber wenn ich das Währungspaar wechsle, sind die Zahlen verschwunden. Stattdessen sehe ich mehrere Male das Wort "Label". Und wenn ich mir die Indikatorliste ansehe, ist mein Indikator auch weg. Zusammenfassend lässt sich also sagen, dass nach dem Wechsel des Währungspaares der Indikator verschwunden ist und statt der Zahlen nur noch Labels angezeigt werden.
Ich bin total verwirrt. Früher hat dieser Indikator ohne Probleme funktioniert. Für Hilfe bin ich sehr dankbar.
Hier ist der Code: