Parameter des Expert Advisors (Einstellungen)
Der EA bietet verschiedene externe Parameter, die der Nutzer anpassen kann, um sein Verhalten zu steuern:
Allgemeine Parameter
| Parameter | Typ | Beschreibung |
| MagicNumber | int | Eine eindeutige Kennung für die Trades des EAs. |
| InitialLot | double | Die Startlotgröße für den ersten Trade in einer Reihe. |
| AllowBuy | bool | Flag, um dem EA zu erlauben, Kauf-Trades zu eröffnen (anfängliche und Martingale). |
| AllowSell | bool | Flag, um dem EA zu erlauben, Verkaufs-Trades zu eröffnen (anfängliche und Martingale). |
| TakeProfit | int | Ein fester Take Profit in Punkten/Pips, der beim Platzieren von Pending Orders verwendet wird (nicht jedoch für Marktaufträge). |
| FindHighLowBackBars | int | Die Anzahl der vorherigen Kerzen, die zurückblicken werden, um das höchste Hoch und das niedrigste Tief für die Platzierung der anfänglichen Pending Orders zu bestimmen. |
| ResetAfterBars | int | Die Anzahl der Kerzen, nach denen die anfänglichen Pending Orders gelöscht und neu bewertet werden (wenn keine Position offen ist). |
Martingale Strategie
| Parameter | Typ | Beschreibung |
| ReverseMartingale | bool | Wenn wahr, werden die nachfolgenden Martingale-Trades in die entgegengesetzte Richtung des letzten Trades in der Reihe eröffnet (dies würde typischerweise einen Anti-Martingale- oder Hedging-Ansatz darstellen, aber der Code öffnet in die gleiche Richtung, wenn falsch). |
| LotMultiplier | double | Der Faktor, um den die Lotgröße für den nächsten Trade in der Verlustreihe multipliziert wird (z.B. 2.0 bedeutet Verdopplung des Lots). |
| SecureProfitMartingaleTarget | double | Der gesamt schwankende Gewinn (in Kontowährung), bei dem die gesamte Reihe offener Trades geschlossen wird. |
| DistanceMartingalePips | int | Der Abstand (in Pips), den der Preis gegen den letzten geöffneten Preis bewegen muss, bevor ein neuer Martingale-Trade eröffnet wird. |
| MaxTradesInSeries | int | Die maximale Anzahl von Trades, die in einer einzelnen Martingale-Reihe erlaubt sind. |
Zeitstrategie
| Parameter | Typ | Beschreibung |
| AllowMonday... AllowFriday | bool | Flags, um das Trading an bestimmten Wochentagen zu aktivieren oder zu deaktivieren. |
| ForbiddenDates | string | Eine durch Kommas getrennte Liste von Daten (Format YYYY.MM.DD), an denen das Trading verboten ist. |
Übersicht der Kernfunktionen
OnInit() (Initialisierung)
Setzt die MagicNumber des EAs, den Margin-Modus und die Abweichung. Es setzt die Martingale-Status-Variablen (s_currentLot, s_totalTradesInSeries usw.) auf ihre Anfangswerte zurück und bereitet sich auf einen Neuanfang vor.
OnDeinit() (Deinitialisierung)
Eine einfache Funktion zur Bereinigung, die eine Nachricht ausgibt, wenn der EA gestoppt oder entfernt wird.
IsTradingDateAllowed() und IsTradingDayAllowed() (Trading-Filter)
Diese Funktionen prüfen den aktuellen Tag und das Datum anhand der benutzerdefinierten Eingaben (AllowMonday bis AllowFriday und ForbiddenDates), um festzustellen, ob das Trading erlaubt ist.
OpenTradeLogic(ENUM_ORDER_TYPE type, string tradeComment) (Marktausführung)
Diese Funktion behandelt das Öffnen neuer Marktpositionen (Kauf oder Verkauf).
Sie validiert und normalisiert die Lotgröße gemäß den Mindest-, Höchst- und Schrittgrößen der Broker.
Sie prüft auf ausreichendes freies Margin unter Verwendung von CheckMargin().
Sie führt den Trade ohne festen Take Profit oder Stop Loss aus (tp_calculated ist 0).
Sie aktualisiert die globalen Martingale-Statusvariablen: s_currentLot, s_lastOpenPrice, s_seriesType und s_totalTradesInSeries.
CloseAllPositions()
Durchläuft alle derzeit offenen Positionen und schließt alle, die von diesem EA eröffnet wurden (mit dem MagicNumber).
PendingOrders(ENUM_ORDER_TYPE type, double price, double lotSize, string comment) (Platzierung von Pending Orders)
Diese Funktion platziert Buy Limit oder Sell Limit Orders:
Sie validiert die Lotgröße und prüft auf ausreichendes Margin.
Sie validiert den Einstiegspreis gegenüber dem Mindestabstand des Brokers (SYMBOL_TRADE_STOPS_LEVEL).
Sie berechnet einen festen Take Profit (tp) basierend auf dem TakeProfit-Input.
Sie sendet die Handelsanfrage. Hinweis: Die Funktion UpdateHighLowAndOrders ruft dies auf, um die anfänglichen Buy Limit und Sell Limit Orders zu platzieren.
UpdateHighLowAndOrders() (Logik für den initialen Einstieg)
Dies ist der initiale Einstiegsmachanismus, wenn keine Positionen offen sind:
Sie blickt zurück auf FindHighLowBackBars, um das höchste Hoch und das niedrigste Tief zu finden.
Sie berechnet priceSellLimit (höchstes Hoch + 1 Tick) und priceBuyLimit (niedrigstes Tief - 1 Tick).
Sie überprüft, ob Buy Limit und Sell Limit Orders mit der MagicNumber des EAs bereits existieren.
Sie platziert eine anfängliche Sell Limit Order knapp über dem letzten höchsten Hoch und eine Buy Limit Order knapp unter dem letzten niedrigsten Tief, jeweils unter Verwendung des InitialLots.
OnTick() (Hauptlogik)
Der Kern der Ausführungslogik des EAs:
Zeitprüfung: Verhindert redundante Berechnungen beim gleichen Tick.
Filterprüfung: Wenn das Trading an Tag/Datum nicht erlaubt ist, löscht es alle Pending Orders.
Gewinnzielprüfung (Reihenbeendigung): Wenn eaHasOpenPositions wahr ist UND totalFloatingProfit ≥ SecureProfitMartingaleTarget ist, ruft es CloseAllPositions() auf und setzt alle Martingale-Statusvariablen zurück, um eine neue Reihe zu starten.
Platzierung der anfänglichen Order: Wenn !eaHasOpenPositions UND Trading erlaubt ist, setzt es den Martingale-Status zurück und prüft, ob eine neue Kerze gebildet wurde.
Wenn eine neue Kerze gebildet wird, prüft es, ob barsCount ≥ ResetAfterBars ist. Wenn ja, löscht es Pending Orders und ruft UpdateHighLowAndOrders() auf, um neue anfängliche Orders zu platzieren. Andernfalls ruft es einfach UpdateHighLowAndOrders() auf.
Martingale-Schrittlogik: Wenn eaHasOpenPositions wahr ist UND s_totalTradesInSeries < $< MaxTradesInSeries:
Es prüft, ob totalFloatingProfit negativ ist UND der Preis sich um mindestens DistanceMartingalePips gegen den letzten offenen Trade bewegt hat.
Wenn beide Bedingungen erfüllt sind, wird nextLot berechnet, indem s_currentLot mit LotMultiplier multipliziert wird.
Es bestimmt die Richtung orderToOpen (entweder in die gleiche Richtung wie die Reihe oder umgekehrt, basierend auf ReverseMartingale).
Es ruft OpenTradeLogic() auf, um die neue, multiplizierte Position zu eröffnen und die Martingale-Reihe fortzusetzen.
Zusammenfassung der Strategie
Der "Babi Ngepet" EA implementiert eine riskante, aber potenziell hochbelohnende Martingale-Strategie in Kombination mit einem Breakout-/Range-Reversal-Initialeinstieg:
Erster Einstieg: Der EA platziert eine anfängliche Buy Limit (unterhalb des letzten Tiefs) und eine Sell Limit (oberhalb des letzten Hochs). Dies deutet auf eine anfängliche Annahme von range-bound Verhalten hin – er geht long, wenn der Preis auf ein Tief fällt, und short, wenn der Preis auf ein Hoch steigt.
Handelsmanagement: Wenn einer der anfänglichen Trades ausgelöst wird und die Position in einen aggregierten Verlust (negativer schwebender Gewinn) übergeht, und der Preis weiterhin gegen die offenen Positionen um einen definierten Abstand bewegt, öffnet der EA eine neue Position in dieselbe Richtung mit einer größeren Lotgröße (Martingale).
Ausstiegsstrategie: Die Reihe von Trades erhöht die Lotgröße weiter, bis der aggregierte schwebende Gewinn aller Trades in der Reihe den SecureProfitMartingaleTarget erreicht, wonach alle Positionen geschlossen werden und der EA für eine neue Reihe zurückgesetzt wird.
Warnung: Die Martingale-Strategie ist bekannt für hohe Drawdowns und ein hohes Risiko von Kapitalverlusten, da die Lotgröße nach jedem Verlustschritt steigt.
연관 포스트
- So integrierst du hochkarätige Wirtschaftsdaten in deinen EA für MetaTrader 4
- Einfacher Expert Advisor mit DeMarker-Indikator für MetaTrader 4
- 2 MA Crossing - Der perfekte Expert Advisor für MetaTrader 4
- Einfacher Single-Layer Perceptron EA für MetaTrader 4: Ein Leitfaden für Trader
- Take Profit Strategien: Wie du deinen Gewinn effektiv managen kannst