Trailing Stop im MetaTrader 4: So sichern Sie Ihre Gewinne ab

Mike 2021.03.30 22:17 30 0 0
Anhang

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 aktiviereninput    int      trailingStart  = 15;    // Trailing Start (Pips)input    int      trailingStep   = 5;    // Trailing Schritt (Pips)input    int      MagicNumber = 0;        // Magic Number

Globale Variable

// Globale Variabledouble   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.

intOnInit()
  {
  
   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.

voidOnTick()
  {
//---
   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 GetPipPointdouble GetPipPoint(string pair)
{
   double point= 0.0;
   int digits = (int) MarketInfo(pair, MODE_DIGITS);
   if(digits == 2 || digits== 3) point= 0.01;
   elseif(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.

Jetzt herunterladen

Liste
Kommentar 0