Sell- und Buy-Profit-Closing-EA gesucht

 

Hallo zusammen,

gibt es schon einen existierenden EA, der alle Sell-Trades schließen kann, wenn ein definierter Geldbetrag oder ein definierter Gewinn in Prozent erreicht ist? Und der auch das gleiche mit den Buy-Trades machen kann?

Es gibt zwar schon einen "Closing by Profit-EA", aber der schliesst dann alle Trades und ist nicht unterteilt in Sell-oder Buy-Trades.

 
Danke für die Antwort, aber der Link führt nur zu einem puren Close-EA, das ist nicht das, was ich beschrieben habe. Ich suche eine "Close in Profit"-EA, der unterteilt ist in Close-Sell-Trades und Close-Buy-Trades.
 
Naja, aber da kann man sicherlich einen nehmen und etwas anpassen.
 

Als Programmierer stelle ich mir bei solchen Fragen immer selbst die Frage: Was soll der EA machen?

Was meinst du mit Trades? Eine pending Order (bspw. gesetzte und nicht gefüllte Limit-Order) oder eine offene Position?

Falls du pending Orders meinst: Hast Du irgendein kompliziertes Grid-System, welches Du handhaben willst? Könnte man das nicht sinnvoller mit der OCO-Funktion lösen?

 
 
Artep05:

Hallo zusammen,

gibt es schon einen existierenden EA, der alle Sell-Trades schließen kann, wenn ein definierter Geldbetrag oder ein definierter Gewinn in Prozent erreicht ist? Und der auch das gleiche mit den Buy-Trades machen kann?

Es gibt zwar schon einen "Closing by Profit-EA", aber der schliesst dann alle Trades und ist nicht unterteilt in Sell-oder Buy-Trades.

Hallo,

sowas findet man eigentlich nicht.

Und meistens wird ein Auftrag bei Freelance erteilt.

Nur Ihre Frage bezieht auf einen kleinen EA und daher eine kleine Hilfe von mir.


In Einstellungen von EA Orders setzen auf false stellen, wenn Sie nur Ihre Positionen managen möchten!

Hier kommt der Code: Kompilieren müssen Sie selbst.


//+------------------------------------------------------------------+
//|                                                  ProfitClose.mq5 |
//|                                  Copyright 2023, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2023, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"

#include <Trade/Trade.mqh>
#include <Trade/SymbolInfo.mqh>
CTrade m_trade;
CSymbolInfo m_symbol;
CPositionInfo  m_position;
CHistoryOrderInfo m_history;


//+------------------------------------------------------------------+
//|  Kleine Einstellungen                                            |
//+------------------------------------------------------------------+
input bool     OrdersSetzen = true;    // Orders setzen? (true/false))
input double   ProfitClose  = 1;       // Profit Close (Money)


datetime totalCandles; // Definieren wir Candles

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit() {

   totalCandles = iBars(_Symbol,PERIOD_CURRENT); // Wählen wir Period des Bares

   return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason) {
//---

}
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick() {
//---

// Damit man sieht, welcher Positionen im Plus sind .-)
   Comment("\nProfit Buy: "+DoubleToString(ProfitBuy(),2)+"\nProfit Sell: "+DoubleToString(ProfitSell(),2));

   double ask = SymbolInfoDouble(_Symbol,SYMBOL_ASK); // Rufen wir durch SymbolInfo ASK Preis ab
   double bid = SymbolInfoDouble(_Symbol,SYMBOL_BID); // Rufen wir durch SymbolInfo BID Preis ab

   ask = NormalizeDouble(ask,_Digits); // Normalisieren wir ASK Preis
   bid = NormalizeDouble(bid,_Digits); // Normalisieren wir BIS Preis

   int bars = iBars(_Symbol,PERIOD_CURRENT); // Bars in aktuellen Timeframe

// Damit nicht jeden Tick Positionen eröffnet werden
// Wurde es auf in aktuell eröffneten Timeframes passieren
// Beispiel in H1 nur ein mal in eine Stunde
   if(totalCandles != bars && OrdersSetzen == true) {
      totalCandles = bars;

      m_trade.Sell(0.01,_Symbol,bid,0,0,"");
      m_trade.Buy(0.01,_Symbol,ask,0,0,"");

   }


// Prüft nach Gewinn Buy Order
   if(ProfitBuy() >= ProfitClose) {
      ClosePositionBuy(); // Funktion Close Buy
   }
// Prüft nach Gewinn Sell Order
   if(ProfitSell() >= ProfitClose) {
      ClosePositionSell(); // Funktion Close Sell
   }



}// OnTickEnde


