Systemhandel 게시글

2 MA Crossing - Der perfekte Expert Advisor für MetaTrader 4

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

In diesem Artikel zeigen wir dir, wie du einen Expert Advisor (EA) für MetaTrader 4 erstellen kannst, der auf dem 2 MA Crossing basiert. Lass uns direkt mit den Eingangsvariablen beginnen!

Eingangsparameter definieren

//--- Eingangsparameter
input    int      period_ma_fast = 8;  //Periode für schnellen MA
input    int      period_ma_slow = 20; //Periode für langsamen MA

input    double   takeProfit  = 20.0;  //Take Profit (Pips)
input    double   stopLoss    = 20.0  //Stop Loss (Pips)

input    double   lotSize     = 0.10;  //Lotgröße
input    double   minEquity   = 100.0; //Min. Eigenkapital (€)

input    int Slippage = 3;       //Slippage
input    int MagicNumber = 889;  //Magic Number

Globale Variablen definieren

Als nächstes definieren wir globale Variablen. Diese Variablen sind für alle Funktionen zugänglich.

//Globale Variablen
double   myPoint    = 0.0;
int      mySlippage = 0;
int      BuyTicket   = 0;
int      SellTicket  = 0;

Initialisierungsfunktion

Wenn der EA ausgeführt wird, wird als erstes die Funktion OnInit() aufgerufen. Hier validieren und initialisieren wir die globalen Variablen.

int OnInit()
{
   //Validierung der Eingaben
   if (period_ma_fast >= period_ma_slow || takeProfit < 0.0 || stopLoss < 0.0 || lotSize < 0.01 || minEquity < 10){
      Alert("WARNUNG - Eingabewerte ungültig!");
      return (INIT_PARAMETERS_INCORRECT);
   }
   
   double min_volume=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MIN);
   if(lotSize<min_volume)
   {
      string message =StringFormat("Volumen darf nicht kleiner als %.2f sein",min_volume);
      Alert (message);
      return(INIT_PARAMETERS_INCORRECT);
   }
   
   myPoint = GetPipPoint(Symbol());
   mySlippage = GetSlippage(Symbol(),Slippage);

   return(INIT_SUCCEEDED);
}

Tick-Funktion

Wenn sich der Marktpreis bewegt (Tick), wird die Funktion OnTick() aufgerufen, die alle Anweisungen innerhalb dieses Blocks ausführt.

Innerhalb der OnTick()-Funktion rufen wir verschiedene andere Funktionen auf.

Wir starten mit der Überprüfung des Eigenkapitals, gefolgt von der Deklaration der Signalvariablen und der Funktion NewCandle(), die signalisiert, wann eine neue Kerze gebildet wird.

Die Funktion getSignal() wertet die Werte der beiden gleitenden Durchschnitte aus und gibt die Signalinformation zurück, ob ein Aufwärts- oder Abwärtskreuz vorliegt. Basierend auf diesen Informationen wird die Funktion transaction() aufgerufen, um Kauf- oder Verkaufspositionen zu öffnen.

Danach folgt die Funktion setTPSL(), die die Take-Profit- und Stop-Loss-Preise festlegt. Wenn das Eigenkapital nicht den Anforderungen entspricht, wird ein Alert angezeigt, und der EA wird beendet.

void OnTick()
{
   if (cekMinEquity()){
      
      int signal = -1;
      bool isNewCandle = NewCandle(Period(), Symbol());
      
      signal = getSignal(isNewCandle);
      transaction(isNewCandle, signal);
      setTPSL();
      
      
   }else{
      //Stoppe den Handel, da das Eigenkapital nicht ausreicht
      Print("EA wird gestoppt, da das Eigenkapital nicht ausreicht.");
   }
}

Funktion zum Setzen von Take Profit und Stop Loss

void setTPSL(){
   int   tOrder = 0;
   string   strMN = "", 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);
      strMN = IntegerToString(OrderMagicNumber());
      if (StringFind(strMN, IntegerToString(MagicNumber), 0) == 0 && StringFind(OrderSymbol(), pair, 0) == 0 ){
         if (OrderType() == OP_BUY && (OrderTakeProfit() == 0 || OrderStopLoss() == 0) ){
            if (takeProfit > 0) {
               tp = OrderOpenPrice() + (takeProfit * myPoint);
            }else{
               tp = OrderOpenPrice();
            }
            if (stopLoss > 0) {
               sl = OrderOpenPrice() - (stopLoss * myPoint);
            }else{
               sl = OrderStopLoss();
            }
            if (OrderTakeProfit() != tp || OrderStopLoss() != sl ){ 
               if(OrderModify(OrderTicket(), OrderOpenPrice(), sl, tp, 0, clrBlue)){
                  Print ("Orderänderung erfolgreich!");
               }
            }
         }
         if (OrderType() == OP_SELL && (OrderTakeProfit() == 0 || OrderStopLoss() == 0) ){
            if (takeProfit > 0) {
               tp = OrderOpenPrice() - (takeProfit * myPoint);
            }else{
               tp = OrderOpenPrice();
            }
            if (stopLoss > 0) {
               sl = OrderOpenPrice() + (stopLoss * myPoint);
            }else{
               sl = OrderStopLoss();
            }
            if (OrderTakeProfit() != tp || OrderStopLoss() != sl ){ 
               if (OrderModify(OrderTicket(), OrderOpenPrice(), sl, tp, 0, clrRed)){
                  Print ("Orderänderung erfolgreich!");
               }
            }
         }
         
      }//Ende der Überprüfung von Magic Number und Symbol
      
} //Ende der Schleife

Zusammenfassung

Das Erstellen eines EAs für das 2 MA Crossing in MetaTrader 4 kann eine sehr effektive Trading-Strategie sein. Denke daran, stets deine Eingabewerte zu validieren und die Risiko-Management-Regeln zu beachten. Hast du Fragen? Lass es uns in den Kommentaren wissen!

Wenn du nach einer App suchst, die dein Trading unterstützt, lade dir unsere SignalForex App im Play Store herunter.

Für weitere Tipps und Tricks, schau auch in unserer Telegram-Gruppe vorbei!

연관 포스트

댓글 (0)