Questions des débutants MQL5 MT5 MetaTrader 5 - page 672

 
fxsaber:
Merci ! !!
 

J'écris un EA qui fonctionne sur la base d'une martingale.

Comment puis-je faire en sorte qu'il ferme tous les ordres qu'il a ouverts lorsque la perte maximale autorisée en pips sur une paire de devises est atteinte ?

 
RichLux:

J'écris un EA qui fonctionne sur la base d'une martingale.

Comment puis-je faire en sorte qu'il ferme tous les ordres qu'il a ouverts lorsque la perte maximale autorisée en pips sur une paire de devises est atteinte ?


double GetProfitinCurrency(string order_symbol="",int order_type=-1,int order_magic=-1)
  {
   double profit=0;
   int    i,k=OrdersTotal();

   if(order_symbol=="0") order_symbol=Symbol();
   for(i=0; i<k; i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if((OrderSymbol()==order_symbol || order_symbol=="") && (order_type<0 || OrderType()==order_type))
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL)
              {
               if(order_magic<0 || OrderMagicNumber()==order_magic)
                 {
                  profit+=OrderProfit()+OrderCommission()+OrderSwap();
                 }
              }
           }
        }
     }
   return(profit);
  }


la fonction renvoie les profits dans les positions ouvertes, peut être filtrée par symbole, type, magik

Ensuite, vous fermez toutes les positions

void CPD(string order_symbol="",int order_type=-1,int order_magic=-1)
  {
   int i,k=OrdersTotal();

   if(order_symbol=="0") order_symbol=Symbol();
   for(i=k-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if((OrderSymbol()==order_symbol || order_symbol=="") && (order_type<0 || OrderType()==order_type))
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL)
              {
               if(order_magic<0 || OrderMagicNumber()==order_magic) OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),1,CLR_GREEN);
              }
           }
        }
     }
  }
 
Vladislav Andruschenko:

...

la fonction renvoie les profits en poses d'octobre, peut être filtrée par symbole, type, magik

Puis fermer toutes les positions

Merci, mais je suis intéressé par la fermeture sur perte. Comment cela peut-il être mis en œuvre ?
 

Je veux dire, je vous ai donné ce qui précède,

Le profit est donc un terme générique.

-20 est -20

if(GetProfitinCurrency(Symbol(),-1,-1)<-20)CPD(Symbol(),-1,-1)

 
Vladislav Andruschenko:

double GetProfitinCurrency(string order_symbol="",int order_type=-1,int order_magic=-1)
  {
   double profit=0;
   int    i,k=OrdersTotal();

   if(order_symbol=="0") order_symbol=Symbol();
   for(i=0; i<k; i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if((OrderSymbol()==order_symbol || order_symbol=="") && (order_type<0 || OrderType()==order_type))
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL)
              {
               if(order_magic<0 || OrderMagicNumber()==order_magic)
                 {
                  profit+=OrderProfit()+OrderCommission()+OrderSwap();
                 }
              }
           }
        }
     }
   return(profit);
  }

Merci, maintenant je comprends.

Ce qui n'est toujours pas clair dans le code est :(order_type<0||OrderType()==order_type) Ceci peut être lu comme "et ordre de vendre ou d'acheter" ?

 
RichLux:

ouiorder_type= OP_BUY OP_SELL -1

 

Le compilateur se plaint également deClosePosBySelect.

Cette fonction doit-elle être écrite séparément ?

 
Les commentaires qui ne sont pas pertinents pour ce sujet ont été déplacés vers "Mettre l'heure actuelle sur le graphique".
 

Vladislav Andruschenko

RichLux:

Le compilateur se plaint également deClosePosBySelect.

Cette fonction doit-elle être écrite séparément ?

void CPD(string order_symbol="",int order_type=-1,int order_magic=-1)
  {
   int i,k=OrdersTotal();

   if(order_symbol=="0") order_symbol=Symbol();
   for(i=k-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if((OrderSymbol()==order_symbol || order_symbol=="") && (order_type<0 || OrderType()==order_type))
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL)
              {
               if(order_magic<0 || OrderMagicNumber()==order_magic) OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),1,CLR_GREEN);
              }
           }
        }
     }
  }
Raison: