Accueil Trading Systématique Publication

Optimisez votre Take Profit en fonction de vos profits actuels sur MetaTrader 4

Pièce jointe
47010.zip (1.03 KB, Télécharger 0 fois)

Introduction

La plupart des robots de trading (EAs) ont tendance à fermer les commandes en fonction d'une distance en pips par rapport au prix d'achat. Cependant, le code utilisé par EA Perceptron se base principalement sur le profit actuel. Cette approche vous permet de gérer facilement le take profit avec plusieurs positions ouvertes, en surveillant le profit total actuel en fonction du numéro magique, au cas où vous utiliseriez plusieurs instances de robots ou différents EAs simultanément. Ajoutez-moi à vos amis et suivez mon fil d'actualité pour être informé des dernières nouvelles !

Utiliser ce code peut également avoir un impact positif sur certains problèmes qui peuvent survenir lors de l'utilisation d'un take profit basé sur les pips. Par exemple, un take profit basé sur les pips pourrait varier en fonction du slippage de votre courtier, limitant ainsi les profits. En utilisant un code basé sur le profit actuel, vous pouvez éviter ce problème et avoir plus de contrôle sur vos trades.

Si vous souhaitez en savoir plus sur la manière de configurer un take profit en fonction du profit actuel, vous pouvez utiliser le code de l'EA SwingBot comme référence.


Total des ordres

Commençons par le code qui calcule le nombre total d'ordres ouverts avec le même numéro magique.

Le numéro magique est un identifiant unique attribué à un ordre par le trader ou un EA.

Le code initialise une variable total_orders à zéro. Ensuite, il parcourt tous les ordres ouverts à l'aide d'une boucle for et sélectionne chaque ordre en utilisant la fonction OrderSelect(). Si un ordre est sélectionné avec succès, il incrémente la variable total_orders de un.

//----------------- 
   int total_orders = 0;
   for(int i = 0; i < OrdersTotal(); i++)
     {
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
        {
         if(OrderMagicNumber() == MagicNumber)
         {
         total_orders++;
        }
        }
     }


Calculer le profit actuel

Le code initialise deux variables : ProfittoMinimo et Profit. La variable ProfittoMinimo est utilisée pour activer le take profit à ce niveau, la valeur est exprimée dans la devise du compte. La variable Profit est utilisée pour accumuler le profit actuel de toutes les positions ouvertes ayant le même numéro magique. La variable StopLoss est utilisée pour le stop loss.

Le code utilise une boucle for pour itérer à travers toutes les positions ouvertes en utilisant la fonction OrdersTotal(). Pour chaque position ouverte, l'ordre correspondant est sélectionné avec la fonction OrderSelect(). Si l'ordre est sélectionné avec succès et a le même numéro magique, le profit de l'ordre est ajouté à la variable Profit.

      double ProfittoMinimo = 3; // profit cible
      double Profit = 0; // profit actuel
      

      for(int i=0; i<OrdersTotal(); i++)
        {
         if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
           {
            if(OrderMagicNumber() == MagicNumber) // En cas de plusieurs EAs, vous pouvez supprimer le filtre MagicNumber pour maintenir la fonction sur l'ensemble des ordres.
              {
               Profit += OrderProfit();
              }
        }
      }


Le profit minimum peut être configuré comme une variable externe dans les options de l'EA :

Profit Minimum


Fermeture des positions si le profit est atteint

Le code utilise une boucle for pour itérer à travers tous les ordres ouverts en utilisant la fonction OrdersTotal(). La boucle commence par le dernier ordre et remonte jusqu'au premier ordre. Pour chaque ordre, la transaction correspondante est sélectionnée avec la fonction OrderSelect().

Si la transaction sélectionnée a le même symbole que le graphique actuel, est de type OP_BUY, et a le même numéro magique que celui spécifié dans le code, elle vérifie si le Profit de la transaction est supérieur ou égal à ProfittoMinimo. Si c'est le cas, elle ferme la transaction au prix de vente en utilisant la fonction OrderClose() et imprime un message indiquant que l'ordre d'achat a été fermé.

De la même manière, si la transaction sélectionnée a le même symbole que le graphique actuel, est de type OP_SELL, et a le même numéro magique que celui spécifié dans le code, elle vérifie si le Profit de la transaction est supérieur ou égal à ProfittoMinimo. Si c'est le cas, elle ferme la transaction au prix d'achat en utilisant la fonction OrderClose() et imprime un message indiquant que l'ordre de vente a été fermé.

      for(int e = OrdersTotal() - 1; e >= 0; e--)
        {
         if(OrderSelect(e, SELECT_BY_POS, MODE_TRADES))
           {
            if(OrderSymbol() == Symbol() && OrderType() == OP_BUY && OrderMagicNumber() == MagicNumber) // L'ordre est modifié uniquement si le MagicNumber correspond à celui de l'ordre en cours.
              {
               if(Profit >= ProfittoMinimo)
                 {
                  OrderClose(OrderTicket(), OrderLots(), ND(OrderClosePrice()), 3); // Prix de vente
                  Print("Ordre d'achat fermé", Profit, " - Stoploss minimum : ",MarketInfo(Symbol(), MODE_STOPLEVEL));
                 }
          }

            if(OrderSymbol() == Symbol() && OrderType() == OP_SELL && OrderMagicNumber() == MagicNumber)
              {
               if(Profit >= ProfittoMinimo)
                 {
                  OrderClose(OrderTicket(), OrderLots(), ND(OrderClosePrice()), 3); // Prix d'achat
                  Print("Ordre de vente fermé", Profit, " - Stoploss minimum : ",MarketInfo(Symbol(), MODE_STOPLEVEL));
                 }
          }
        }
        }


Conclusion

Ce code pourrait être utile pour toutes les stratégies de fermeture de positions basées sur le take profit, mais il pourrait également être combiné avec un trailing stop basé sur l'augmentation du profit actuel. Le système est également utile en cas de plusieurs Experts Advisors. Si vous excluez la condition if sur le MagicNumber, vous pouvez définir des niveaux de take profit généraux pour contrôler simultanément toutes les positions ouvertes de tous les EAs actifs.



    Articles connexes

    Commentaire (0)