// Close Position Buy
void ClosePositionBuy() {

   int total_orders = 0;
   for(int i = PositionsTotal()-1; i >= 0; i--) {
      if(m_position.SelectByIndex(i))
         if(m_position.Symbol()== _Symbol) {
            total_orders++;
         }
   }

   for(int i=PositionsTotal()-1; i>=0; i--)
      if(m_position.SelectByIndex(i))
         if(m_position.Symbol()== _Symbol) { // Prüft nach Symbol
            if(m_position.PositionType()==POSITION_TYPE_BUY) {
               m_trade.PositionClose(m_position.Ticket());
            }
         }
}
// Close Position Sell
void ClosePositionSell() {
   int total_orders = 0;
   for(int i = PositionsTotal()-1; i >= 0; i--) {
      if(m_position.SelectByIndex(i))
         if(m_position.Symbol()== _Symbol) {
            total_orders++;
         }
   }

   for(int i=PositionsTotal()-1; i>=0; i--)
      if(m_position.SelectByIndex(i))
         if(m_position.Symbol()== _Symbol) { // Prüft nach Symbol
            if(m_position.PositionType()==POSITION_TYPE_SELL) {
               m_trade.PositionClose(m_position.Ticket());
            }
         }
}
//+------------------------------------------------------------------+
// Profit Buy Funktion
double ProfitBuy() {
   double pft=0;
   for(int i=PositionsTotal()-1; i>=0; i--) {
      ulong ticket=PositionGetTicket(i);
      if(ticket>0) {
         if(PositionGetString(POSITION_SYMBOL)==_Symbol) {
            if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY) {
               pft+=PositionGetDouble(POSITION_PROFIT);
            }
         }
      }
   }
   return(pft);
}
//+------------------------------------------------------------------+
// Profit SellFunktion
double ProfitSell() {
   double pft=0;
   for(int i=PositionsTotal()-1; i>=0; i--) {
      ulong ticket=PositionGetTicket(i);
      if(ticket>0) {
         if(PositionGetString(POSITION_SYMBOL)==_Symbol) {
            if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL) {
               pft+=PositionGetDouble(POSITION_PROFIT);
            }
         }
      }
   }
   return(pft);
}
//+------------------------------------------------------------------+

Habe ausprobiert und es funz.

Dieses EA ist Profitabel aber in realen Account nicht ausprobieren, weil Martingale ist eine gefährliche Sache!

Tipp: In W1 (Wochenchart) zu testen.

Gruß Igor

Igor

 
Igor Widiger #:

Hallo,

sowas findet man eigentlich nicht.

Und meistens wird ein Auftrag bei Freelance erteilt.

Nur Ihre Frage bezieht auf einen kleinen EA und daher eine kleine Hilfe von mir.


In Einstellungen von EA Orders setzen auf false stellen, wenn Sie nur Ihre Positionen managen möchten!

Hier kommt der Code: Kompilieren müssen Sie selbst.

Habe ausprobiert und es funz.

Dieses EA ist Profitabel aber in realen Account nicht ausprobieren, weil Martingale ist eine gefährliche Sache!

Tipp: In W1 (Wochenchart) zu testen.

Gruß Igor



Hallo Igor,

vielen Dank für Ihre Hilfe. Ich bekomme leider beim Kompilieren Fehlermeldungen (siehe Sreenshot) angezeigt, daher bitte ich Sie, mir Ihren Code direkt als EA anzufügen, das wäre sehr hilfreich.

Dateien:
s.JPG  30 kb
 
Artep05 #:

Hallo Igor,

vielen Dank für Ihre Hilfe. Ich bekomme leider beim Kompilieren Fehlermeldungen (siehe Sreenshot) angezeigt, daher bitte ich Sie, mir Ihren Code direkt als EA anzufügen, das wäre sehr hilfreich.

Ich möchte noch fragen, ob der EA für MT4 ist? Denn ich benutze aktuell nur den MT4.

Grund der Beschwerde: