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:

…
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.
연관 포스트
- So integrierst du hochkarätige Wirtschaftsdaten in deinen EA für MetaTrader 4
- Erstelle einen Expert Advisor basierend auf dem Center of Gravity Indikator für MetaTrader 4
- Der perfekte Expert Advisor für präzises Trading: Orders zu festgelegten Zeiten öffnen und schließen
- Der Moving Average Expert Advisor für MetaTrader 4 – Ihr Trading-Partner
- Alle Aufträge schließen - der perfekte Helfer für MetaTrader 5