Besoin d'une formule de moneymanagement LOT size basée sur le SL et le risque du compte ! - page 4

 
darelco:

... dans cette partie du code il y a un problème avec la nouvelle compilation (error ---> 'MarketInfo' - illegal switch expression type) peut-être tout était OK jusqu'à la mise à jour de MT4 build 600+ ... mais depuis lors il ne fonctionne plus.

Donc, pourriez-vous s'il vous plaît poster une version plus récente ... si bien sûr vous êtes toujours là.


Je pense que si vous changez

                switch ( MarketInfo( strSymbol, MODE_DIGITS ) )

en

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

La compilation sera correcte

 
darelco:

... dans cette partie du code il y a un problème avec la nouvelle compilation (error ---> 'MarketInfo' - illegal switch expression type) peut-être que tout était OK jusqu'à la mise à jour de MT4 build 600+ ... mais depuis cela ne fonctionne plus.

Donc, pourriez-vous s'il vous plaît poster une version plus récente ... si bien sûr vous êtes toujours là.


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

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

" Les valeurs de l'Expression et des Paramètres ne peuvent être que des valeurs de type int. L'Expression peut être une constante, une variable, un appel de fonction ou une expression. Chaque 'cas' de variation peut être marqué par une constante entière, une constante de caractère ou une expression constante. Une expression constante ne peut pas inclure de variables ou d'appels de fonction."

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

Une fois de plus, vous proposez une solution plus simple et meilleure.
 
GumRai:
Une fois de plus, vous proposez une solution plus simple et meilleure.
Nous apprenons tous les uns des autres.
 
                int dig=MarketInfo( strSymbol, MODE_DIGITS ) ;
                switch ( dig )
ou
   switch((int)MarketInfo(strSymbol,MODE_DIGITS))
ou le style de l'objet (fonctionne sauf pour les castings de pointeurs)
   switch( int(MarketInfo(strSymbol,MODE_DIGITS)) )
 

Dans mon EA différent, c'est écrit comme ceci :

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: Dans mes différents EA, c'est écrit comme ceci :

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


  1. La marge libre n'a rien à voir avec votre risque. C'est le stop loss de votre courtier (50% de votre compte).
  2. Vous auriez dû lire l'intégralité du fil de discussion et ne pas poster. En résumé :
    • Vous placez le stop là où il doit être - là où la raison de la transaction n'est plus valable. Par exemple, si vous négociez un rebond de support, le stop passe sous le support.
    • Solde du compte * pourcentage/100 = RISQUE = Lots d'ordres * (|OrderOpenPrice - OrderStopLoss| * DeltaPerLot+ CommissionPerLot) (Note OOP-OSL inclut le SPREAD, et DeltaPerLot est généralement autour de 10 $/pip mais il prend en compte les taux de change de la paire par rapport à la devise de votre compte).
    • N'utilisez PAS TickValue par lui-même - DeltaPerLot
    • Vous devez normaliser les lots correctement et vérifier les valeurs min et max.
    • Vous devez également vérifier FreeMargin pour éviter le stop out.
Raison: