Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools

Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools (http://www.expert-advisor.com/forum/index.php)
-   Programmierung MQL4 (http://www.expert-advisor.com/forum/forumdisplay.php?f=220)
-   -   Rundung (http://www.expert-advisor.com/forum/showthread.php?t=6500)

UweBln 11.09.19 07:52

Rundung
 
Guten Morgen,

ich habe folgendes Problem:

Ich möchte eine anfängliche 0,01 Lot Positionsgröße multiplizieren, z.B. x1,5

Der erste Durchlauf soll 0,01 sein
Der zweite Durchlauf soll mit 1,5 multipliziert werden,
das Ergebnis ist dann 0,01 x 1,5 = 0,015.

Der MT4 kürzt die 0,005 leider weg.
Wie kann ich es erreichen, dass er hier aufrundet auf 0,02?

Beim dritten Durchlauf hätte ich dann 0,02 x1,5 = 0,03
Beim folgenden dann 0,03 x1,5 = 0,045 die wünschenswert auch aufgerundet werden soll.

Danke für die Hilfe.

.

Leopold 11.09.19 09:45

Hallo.

Hast du es schon damit versucht:

https://docs.mql4.com/convert/normalizedouble

---Leopold---

MA-EA 11.09.19 10:48

@UweBln

Rundet er nicht automatisch auf? Jedenfalls wenn Deine Lots nur mit 2 Stellen nach dem Punkt angegeben werden. Haben Deine Lots 3 Stellen nach dem Punkt?

UweBln 11.09.19 12:23

@Leopold, ich kann mit normalizedouble glaub ich nichts anfangen.

@MA-EA
Nein, natürlich haben meine Lots nur zwei Stellen
also 0,01 Lot (kleinste Einheit).

Ich betreibe einen EA
der gewisse Vorgaben berechnet.
Ich hatte oben beschrieben um welche Vorgänge es sich handelt.

Der EA rechnet also aus 0,01 x1,5 = 0,01(5)
die (5) kürzt der Broker natürlich weg.

Deswegen brauche ich eine Aufrundung auf 0,02 Lot.

Danke für die Hilfe

AVT 11.09.19 13:57

Zitat:

Zitat von UweBln (Beitrag 42842)
Ich hatte oben beschrieben um welche Vorgänge es sich handelt.

Der EA rechnet also aus 0,01 x1,5 = 0,01(5)
die (5) kürzt der Broker natürlich weg.
Deswegen brauche ich eine Aufrundung auf 0,02 Lot.

TestScript, 6 Durchgänge, die Werte werden extra auf volle Länge angezeigt, damit man sieht was wo gekürzt wird:
Code:

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
{
  double MinLot    = 0.01;      //SmallestLotSize
  double StartLots  = 0.01;      //StartWithSmallest
  double NewLots    = StartLots; //InitialValue
  double Multiplier = 1.5;      //FixMultiplierForLots
  int Interations  = 6;        //HowOftenToMultiply

  for(int i=0; i<Interations; i++)              //fromZeroToInterations
  {
      NewLots=NewLots*Multiplier;                //Multiply
      double Deminite=NewLots/MinLot;            //DivideByMinLot
      double Result=NormalizeDouble(Deminite,2); //NormalizeTo2Digits
      Print(" i="+IntegerToString(i)            //PrintResults
          +" NewLots="+DoubleToStr(NewLots)
          +" Deminite="+DoubleToStr(Deminite)
          +" Result="+DoubleToStr(Result)    );
  }
}
//+------------------------------------------------------------------+

AVT

UweBln 11.09.19 16:47

@AVT

Das sieht auf den ersten Blick gut aus.
Mal sehen wie ich das eingebunden kriege.

Ich mache Rückmeldung.

Danke

AVT 11.09.19 20:26

Zitat:

Zitat von UweBln (Beitrag 42845)
Mal sehen wie ich das eingebunden kriege.

Dann schreib bei der Einbindung lieber geteilt durch Lotstep anstatt MinLot, das ist zwar meistens dasselbe, aber korrekter wäre wenn man durch die LotStep teilt. Sorry, geht bei mir manchmal unter sowas. AVT

MA-EA 11.09.19 21:17

@UweBln

Darf ich mal nach dem Zweck des Ganzen fragen? Warum willst Du Lots mehrmals mit 1,5 multiplizieren? :confused:

Bobs 12.09.19 09:13

Man kann auch MathCeil() verwenden:
Lot=NormalizeDouble(MathCeil(0.015*100)/100,2);

RetepM 12.09.19 09:57

Ich würde mir das einfach machen. Schau nach, ob die Lotgröße gleich 0.01 ist. Wenn Ja multipliziere mit 2, ansonsten mit 1.5. Das ganze ist natürlich davon abhängig, welche Lotgrößen dein Broker für das aktivierte Symbol erlaubt: Du musst dem EA sonst auch noch sagen, für welches Symbol() das gelten soll...

Grüße


Alle Zeitangaben in WEZ +2. Es ist jetzt 21:24 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