Optimaliseer Je Trading met een Trailing Stop in MetaTrader 4

Mike 2021.03.30 22:17 19 0 0
Bijlage


Een trailing stop is een geweldige manier om je trades te ondersteunen door de stop loss automatisch naar het winstgebied te verschuiven. Op deze manier kun je altijd je winst veiligstellen zonder constant je trades in de gaten te houden.

Laten we beginnen met de code door de invoerparameters voor de trailing stop te specificeren:

input    bool     isTrailingStop = true;  //Trailing Stop
input    int      trailingStart  = 15;    //Trailing Start (pips)
input    int      trailingStep   = 5;     //Trailing Step (pips)
input    int      MagicNumber = 0;        //Magic Number


Hier is de globale variabele die we nodig hebben:

//Globale Variabele
double   myPoint    = 0.0;


Wanneer we deze Expert Advisor (EA) uitvoeren, wordt de functie OnInit() voor de eerste keer uitgevoerd. In deze functie controleren en initialiseren we de invoervariabelen:

int OnInit()
  {
    if (isTrailingStop && trailingStart <= 0){
      Alert ("Parameters incorrect");
      return(INIT_PARAMETERS_INCORRECT);
   }

     myPoint     = GetPipPoint(Symbol());

    return(INIT_SUCCEEDED);
  }


Elke keer dat er een prijsbeweging (tick) plaatsvindt op de grafiek waar deze EA aan is gekoppeld, wordt de functie OnTick() uitgevoerd. In deze functie roepen we de functie setTrailingStop() aan:

void OnTick()
  {
    //---
     setTrailingStop(MagicNumber);
  }


Hier is de functie 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(), " fout bij het updaten van sl");
               }
            }
         }
         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(), " fout bij het updaten van sl");
               }
            }
      } //einde als magicNumber
   }//einde voor
}


Andere standaardfuncties die nodig zijn, zijn GetPipPoint():

// Functie 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);
}


Als je vragen hebt, laat ze dan achter in de reacties of sluit je aan bij onze groepschat (in het Nederlands) t.me/codeMQL.


We hebben ook de SignalForex App beschikbaar.

Je kunt ons steunen door de SignalForex App te downloaden en deze te blijven gebruiken voor een winstgevender handelsresultaat.

Download hier de SignalForex App.



    Lijst
    Reactie 0