Comment puis-je régler le TP de moins de 5 pips ? - page 5

 
Vous voulez dire par là ?
extern double TPforBuys=1;
extern double TPforSells=1;
extern double TimeForEA=120;

//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{

return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{

return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
for(int a=OrdersTotal()-1;a>=0;a--)

double TPbuy = TPforBuys / 10000;
if( OrderSelect(a,SELECT_BY_POS, MODE_TRADES) && 
      OrderType()==OP_BUY && OrderSymbol()==Symbol() )
double TPB=OrderOpenPrice()+ TPbuy;

// Close Buys
if(Bid>TPB)
{
   
      if( OrderSelect(a,SELECT_BY_POS, MODE_TRADES) && 
      OrderType()==OP_BUY && TimeCurrent()-OrderOpenTime() <= (TimeForEA * 60)  &&
      OrderSymbol()==Symbol() )
         if( !OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 1000, White) )
            Print("OrderClose failed, error: ", GetLastError());
            }



double TPsell = TPforSells / 10000;
if( OrderSelect(a,SELECT_BY_POS, MODE_TRADES) && 
      OrderType()==OP_SELL && OrderSymbol()==Symbol() )
double TPS=OrderOpenPrice()- TPsell;



// Close Sells
if(Ask<TPS)
{
   
      if( OrderSelect(a,SELECT_BY_POS, MODE_TRADES) && 
      OrderType()==OP_SELL &&  TimeCurrent()-OrderOpenTime() <= (TimeForEA * 60) &&
      OrderSymbol()==Symbol() )
         if( !OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 1000, White) )
            Print("OrderClose failed, error: ", GetLastError());
            }


return(0);
}
 
ats:
Vous voulez dire par là ?
Je ne sais pas... Est-ce que ça fait ce que vous voulez ?
 
RaptorUK:
Je ne sais pas... Est-ce que ça fait ce que tu veux ?
Non, ça ne marche pas ! Ce n'est pas correct, encore une fois !
 
Peut-être pourriez-vous expliquer ce que vous essayez de faire exactement ? dans mon intérêt, dans celuideonewithzachy et, bien sûr, dans le vôtre.
 

Bien sûr ! Désolé ! Je n'y ai pas pensé !

Nous avons fait cet EA pour le scalping ! L'EA doit fermer chaque ordre de scalping avec 1 pip de profit ! Afin de ne pas fermer les ordres à long terme, nous avons utilisé la commande OrderOpenTime(). Les ordres scalping sont définis manuellement ! Il agit comme un TP mais seulement avec 1 pip de profit !

Merci à vous

 
Ah je vois, vous ne voulez pas que l'EA ferme les ordres non scalping, à court terme....
 
RaptorUK:
Ah je vois, vous ne voulez pas que l'EA ferme les ordres non scalping, à court terme....
Exactement !
 

OK, quelques commentaires...

1. Votre boucle ne fait pratiquement rien, vous devez mettre entre accolades, { } ce que vous voulez faire dans la boucle ....

2. Vous avez 2 appels à OrderSelect(), si vous mettez tout dans la boucle vous n'en aurez besoin que d'un seul ....

3. la section close d'achat ne doit être exécutée que pour les ordres d'achat, la section close de vente ne doit être exécutée que pour les ordres de vente.

4. Votre profit de 1 pip est codé en dur pour les paires à 4 chiffres, donc il ne fonctionnera pas pour des paires comme USDJPY.

 

Peut-être quelque chose comme ça...

extern double TPforBuys=1;
extern double TPforSells=1;
extern double TimeForEA=120;

//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{

return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{

return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
for(int a=OrdersTotal()-1;a>=0;a--)
   {
   double TPbuy = TPforBuys / 10000;
   
   if( OrderSelect(a,SELECT_BY_POS, MODE_TRADES) && 
   OrderType()==OP_BUY && OrderSymbol()==Symbol() )  // order type and Symbol checked here
      {
      double TPB=OrderOpenPrice()+ TPbuy;
      
      // Close Buys
      if(Bid>TPB)
         {
         
         if( TimeCurrent()-OrderOpenTime() <= (TimeForEA * 60) )  // no need to check type and symbol here
            if( !OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 1000, White) )
               {
               Print("OrderClose failed, error: ", GetLastError());
               }
            else continue;        // if order has been closed move to the next position, no need to check if it's a SELL
         } // end of if(Bid>TPB)
      } // end of if( OrderSelect(a 
      
   double TPsell = TPforSells / 10000;
   
   if( OrderSelect(a,SELECT_BY_POS, MODE_TRADES) && 
   OrderType()==OP_SELL && OrderSymbol()==Symbol() )
      {
      double TPS=OrderOpenPrice()- TPsell;

      // Close Sells
      if(Ask<TPS)
         {
   
         if( TimeCurrent()-OrderOpenTime() <= (TimeForEA * 60) )
            if( !OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 1000, White) )
               Print("OrderClose failed, error: ", GetLastError());
            
         } // end of if(Ask<TPS)
      } // end of if( OrderSelect(a
   } // end of for(int a=OrdersTotal()

return(0);
}
 
RaptorUK:

Peut-être quelque chose comme ça...

Au fait, je n'ai pas compilé ni testé ce code... . .