Ne fermez que les transactions rentables, à l'objectif de profit.

 

Bonjour, je teste cette ea et je pense qu'il est très utile de fermer les ordres, mais dans mon cas je ne veux pas fermer tous les ordres ouverts, je veux juste fermer seulement les ordres rentables.

J'ai changé la valeur "CloseProfitableTradesOnly" de false à true, mais les ordres continuent de se fermer à 1 usd. Et ce que je cherche, c'est de fermer seulement les ordres rentables quand, ensemble, ils atteignent 25 usd. Tous les ordres fermés au-dessus de 1 usd de profit.

Si vous avez une suggestion, je l'apprécie vraiment. Merci d'avance pour votre aide.

Voici l'application et le code :

//|$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
//|              Close 
//|   Last Updated 12-12-2006 10:00pm
//|$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
#define     NL    "\n" 

extern int    ProfitTarget     = 25;             // closes all orders once Float hits this $ amount
extern bool   CloseAllNow      = false;          // closes all orders now
extern bool   CloseProfitableTradesOnly = false; // closes only profitable trades
extern double ProftableTradeAmount      = 1;     // Only trades above this amount close out
extern bool   ClosePendingOnly = false;          // closes pending orders only
extern bool   UseAlerts        = false;

//+-------------+
//| Custom init |
//|-------------+
int init()
  {

  }

//+----------------+
//| Custom DE-init |
//+----------------+
int deinit()
  {

  }

//+------------------------------------------------------------------------+
//| Closes everything
//+------------------------------------------------------------------------+
void CloseAll()
{
   int i;
   bool result = false;

   while(OrdersTotal()>0)
   {
      // Close open positions first to lock in profit/loss
      for(i=OrdersTotal()-1;i>=0;i--)
      {
         if(OrderSelect(i, SELECT_BY_POS)==false) continue;

         result = false;
         if ( OrderType() == OP_BUY)  result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 15, Red );
         if ( OrderType() == OP_SELL)  result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), 15, Red );
         if (UseAlerts) PlaySound("alert.wav");
      }
      for(i=OrdersTotal()-1;i>=0;i--)
      {
         if(OrderSelect(i, SELECT_BY_POS)==false) continue;

         result = false;
         if ( OrderType()== OP_BUYSTOP)  result = OrderDelete( OrderTicket() );
         if ( OrderType()== OP_SELLSTOP)  result = OrderDelete( OrderTicket() );
         if ( OrderType()== OP_BUYLIMIT)  result = OrderDelete( OrderTicket() );
         if ( OrderType()== OP_SELLLIMIT)  result = OrderDelete( OrderTicket() );
         if (UseAlerts) PlaySound("alert.wav");
      }
      Sleep(1000);
   }
}
   
//+------------------------------------------------------------------------+
//| cancels all orders that are in profit
//+------------------------------------------------------------------------+
void CloseAllinProfit()
{
  for(int i=OrdersTotal()-1;i>=0;i--)
 {
    OrderSelect(i, SELECT_BY_POS);
    bool result = false;
        if ( OrderType() == OP_BUY && OrderProfit()+OrderSwap()>ProftableTradeAmount)  result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 5, Red );
        if ( OrderType() == OP_SELL && OrderProfit()+OrderSwap()>ProftableTradeAmount)  result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), 5, Red );
        if (UseAlerts) PlaySound("alert.wav");
 }
  return; 
}

//+------------------------------------------------------------------------+
//| cancels all pending orders 
//+------------------------------------------------------------------------+
void ClosePendingOrdersOnly()
{
  for(int i=OrdersTotal()-1;i>=0;i--)
 {
    OrderSelect(i, SELECT_BY_POS);
    bool result = false;
        if ( OrderType()== OP_BUYSTOP)   result = OrderDelete( OrderTicket() );
        if ( OrderType()== OP_SELLSTOP)  result = OrderDelete( OrderTicket() );
  }
  return; 
  }

//+-----------+
//| Main      |
//+-----------+
int start()
  {
   int      OrdersBUY;
   int      OrdersSELL;
   double   BuyLots, SellLots, BuyProfit, SellProfit;

//+------------------------------------------------------------------+
//  Determine last order price                                       |
//-------------------------------------------------------------------+
      for(int i=0;i<OrdersTotal();i++)
      {
         if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) continue;
         if(OrderType()==OP_BUY)  
         {
            OrdersBUY++;
            BuyLots += OrderLots();
            BuyProfit += OrderProfit() + OrderCommission() + OrderSwap();
         }
         if(OrderType()==OP_SELL) 
         {
            OrdersSELL++;
            SellLots += OrderLots();
            SellProfit += OrderProfit() + OrderCommission() + OrderSwap();
         }
      }               
   
    if(CloseAllNow) CloseAll();
    
    if(CloseProfitableTradesOnly) CloseAllinProfit();
    
    if(BuyProfit+SellProfit >= ProfitTarget) CloseAll(); 

    if(ClosePendingOnly) ClosePendingOrdersOnly();
       
   
   Comment("                            Comments Last Update 12-12-2006 10:00pm", NL,
           "                            Buys    ", OrdersBUY, NL,
           "                            BuyLots        ", BuyLots, NL,
           "                            Sells    ", OrdersSELL, NL,
           "                            SellLots        ", SellLots, NL,
           "                            Balance ", AccountBalance(), NL,
           "                            Equity        ", AccountEquity(), NL,
           "                            Margin              ", AccountMargin(), NL,
           "                            MarginPercent        ", MathRound((AccountEquity()/AccountMargin())*100), NL,
           "                            Current Time is  ",TimeHour(CurTime()),":",TimeMinute(CurTime()),".",TimeSeconds(CurTime()));
 } // start()

 


 
