Répondre

Money Management Problem - % fixe et taille de lot

5 réponses

Julianrob

Client, bbp_participant, communauté, 54 réponses.

Visiter le profil

Il y a 9 ans #113227

Bonjour Mark,

 

Tout d'abord, merci beaucoup pour l'aide que vous m'avez apportée jusqu'à présent. Il semble que j'ai des difficultés avec mon money management avec cet EA - j'utilise des MM prédéfinis dans les règles de ma stratégie.

 

Dans la section stratégie, j'ai des variables pour la taille du lot et le pourcentage fixe défini comme valeur double, mais lorsque j'exécute cet EA sur AUDUSD ou EURUSD avec une taille de lot de 0,10, il ouvre toujours des transactions avec une taille de lot de 0,01.

 

Lorsque je règle AccountRiskPerTrade sur 5, il ouvre des tailles de transaction de 5 lots pour chaque transaction, mais ne compose pas les gains. Veuillez vous référer aux images ci-jointes.

 

Pour le stop loss et le take profit, j'utilise des valeurs fixes qui sont définies comme des variables, à un seul chiffre et de type int (entier).

 

Toute aide serait la bienvenue, merci.

Fichier : TradeMM.jpgTradeMM.jpg

0

Mark Fric

Administrateur, sq-ultimate, 2 réponses.

Visiter le profil

Il y a 9 ans #128549

Bonjour,

 

dans votre choix de MM, les lots sont calculés dynamiquement en fonction du SL et de la valeur actuelle du compte. LotSize n'est utilisé que si MM ne peut pas être calculé - généralement lorsque vous n'avez pas de SL défini pour votre ordre.

Mais si le risque par opération est fixé à 0, cela n'a pas de sens.

 

Si vous souhaitez utiliser une taille de lot fixe, vous devez utiliser "Pas de gestion de l'argent", sinon vous devez définir le montant de % du compte que vous souhaitez risquer à chaque transaction.

 

 

Le problème avec la taille calculée est que la variable LotsDecimals est fixée à 2, ce qui signifie que les lots seront arrondis à deux nombres décimaux.

 

Il ne compose pas les gains - il fonctionnera lorsque vous fixerez le risque par transaction à une valeur non nulle.

Marque
StratégieArchitecte de Quantités

0

Julianrob

Client, bbp_participant, communauté, 54 réponses.

Visiter le profil

Il y a 9 ans #128585

Merci Mark, j'ai compris.

0

loonet

Abonné, bbp_participant, communauté, client, sq-ultimate, 15 réponses.

Visiter le profil

Il y a 9 ans #129589

Bonjour Mark, je suis Riccardo de Sapienza Finanziaria.

Je vous signale qu'à mon avis EAW a un bug dans le calcul du risque de gestion monétaire avec Fixed% des fonds propres du compte.

Pour le système de trading que je prévois, j'ai fixé un risque par transaction de 1%.

Regardez par exemple ce qui se passe dans la transaction # 79 que j'ai mise en évidence dans l'image ci-jointe.

résultats du commerce.jpg

 

Avant le trade #79 sur mon compte, j'ai un solde de 21680 USD, et j'ai fixé un risque par trade de 1%.

Cela signifie que je pourrais perdre environ 217 USD si j'obtiens le SL.

La transaction # 79 est une opération d'ACHAT avec un prix d'entrée à 1.3703 et un SL à 1.3640.

L'opération est mise sur le marché avec des lots de 3:40, chaque pip est donc de 34 USD.

La transaction se termine avec une perte de 1241 pips (= 63 x 34).

En fait, pour respecter un risque par transaction de 1%, le système de trading aurait dû ouvrir cette transaction avec 0,34 lots et non 3,40 lots.

 

 

J'ai donc essayé de corriger la fonction EAW sqMMFixedRisk en la remplaçant par ma propre fonction que je présente ci-dessous :

//------ sqMMFixedRisk corrigé par Riccardo

double sqMMFixedRisk (int orderMagicNumber, int orderType)
  {
   
   double LotSize=0 ;
  
   double _riskInPercent = RiskPercent ;
   double _maximumLots = 5.0 ;
   
   double slSize = sqMMGetOrderStopLossDistance(orderMagicNumber, orderType) * gPointPow ;


   double riskPerTrade=AccountBalance() *(_riskInPercent/100) ;
   
  
   if(slSize 0 && TickValue>0)
     {
      
      LotSize = MarketInfo(Symbol(),MODE_TICKSIZE) * riskPerTrade / (slSize * TickValue * MarketInfo(Symbol(),MODE_POINT) ) ;

      int err=GetLastError() ;
      if(err==4013)
        { //ERR_ZERO_DIVIDE
         Verbose("Err : division par zéro : StopLoss :",slSize," TickValue :",TickValue," LotSize :",LotSize) ;
         return(-1) ;
        }
     }

//--- Gestion des MAXLOT et MINLOT
   double Smallest_Lot = MarketInfo(Symbol(), MODE_MINLOT) ;
   double Largest_Lot = MarketInfo(Symbol(), MODE_MAXLOT) ;

   si (LotSize Largest_Lot) LotSize = Largest_Lot ;

   if(LotSize > _maximumLots) {
      LotSize = _maximumLots ;
   }
//--------------------------------------------



//--- LotSize arrondi en fonction du courtier LOTSTEP
   if(MarketInfo(Symbol(),MODE_LOTSTEP)==1)
     {
      LotSize=NormalizeDouble(LotSize,0) ;
     }
   if(MarketInfo(Symbol(),MODE_LOTSTEP)==0.1)
     {
      LotSize=NormalizeDouble(LotSize,1) ;
     }
   if(MarketInfo(Symbol(),MODE_LOTSTEP)==0.01)
     {
      LotSize=NormalizeDouble(LotSize,2) ;
     }
   if(MarketInfo(Symbol(),MODE_LOTSTEP)==0.001)
     {
      LotSize=NormalizeDouble(LotSize,3) ;
     }
//--------------------------------------------

   return (LotSize) ;

  }
