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!
연관 포스트
- So integrierst du hochkarätige Wirtschaftsdaten in deinen EA für MetaTrader 4
- Visuelle Auftragsbearbeitung: Ihr EA für MetaTrader 4
- Der perfekte Expert Advisor für präzises Trading: Orders zu festgelegten Zeiten öffnen und schließen
- Währungsstärke: Der perfekte Expert Advisor für MetaTrader 4
- Alle Aufträge schließen - der perfekte Helfer für MetaTrader 5