if((BuyProfit+SellProfit >= ProfitTarget)  && CloseProfitableTradesOnly) CloseAllinProfit();
 
af1:

Bonjour, je teste cette ea et je pense qu'il est très utile de fermer les ordres, mais dans mon cas je ne veux pas fermer tous les ordres ouverts, je veux juste fermer seulement les ordres rentables.

J'ai changé la valeur "CloseProfitableTradesOnly" de false à true, mais les ordres continuent de se fermer à 1 usd. Et ce que je cherche, c'est de fermer seulement les ordres rentables quand, ensemble, ils atteignent 25 usd. Tous les ordres fermés au-dessus de 1 usd de profit.


Je suppose que vous n'avez pas écrit ce code . . .

    if(CloseAllNow) CloseAll();
    
    if(CloseProfitableTradesOnly) CloseAllinProfit();
    
    if(BuyProfit+SellProfit >= ProfitTarget) CloseAll(); 

    if(ClosePendingOnly) ClosePendingOrdersOnly();

... mais vous devriez être capable de le lire.

Vous avez changé la valeur de "CloseProfitableTradesOnly" de false à true, donc si vous regardez au-dessus, CloseAllinProfit() est appelé... indépendamment du profit total.

Essayez ce changement :

    if(CloseAllNow) CloseAll();
    
    if(CloseProfitableTradesOnly && ProfitTarget == 0.0) CloseAllinProfit();
    
    if(BuyProfit+SellProfit >= ProfitTarget && !CloseProfitableTradesOnly) CloseAll(); 

    if(CloseProfitableTradesOnly && BuyProfit+SellProfit >= ProfitTarget) CloseAllinProfit();

    if(ClosePendingOnly) ClosePendingOrdersOnly();
 

Bonjour Raptor, merci pour votre réponse.

Je n'ai pas écrit ce code, j'ai juste changé la valeur de l'entrée "CloseProfitableTradesOnly" de false à true, comme ceci :

J'essaie avec vos changements mais l'ea ne ferme toujours pas à l'objectif de profit, (dans ce cas 25 usd.)


Dois-je changer de 0.0 à 25.0 dans le code aussi ?

if(CloseProfitableTradesOnly && ProfitTarget == 0.0) CloseAllinProfit();
 
af1:

Bonjour Raptor, merci pour votre réponse.

Je n'ai pas écrit ce code, j'ai juste changé la valeur de l'entrée "CloseProfitableTradesOnly" de false à true, comme ceci :

J'essaie avec vos changements mais l'ea ne ferme toujours pas à l'objectif de profit, (dans ce cas 25 usd.)


Dois-je aussi changer de 0.0 à 25.0 dans le code ?


Non, cette ligne devrait faire ce que vous voulez, êtes-vous sûr d'avoir fait TOUTES les modifications ?

    if(CloseProfitableTradesOnly && BuyProfit+SellProfit >= ProfitTarget) CloseAllinProfit();
 
J'ai changé de ceci
if(CloseAllNow) CloseAll();
    
if(CloseProfitableTradesOnly) CloseAllinProfit();
    
if(BuyProfit+SellProfit >= ProfitTarget) CloseAll(); 

if(ClosePendingOnly) ClosePendingOrdersOnly();

A ceci :

if(CloseAllNow) CloseAll();
    
if(CloseProfitableTradesOnly && ProfitTarget == 0.0) CloseAllinProfit();
    
if(BuyProfit+SellProfit >= ProfitTarget && !CloseProfitableTradesOnly) CloseAll(); 

if(CloseProfitableTradesOnly && BuyProfit+SellProfit >= ProfitTarget) CloseAllinProfit();

if(ClosePendingOnly) ClosePendingOrdersOnly();


Et l'entrée "CloseProfitableTradesOnly" de false, à true.


Mais ne ferme pas. Qu'est-ce que ça pourrait être d'autre ?

 
af1:
J'ai changé de ceci

A ceci :


Et l'entrée "CloseProfitableTradesOnly" de false, à true.


Mais ne ferme pas. Qu'est-ce que ça pourrait être d'autre ?

Peut-être que votre bénéfice total est inférieur à 25.0
 
RaptorUK:
Peut-être que votre bénéfice total est inférieur à 25.0


Si c'est moins de 25, alors il faut fermer encore plus vite.

 
af1:


Si le bénéfice est inférieur à 25, la clôture doit être encore plus rapide.

Non, le bénéfice doit être supérieur ou égal à 25.0 pour que la clôture ait lieu... .

if(CloseProfitableTradesOnly && BuyProfit+SellProfit >= ProfitTarget) CloseAllinProfit();
 
RaptorUK:

Non, le bénéfice doit être supérieur ou égal à 25.0 pour que la fermeture soit effective....


Voici un exemple Raptor. J'ai 4 ordres avec 97.9 de profit. Donc, si mon objectif de profit est de 25, et que la condition est "CloseProfitableTradesOnly" true, alors ces 4 ordres devraient être fermés. Mais aucun ordre n'est fermé.

 
af1:


Voici un exemple Raptor. J'ai 4 ordres avec 97.9 de profit. Donc si mon objectif de profit est de 25, et que la condition est "CloseProfitableTradesOnly" true, alors ces 4 ordres devraient être fermés. Mais aucun ordre n'est fermé.

Non, le profit total doit être supérieur ou égal à 25.0, le vôtre est de -59.80.
Raison: