Systemhandel 게시글

Take Profit Strategien: Wie du deinen Gewinn effektiv managen kannst

첨부파일
47010.zip (1.03 KB, 다운로드 0회)

Einleitung

Die meisten Trading-Bots schließen Positionen mit Take Profit basierend auf der Pip-Distanz zum Einstiegspreis. Aber der EA Perceptron setzt auf den aktuellen Gewinn. Diese Methode ermöglicht es dir, den Take Profit bei mehreren offenen Positionen viel einfacher zu verwalten, indem du den Gesamtgewinn basierend auf der Magic Number im Blick behältst – besonders nützlich, wenn du mehrere Bots oder verschiedene EAs gleichzeitig nutzt. Füge mich zu deinen Freunden hinzu und folge meinem Feed, um auf dem Laufenden zu bleiben!

Wenn du diese Methode anwendest, kannst du auch einige Probleme vermeiden, die auftreten können, wenn du einen Take Profit basierend auf Pips verwendest. Zum Beispiel könnte ein Pip-basierter Take Profit durch Slippage deines Brokers beeinträchtigt werden, was deine Gewinne limitiert. Mit einem Code, der auf dem aktuellen Gewinn basiert, hast du mehr Kontrolle über deine Trades und umgehst dieses Problem.

Wenn du mehr darüber erfahren möchtest, wie du einen Take Profit auf Basis des aktuellen Gewinns einrichten kannst, kannst du den Code des EA SwingBot als Referenz verwenden.


Gesamtanzahl der Positionen

Beginnen wir mit dem Code, der die Gesamtzahl der offenen Positionen mit derselben Magic Number berechnet.

Die Magic Number ist ein eindeutiger Identifikator, der einer Order vom Trader oder einem EA (Expert Advisor) zugewiesen wird.

Der Code initialisiert eine Variable total_orders mit Null. Dann durchläuft er alle offenen Positionen mit einer for Schleife und wählt jede Order mithilfe der OrderSelect() Funktion aus. Wenn eine Order erfolgreich ausgewählt wird, wird die Variable total_orders um eins erhöht.

//----------------- 
   int total_orders = 0;
   for(int i = 0; i < OrdersTotal(); i++)
     {
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
        {
        if(OrderMagicNumber() == MagicNumber)
         {
         total_orders++;
        }
        }
     }


Berechnung des aktuellen Gewinns

Der Code initialisiert zwei Variablen: ProfittoMinimo und Profit. Die Variable ProfittoMinimo wird verwendet, um den Take Profit auf diesem Level zu aktivieren; der Wert wird in der Kontowährung angegeben. Die Variable Profit dient dazu, den aktuellen Gewinn aller offenen Positionen mit derselben Magic Number zu sammeln. Die Variable StopLoss wird für den Stop Loss verwendet.

Der Code nutzt eine for Schleife, um alle offenen Positionen mit der OrdersTotal() Funktion zu durchlaufen. Für jede offene Position wird die entsprechende Order mit der OrderSelect() Funktion ausgewählt. Wenn die Order erfolgreich ausgewählt wurde und die gleiche Magic Number hat, wird der Gewinn der Order zur Variable Profit hinzugefügt.

      double ProfittoMinimo = 3; // Zielgewinn
      double Profit = 0; // aktueller Gewinn
      
      for(int i=0; i<OrdersTotal(); i++)
        {
         if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
           {
            if(OrderMagicNumber() == MagicNumber) // Bei mehreren EAs kannst du den MagicNumber-Filter entfernen, um die Funktion auf alle offenen Orders anzuwenden
              {
               Profit += OrderProfit();
              }
           }
        }


Der minimale Gewinn kann als externe Variable eingestellt und in den EA-Optionen konfiguriert werden:

Minimum Profit


Positionen schließen, wenn der Gewinn erreicht ist

Der Code verwendet eine for Schleife, um alle offenen Orders mit der OrdersTotal() Funktion zu durchlaufen. Die Schleife beginnt mit der letzten Order und geht zur ersten Order zurück. Für jede Order wird der entsprechende Trade mit der OrderSelect() Funktion ausgewählt.

Wenn der ausgewählte Trade dasselbe Symbol wie das aktuelle Chart hat, vom Typ OP_BUY ist und die gleiche Magic Number hat, wird geprüft, ob der Profit des Trades größer oder gleich ProfittoMinimo ist. Falls ja, wird der Trade zum Bid-Preis mit der OrderClose() Funktion geschlossen und es wird eine Nachricht ausgegeben, dass der Buy-Order geschlossen wurde.

Ähnlich verhält es sich, wenn der ausgewählte Trade dasselbe Symbol wie das aktuelle Chart hat, vom Typ OP_SELL ist und die gleiche Magic Number hat. In diesem Fall wird geprüft, ob der Profit des Trades größer oder gleich ProfittoMinimo ist. Wenn ja, wird der Trade zum Ask-Preis mit der OrderClose() Funktion geschlossen und es wird eine Nachricht ausgegeben, dass der Sell-Order geschlossen wurde.

      for(int e = OrdersTotal() - 1; e >= 0; e--)
        {
         if(OrderSelect(e, SELECT_BY_POS, MODE_TRADES))
           {
            if(OrderSymbol() == Symbol() && OrderType() == OP_BUY && OrderMagicNumber() == MagicNumber) // Die Order wird nur geändert, wenn die MagicNumber mit der der aktuellen Order übereinstimmt.
              {
               if(Profit >= ProfittoMinimo)
                 {
                  OrderClose(OrderTicket(), OrderLots(), ND(OrderClosePrice()), 3); // Bid Preis
                  Print("Buy-Order geschlossen", Profit, " - Minimaler Stoploss: ",MarketInfo(Symbol(), MODE_STOPLEVEL));
                 }
          }

            if(OrderSymbol() == Symbol() && OrderType() == OP_SELL && OrderMagicNumber() == MagicNumber)
              {
               if(Profit >= ProfittoMinimo)
                 {
                  OrderClose(OrderTicket(), OrderLots(), ND(OrderClosePrice()), 3); // Ask Preis
                  Print("Sell-Order geschlossen", Profit, " - Minimaler Stoploss: ",MarketInfo(Symbol(), MODE_STOPLEVEL));
                 }
          }
          }
        }


Fazit

Dieser Code könnte für alle Strategien, die auf dem Schließen von Positionen basieren, nützlich sein, aber auch mit einem Trailing-Stop kombiniert werden, der auf dem Anstieg des aktuellen Gewinns basiert. Das System ist auch bei mehreren Expert Advisors von Vorteil. Wenn du die if-Bedingung für die MagicNumber ausschließt, kannst du allgemeine Take-Profit-Level festlegen, um alle offenen Positionen von allen aktiven EAs gleichzeitig zu steuern.



    연관 포스트

    댓글 (0)