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!
Verwandte Beiträge
- Handelssignale mit MQL5 Wizard: Bullish und Bearish Harami mit CCI bestätigen
- MQL5 Wizard: Trade Signale auf Basis von Kurs-Crossover mit gleitendem Durchschnitt und ADX Bestätigung
- MQL5 Wizard: Handels-Signale mit 3 schwarzen Krähen / 3 weißen Soldaten + CCI für MetaTrader 5
- MQL5 Wizard: Handelssignale durch 3 Schwarze Krähen/3 Weiße Soldaten + RSI
- MQL5 Wizard: Handelssignale mit 3 schwarzen Krähen/3 weißen Soldaten und Stochastik erstellen