Benötige Moneymanagement LOT size Formel basierend auf SL und Account Risk! - Seite 4

 
darelco:

... in diesem Teil des Codes ist ein Problem mit neuen Kompilierung (Fehler ---> 'MarketInfo' - illegale switch Ausdruckstyp) vielleicht war es alles OK, bis das Update auf MT4 build 600+ ... aber seitdem funktioniert es nicht mehr.

Könnten Sie also bitte eine neuere Version posten ... wenn Sie natürlich noch da sind.


Ich denke, wenn Sie wechseln

                switch ( MarketInfo( strSymbol, MODE_DIGITS ) )

zu

                int dig=MarketInfo( strSymbol, MODE_DIGITS ) ;
                switch ( dig )

Es wird gut kompiliert

 
darelco:

... in diesem Teil des Codes ist ein Problem mit neuen Kompilierung (Fehler ---> 'MarketInfo' - illegale switch Ausdruckstyp) vielleicht war es alles OK, bis das Update auf MT4 build 600+ ... aber seitdem funktioniert es nicht mehr.

Könnten Sie also bitte eine neuere Version posten ... wenn Sie natürlich noch da sind.


   switch((int)MarketInfo(strSymbol,MODE_DIGITS))
 

https://book.mql4.com/operators/switch

"Die Werte von Expression und Parametern können nur Werte vom Typ int sein. Der Ausdruck kann eine Konstante, eine Variable, ein Funktionsaufruf oder ein Ausdruck sein. Jede Variante 'case' kann durch eine Integer-Konstante, eine Zeichenkonstante oder einen konstanten Ausdruck gekennzeichnet sein. Ein konstanter Ausdruck kann keine Variablen oder Funktionsaufrufe enthalten."

 
angevoyageur:
   switch((int)MarketInfo(strSymbol,MODE_DIGITS))

Wieder einmal haben Sie eine einfachere und bessere Lösung gefunden.
 
GumRai:
Wieder einmal haben Sie eine einfachere und bessere Lösung gefunden.
Wir alle lernen voneinander.
 
                int dig=MarketInfo( strSymbol, MODE_DIGITS ) ;
                switch ( dig )
oder
   switch((int)MarketInfo(strSymbol,MODE_DIGITS))
oder der Objektstil (funktioniert außer bei Zeigerwürfen)
   switch( int(MarketInfo(strSymbol,MODE_DIGITS)) )
 

In meinem anderen EA ist es so geschrieben:

extern double      Risk_Percent                   = 3;
extern int         StopLoss                       = 50;

//+------------------------------------------------------------------+
  {
   double lot = MathCeil(AccountFreeMargin() * Risk_Percent / 1000) / 100;
   if(lot<MarketInfo(Symbol(),MODE_MINLOT))lot=MarketInfo(Symbol(),MODE_MINLOT);
   if(lot>MarketInfo(Symbol(),MODE_MAXLOT))lot=MarketInfo(Symbol(),MODE_MAXLOT);
   return (MathMin(NormalizeDouble(lot,PipMultiplier),MaxLotSize));
  }
//+------------------------------------------------------------------+
   if(_Digits==5 || _Digits==3)PipMultiplier=10;
   else PipMultiplier=1;
   slippage=Slippage*PipMultiplier;
   if(_Digits<4)
     {
      point=0.01;
     }
   else
     {
      point=0.0001;
     }
   return(0);
//+------------------------------------------------------------------+

 
Sebastien Pelle: In meinem anderen EA, ist es so geschrieben:

   double lot = MathCeil(AccountFreeMargin() * Risk_Percent / 1000) /


  1. Die freie Marge hat nichts mit Ihrem Risiko zu tun. Es ist der Stop Loss Ihres Brokers (50% Ihres Kontos).
  2. Sie hätten den gesamten Thread lesen und nicht posten sollen. Zusammengefasst:
    • Sie platzieren den Stopp dort, wo er sein muss - wo der Grund für den Handel nicht mehr gültig ist. Wenn Sie z.B. an einer Unterstützung handeln, wird der Stop unterhalb der Unterstützung platziert.
    • Kontostand * Prozent/100 = RISIKO = OrderLots * (|OrderOpenPrice - OrderStopLoss| * DeltaPerLot+ CommissionPerLot) (Beachten Sie, dass OOP-OSL den SPREAD einschließt und DeltaPerLot in der Regel etwa $10/Pip beträgt, aber die Wechselkurse des Paares gegenüber Ihrer Kontowährung berücksichtigt).
    • Verwenden Sie NICHT TickValue allein - DeltaPerLot
    • Sie müssen die Lots ordnungsgemäß normalisieren und gegen Min und Max prüfen.
    • Überprüfen Sie auch FreeMargin, um Stop-Outs zu vermeiden.