Fehlermeldung: Zero Divide
PHP-Code:
Ich vermute also, dass der Nenner, genauer (Max-Bid) häufig zu 0 wird. (?) Aber sollte die if-Bedingung nicht genau diesen Fehler vermeiden ? Ich wäre dankbar über Tipps, was da nicht stimmt. PS: Mein Broker zeigt den Kurs auf 5 Nachkommastellen an. Diese Funktion soll den maximalen Kurs der letzten 5 Candles ermitteln und den StopLoss so setzen, dass ich ich im Falle eines Verlusts 2% (Risk) meines Kapitals verliere. |
Ich bin mir jetzt nicht ganz sicher, Ich würde aber erstmal das Point auskommentieren. Bzw. setze mal einfacah eine zahl für das Point ein.
Das [Max - Bid] glaube ich eher nicht. Da du es ja als double deklariert hast. Würde nur gegen Null gehen, sowie su schon gesagt hattest, aber nicht Null werden. Es sei denn das High ist null. Das kann ja aber nur sein wenn du keine Kurse hast. Aber dann würde bestimmt eine andere Fehlermeldung kommen. Versuch mal einfach alles was du von der Mt4 Syntax nimmst mit eigenen Zahlenwerte zu arbeiten. Bei mir war das nur komisch, da eigentlich immer alles lief und ich schon die standartfunktion genommem hatte, die schon immer in benutzung waren... |
Also, du verwendest einen 5-Digit Broker.
Du solltest berücksichtigen, das bei deinen Berechnungen die Delta=20 als 2 interpretiert wird (5-Digits). Wenn du mit 20 Pips rechnen möchtest, musst du eine 0 dranhängen (200)! Allerdings spielt das in deinem Beispiel keine Rolle. Vieleicht wird das "Zero Divide" an einer anderen Stelle deines Codes verursacht. |
Nein, dieser Fehler tritt nur wegen dieses Codes auf.
Ohne ihn läufts alles. |
Zitat:
da kann man doch vorbeugen :: double x=Max-Bid; if(x==0) x=0.0000001; double dLotsShort = (Balance*Risk*Bid) / (100000*(Max-Bid+x)); Ist doch easy ! Das da keiner allein drauf kommt ;) Wenn es jetzt noch auftritt, dann muß der Fehler an einer anderen Stelle auftreten. Kannst ja mal den kompletten Code posten. Gruß Joe |
Ich hab den Code doch noch ein bischen abgeändert und der Fehler "Zero divide" wird nicht mehr angezeigt. Ich bekomme aber neue Fehlermeldungen und hab keinen Plan, wo die herkommen.
Hier mein Code: Zuerst wird geprüft, ob Stochastik und RSI auf mehreren Zeitebenen im Extrembereich sind. die Variablen "c" und "f" werden "true", wenn die Indikatoren im Extrembereich liegen. Code:
. Beim Durchlaufen des des Backtests kommen folgende Fehlermeldungen: 1.) Ordersend Error 4051 2.) Ordersend Error 4107 3.) invalid price 1.34896000 for OrderSend function Bei 3.) wird ein Kurs mit 5 Nachkommastellen angezeigt, ich benutze aber einen 4-Digit-Broker. Und ich kapier nicht wo dieser price überhaupt herkommt. Sieht jemand, wodurch diese Fehler verursacht werden? Vieleicht sehe ich den Wald vor lauter Bäumen nicht. |
Versuche mal
NormalizeDouble(wert,Nachkommastellen) zu benutzen Gruß Joe |
bei mir lag es hier drann
//Bestimme die Mindest- und Höchst-Lotgröße double minlotsize = MarketInfo(Symbol(), MODE_MINLOT); double maxlotsize = MarketInfo(Symbol(), MODE_MAXLOT); für den backtest hatte ich dann einfach werte eingeben //Bestimme die Mindest- und Höchst-Lotgröße double minlotsize =0.1; double maxlotsize = 0.2; danach gings |
Durch NormalizeDouble() hat wurde das Problem mit dem invalid Prace behoben.
Allerdings bleibt noch die Fehlermeldung 4051 invalid Lots amount. Die Funktion, mit der ich die minimale bzw. maximale Lotgröße angibt zeigt beim Programmstart für beide Werte 0.1 an. Kann das bei einer Einlage von 10000 EUR sein ? Auf jeden Fall stimmt etwas mit der Berechnung der Lots nicht. Ist meine Formel korrekt ? Welche Formel gebt ihr in den Code ein, um die Lotgröße mit max. 2% Verlust zu bestimmen ? Stimmt diese mit meiner überein ? |
Also,
was sind 2% Verlust bei Stoploss 100 Pips bei EURUSD Microlotaccount sollte sich so rechnen. KontoEquity 200 ergibt bei 2% = 4 Verlust 0,1 = 10 Cent je Pip 0,1 = 1 Euro je 10 Pips 0,1 = 4 Euro je 40 Pips Da also 0,1 zu groß ist:: 0,1/100/40 = 0,1/2,5 = 0,04 Lot wäre richtig. Jetzt sollte es nicht mehr schwerfallen daraus eine Methode(Funktion) zu machen double myLotSize(AccountEquity(), double verlustProzent) { double erg=meine berechnungen return(erg); } |
Alle Zeitangaben in WEZ +2. Es ist jetzt 17:31 Uhr. |
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.6.1
Powered by vBCMS® 2.7.0 ©2002 - 2024 vbdesigns.de
Copyright ©2009 - 2023 by Expert-Advisor.com - Das Metatrader Forum