Schließen Sie nur gewinnbringende Trades mit Gewinnziel

 

Hallo, ich teste diese ea und ich denke, es ist sehr nützlich, um Aufträge zu schließen, aber in meinem Fall möchte ich nicht alle offenen Aufträge zu schließen, ich möchte nur die profitable Aufträge zu schließen.

Ich habe den Wert "CloseProfitableTradesOnly" von false auf true geändert, aber die Aufträge schließen weiterhin bei 1 usd. Und was Im suchen ist, um nur profitable Aufträge zu schließen, wenn, zusammen, erreicht 25 usd. Alle geschlossenen Aufträge über 1 usd der Gewinn.

Wenn Sie einen Vorschlag haben, bin ich wirklich dankbar. Vielen Dank im Voraus für Ihre Hilfe.

Hier ist die ea und 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:

Hallo, ich teste diese ea und ich denke, es ist sehr nützlich, um Aufträge zu schließen, aber in meinem Fall möchte ich nicht alle offenen Aufträge zu schließen, ich möchte nur die profitable Aufträge zu schließen.

Ich habe den Wert "CloseProfitableTradesOnly" von false auf true geändert, aber die Aufträge schließen weiterhin bei 1 usd. Und was Im suchen ist, um nur profitable Aufträge zu schließen, wenn, zusammen, erreicht 25 usd. Alle geschlossenen Aufträge über 1 usd des Gewinns.


Ich schätze, Sie haben diesen Code nicht geschrieben . . .

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

    if(ClosePendingOnly) ClosePendingOrdersOnly();

. . aber Sie sollten sie lesen können.

Sie haben den Wert "CloseProfitableTradesOnly" von false auf true geändert, so dass, wenn Sie oben nachsehen, CloseAllinProfit() aufgerufen wird . . . unabhängig vom Gesamtgewinn.

Versuchen Sie diese Änderung:

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

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

    if(ClosePendingOnly) ClosePendingOrdersOnly();
 

Hallo Raptor, danke für deine Antwort.

Ich habe diesen Code nicht geschrieben, ich ändere nur den "CloseProfitableTradesOnly"-Eingabewert von false auf true, wie diese:

Ich versuche, mit Ihren Änderungen, aber immer noch die ea nicht schließen am Gewinnziel, (in diesem Fall 25 usd.)


Muss ich im Code auch von 0.0 auf 25.0 ändern?

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

Hallo Raptor, danke für deine Antwort.

Ich habe diesen Code nicht geschrieben, ich ändere nur den "CloseProfitableTradesOnly"-Eingabewert von false auf true, wie diese:

Ich versuche, mit Ihren Änderungen, aber immer noch die ea nicht schließen am Gewinnziel, (in diesem Fall 25 usd.)


Muss ich im Code auch von 0,0 auf 25,0 ändern?


Nein, diese Zeile sollte tun, was Sie wollen, sind Sie sicher, dass Sie ALLE Änderungen vorgenommen haben?

    if(CloseProfitableTradesOnly && BuyProfit+SellProfit >= ProfitTarget) CloseAllinProfit();
 
Ich habe Folgendes geändert
if(CloseAllNow) CloseAll();
    
if(CloseProfitableTradesOnly) CloseAllinProfit();
    
if(BuyProfit+SellProfit >= ProfitTarget) CloseAll(); 

if(ClosePendingOnly) ClosePendingOrdersOnly();

Zu diesem:

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

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

if(ClosePendingOnly) ClosePendingOrdersOnly();


Und die Eingabe "CloseProfitableTradesOnly" von false, auf true.


Aber nicht schliessen. Was könnte es sonst sein?

 
af1:
Ich habe Folgendes geändert

Zu diesem:


Und die Eingabe "CloseProfitableTradesOnly" von false, auf true.


Aber nicht schliessen. Was könnte es sonst sein?

Vielleicht ist Ihr Gesamtgewinn kleiner als 25,0
 
RaptorUK:
Vielleicht ist Ihr Gesamtgewinn kleiner als 25,0


Wenn es weniger als 25 war, dann sollten Sie noch schneller schließen.

 
af1:


Wenn er kleiner als 25 ist, sollte er noch schneller schließen.

Nein, der Gewinn muss größer oder gleich 25,0 sein, bevor er geschlossen wird.

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

Nein, der Gewinn muss größer oder gleich 25,0 sein, bevor er geschlossen wird.


Hier ist ein Beispiel für Raptor. Ich habe 4 Aufträge mit einem Gewinn von 97,9. Wenn also mein Gewinnziel 25 ist und die Bedingung "CloseProfitableTradesOnly" wahr ist, dann sollten diese 4 Aufträge geschlossen werden. Aber es wird keine einzige Order geschlossen.

 
af1:


Hier ist ein Beispiel Raptor. Ich habe 4 Aufträge mit einem Gewinn von 97,9. Wenn mein Gewinnziel 25 ist und die Bedingung "CloseProfitableTradesOnly" wahr ist, dann sollten diese 4 Aufträge geschlossen werden. Aber es wird keine einzige Order geschlossen.

Nein, der Gesamtgewinn muss größer als gleich 25,0 sein, Ihrer ist -59,80