Accueil Trading Systématique Publication

Fermez toutes vos positions lorsque le drawdown atteint un pourcentage spécifique - Système de Trading pour MetaTrader 4

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

Salut les traders ! Aujourd'hui, je vais vous présenter un code très utile qui vous permettra de fermer toutes vos commandes ouvertes dès que le drawdown atteint un certain pourcentage de votre solde de compte.

Tout ce que vous avez à faire, c'est d'entrer le numéro magique de vos ordres (mettez 0 pour contrôler tous les ordres) et de définir le pourcentage maximum de drawdown qui déclenchera la fermeture des ordres. Simple, non ?

Pour utiliser ce code, il vous suffit d'appeler la fonction DD_close.

Vous trouverez ci-joint le fichier d'en-tête contenant ce code ainsi que le système de trading associé.

// Pour utiliser cette option, il vous suffit d'appeler la fonction : ( DD_close ) 
//+------------------------------------------------------------------+
//|                          Portée globale                            |
//+------------------------------------------------------------------+
bool Close_All_V;
//+------------------------------------------------------------------+
//|                         Fonction principale                            |
//+------------------------------------------------------------------+
// DD:               Voici le pourcentage DD, 100 signifie ne jamais fermer d'ordre.
// Magic_Number:     Le numéro magique de votre EA, entrez 0 pour contrôler tous les ordres.
void DD_close(int DD,int Magic_Number)
  {
   if(DD(Magic_Number)>=DD)
      Close_All_V=true;
   if(Close_All_V)
      Close_All(Magic_Number);
  }
//+------------------------------------------------------------------+
//|                          Vérifier la fermeture                             |
//+------------------------------------------------------------------+
void Check_Close(int Check_Number) // vérifier la fermeture de l'ordre
  {
   if(Check_Number<0) Print("Échec de la fermeture de l'ordre avec l'erreur: ",ErrorDescription(GetLastError()));
   else Close_All_V=false;
  }
//+------------------------------------------------------------------+
//|                          Fermer tout                               |
//+------------------------------------------------------------------+
void Close_All(int M_N)
  {
   int Loop=0;
   for(int i=0; Loop<OrdersTotal(); i++)
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {
       Loop++;
       if(OrderSymbol()==Symbol())
        if(OrderMagicNumber()==M_N || OrderMagicNumber()==0)
          {
           if(OrderType()==OP_BUY)
              Check_Close(OrderClose(OrderTicket(),OrderLots(),Bid,100,clrNONE));
           if(OrderType()==OP_SELL)
              Check_Close(OrderClose(OrderTicket(),OrderLots(),Ask,100,clrNONE));
          }
      }
  }
//+------------------------------------------------------------------+
//|                          Calculer la perte                          |
//+------------------------------------------------------------------+
double Loss(int M_N)
  {
   double re=0;
   int Loop=0;
   for(int i=0; Loop<OrdersTotal(); i++)
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {
         Loop++;
         if(OrderSymbol()==Symbol())
            if(OrderMagicNumber()==M_N || OrderMagicNumber()==0)
               re=re+OrderProfit();
        }
   return re * -1;
  }
//+------------------------------------------------------------------+
//|                  Calculer le pourcentage de drawdown           |
//+------------------------------------------------------------------+
double DD(int M_N)
  {
   return ( 100 / AccountBalance ( ) ) * Loss ( M_N );
  }
//+------------------------------------------------------------------+

Articles connexes

Commentaire (0)