Ein Trailing Stop ist ein äußerst nützliches Werkzeug, um beim Trading Gewinne abzusichern. Er verschiebt den Stop-Loss automatisch in den Gewinnbereich und hilft so, Ihre Positionen abzusichern, während Sie gleichzeitig von weiteren Kursgewinnen profitieren können.
In diesem Artikel zeigen wir Ihnen, wie Sie die entsprechenden Parameter für den Trailing Stop im MetaTrader 4 festlegen können.
input bool isTrailingStop = true; // Trailing Stop aktivieren input int trailingStart = 15; // Trailing Start (Pips) input int trailingStep = 5; // Trailing Schritt (Pips) input int MagicNumber = 0; // Magic Number
Globale Variable
// Globale Variable double myPoint = 0.0;
Wenn wir diesen Expert Advisor (EA) starten, wird die OnInit()-Funktion als Erstes ausgeführt. In dieser Funktion validieren und initialisieren wir die Eingangsvariablen.
int OnInit() { if (isTrailingStop && trailingStart <= 0){ Alert ("Parameter sind inkorrekt"); return(INIT_PARAMETERS_INCORRECT); } myPoint = GetPipPoint(Symbol()); return(INIT_SUCCEEDED); }
Jedes Mal, wenn eine Preisbewegung (Tick) im Chart auftritt, wird die OnTick()-Funktion aufgerufen. Innerhalb dieser Funktion wird die setTrailingStop()-Funktion aufgerufen.
void OnTick() { //--- setTrailingStop(MagicNumber); }
Funktion setTrailingStop()
void setTrailingStop(int magicNumber=0){ if (isTrailingStop==false) return; int tOrder = 0; string pair = ""; double sl = 0.0, tp = 0.0; pair = Symbol(); tOrder = OrdersTotal(); for (int i=tOrder-1; i>=0; i--){ bool hrsSelect = OrderSelect(i, SELECT_BY_POS, MODE_TRADES); if (OrderMagicNumber() == magicNumber && StringFind(OrderSymbol(), pair, 0) == 0 ){ if (OrderType() == OP_BUY){ if ( (Bid - (trailingStart * myPoint)) >= OrderOpenPrice() && (Bid - ((trailingStart+trailingStep) * myPoint) >= OrderStopLoss() ) ){ sl = NormalizeDouble(Bid - (trailingStart * myPoint), Digits()); if (!OrderModify(OrderTicket(), OrderOpenPrice(), sl, OrderTakeProfit(), 0, clrBlue)){ Print ("#", OrderTicket(), " konnte SL nicht aktualisieren"); } } } if (OrderType() == OP_SELL){ if ( (Ask + (trailingStart * myPoint)) <= OrderOpenPrice() && ( (Ask + ((trailingStart+trailingStep) * myPoint) <= OrderStopLoss() ) || OrderStopLoss() == 0.0) ) { sl = NormalizeDouble(Ask + (trailingStart * myPoint), Digits() ); if (!OrderModify(OrderTicket(), OrderOpenPrice(), sl, OrderTakeProfit(), 0, clrBlue)){ Print ("#", OrderTicket(), " konnte SL nicht aktualisieren"); } } } } // Ende der Überprüfung des MagicNumbers }// Ende der Schleife }
Eine weitere wichtige Funktion, die benötigt wird, ist GetPipPoint().
// Funktion GetPipPoint double GetPipPoint(string pair) { double point= 0.0; int digits = (int) MarketInfo(pair, MODE_DIGITS); if(digits == 2 || digits== 3) point= 0.01; else if(digits== 4 || digits== 5) point= 0.0001; return(point); }
Wenn Sie Fragen haben, hinterlassen Sie bitte einen Kommentar oder treten Sie unserer Gruppe bei, um sich mit anderen Tradern auszutauschen. Sie können uns auch auf t.me/codeMQL finden.
Wir bieten auch die SignalForex App an. Unterstützen Sie uns, indem Sie die SignalForex App herunterladen und weiterhin nutzen, um Ihre Trading-Ergebnisse zu verbessern.
Kommentar 0