//--------------------------------------------------------------------

En l'utilisant, vous pouvez également éviter de définir le   Lots Décimaux  et le   Monnaie de base Taux de change  Les paramètres MM qui deviennent ininfluents.

0

geektrader

Customer, bbp_participant, community, 522 replies.

Visiter le profil

Il y a 9 ans #129667

SQ semble avoir des difficultés à dimensionner correctement les positions en fonction du StopLoss / de la devise de base du compte et de la paire négociée, car tous ces facteurs doivent être pris en compte pour calculer correctement la taille du lot à négocier. Pour vous aider, voici mon code que j'ai affiné et que j'utilise depuis 5 ans sur MT4. Il prend en compte le SL, la devise dans laquelle la paire est négociée et la devise dans laquelle le compte négocié est négocié afin que le % correct soit toujours perdu si un SL est atteint. Il vérifie également la taille de lot et la taille de pas de lot minimum et maximum autorisées ainsi que la marge requise et s'assure que la marge n'est utilisée que jusqu'à 73% lorsqu'un SL complet est atteint afin que vous ne soyez pas arrêté à cause d'une marge trop faible (ce qui serait de toute façon de l'overtrading fou). Peut-être que Mark peut l'adapter pour SQ.

 

Il vous suffit de lui transmettre le SL et le nombre maximum de transactions que vous ouvrez par la suite (je l'utilise pour calculer la moyenne et lorsque je ne veux perdre qu'un montant spécifique sur toutes ces transactions - pour les transactions directes, il vous suffit de lui transmettre "1") :

double GetLotSize(double TotalRiskPercentageAllTrades, double Stop_Loss, int MaximumTrades)
{
    int DigitsMulti = 1 ;

    si (Chiffres == 5 || Chiffres == 3)
        DigitsMulti = 10 ;

    Stop_Loss = Stop_Loss * DigitsMulti ;
    double divided_by = 0 ;
    double Lots = 0 ;

    if (TotalRiskPercentageAllTrades != 0)
    {
        double RiskBalance = AccountBalance() * (TotalRiskPercentageAllTrades / 100.0) ;
        if (MarketInfo(Symbol(), MODE_TICKSIZE) != 0 && Stop_Loss != 0)
            divided_by = MarketInfo(Symbol(), MODE_TICKVALUE) * (MarketInfo(Symbol(), MODE_POINT) / MarketInfo(Symbol(), MODE_TICKSIZE)) ;
        si (divided_by == 0)
            Print("Money Management Temporarily Disabled Due To Division By : ", divided_by) ;
        sinon
            Lots = RiskBalance / divided_by / Stop_Loss ;
    }

    Lots = Lots / MaximumTrades ;
    Lots = MathMax(Lots, MarketInfo(Symbol(), MODE_MINLOT)) ;
    Lots = MathMin(Lots, MarketInfo(Symbol(), MODE_MAXLOT)) ;
    si (MarketInfo(Symbol(), MODE_MARGINREQUIRED) != 0)
        Lots = MathMin(Lots, AccountEquity() / MarketInfo(Symbol(), MODE_MARGINREQUIRED) * 0.73) ;
    Lots = MathCeil(Lots / MarketInfo(Symbol(), MODE_LOTSTEP)) * MarketInfo(Symbol(), MODE_LOTSTEP) ;
    Lots = MathMax(Lots, MarketInfo(Symbol(), MODE_MINLOT)) ;

    return(Lots) ;
}


🚀 Unlock Your Edge in Automated Forex Strategy Development 🚀

Historical Forex Data Starting From 1987, 28 Pairs, M1, 99% Error-Free, Lifetime Free Updates

0

Julianrob

Client, bbp_participant, communauté, 54 réponses.

Visiter le profil

Il y a 9 ans #129673

Merci pour l'information.

 

J'ai découvert comment activer à la fois le risque de Money management % ou l'option de taille de lot fixe dans les variables lors du codage de l'EA. La solution simple que j'ai utilisée a été de créer une variable avec la valeur booléenne true/false et de l'appeler "UseRiskPercent"

 

J'ai ensuite une règle qui ouvre la transaction en utilisant le risque de gestion monétaire % uniquement si la variable UseRiskPercent est définie sur TRUE. Une deuxième règle est un clone de la première et indique que si UseRiskPercent est défini sur false, il faut utiliser une taille de lot fixe pour la transaction.

 

Julien

0

Affichage de 5 réponses de 1 à 5 (sur un total de 5)