Startseite > Blog > Invalid Stops (10016/130) lösen — SL in MT5/MT4

MT5MQL5FehlerProblemlösungEA

Invalid Stops (10016/130) lösen — SL in MT5/MT4

Veröffentlicht: 2026-07-07Lesezeit: ca. 7 Min
This article reflects information as of its publish date. EA performance figures (PF, DD, annual return) change with live trading and re-validation — check the latest on the EA pages. See the latest EA results

Invalid Stops (10016/130) vollständig gelöst

Wenn beim Betrieb eines EA im Experten-Tab Invalid stops oder OrderSend error 130 erscheint, denkt man schnell: „Ist der SL-Wert falsch? Aber die Berechnung müsste doch stimmen…" Tatsächlich ist die überwiegende Mehrheit dieser Fehler kein Rechenfehler bei SL/TP, sondern ein Verstoß gegen die vom Broker festgelegte Mindestabstandsregel. Auch wenn der Wert an sich korrekt ist, wird er abgelehnt, wenn er zu nah am aktuellen Kurs liegt, die Richtung falsch ist oder er sich in einer Zone befindet, in der Änderungen gesperrt sind.

Dieser Artikel richtet sich sowohl an EA-Anwender auf MT5/MT4 als auch an Entwickler, die EAs in MQL5 programmieren, und fasst das Wesen von Invalid stops, die sechs Ursachen, eine 30-Sekunden-Diagnose und dauerhafte Präventionsmaßnahmen im Code in einem einzigen Artikel zusammen. Eine Gesamtübersicht aller Fehlercodes findest du im umfassenden Leitfaden zu MQL5/MT5-Fehlercodes.

Dieser Artikel geht vom Stand MT5 (Build-4xxx-Serie) im Juli 2026 aus. Die konkreten Werte der Stop-Level variieren je nach Broker und Symbol.


Was ist Invalid Stops (Unterschied zwischen 10016 und 130)

Für „ungültige Stops" gibt es zwei Werte, je nach MT5 oder MT4 (Generation). Wenn man unterscheidet, auf welcher Plattform und in welcher Phase der Fehler auftritt, geht die Ursachenforschung deutlich schneller.

① TRADE_RETCODE_INVALID_STOPS = 10016 (MT5 / Rückgabecode von OrderSend())

Das Ergebnis von OrderSend() in MQL5 wird in MqlTradeResult.retcode abgelegt. Wenn SL/TP in der Anfrage (oder die Beziehung zum Preis bei Pending Orders) nicht den Serverregeln entsprechen, wird die Anfrage mit 10016 (TRADE_RETCODE_INVALID_STOPS) abgelehnt. Das ist eine Ablehnungsmeldung seitens des Handelsservers.

Bedeutung: Ungültige Stops (SL/TP) in der Anfrage (Invalid stops in the request)
Konstante: TRADE_RETCODE_INVALID_STOPS
Wert     : 10016
// Typische Ausgabe, wie sie im Log erscheint
2026.07.07 09:15:32.441 EA_NAME XAUUSD,M5: OrderSend error: retcode=10016 (invalid stops)

② ERR_INVALID_STOPS = 130 (MT4 / GetLastError())

Bei der MT4-Generation (MQL4) gibt GetLastError() nach einem fehlgeschlagenen OrderSend() / OrderModify() den Wert 130 (ERR_INVALID_STOPS) zurück. Das ist die Meldung OrderSend error 130 im Experten-Tab. Wer parallel einen MT4-EA einsetzt, wird darauf stoßen.

Bedeutung: Ungültige Stops (invalid stops)
Konstante: ERR_INVALID_STOPS
Wert     : 130

Praktische Unterscheidung:

PlattformFundortWertAuftrittsszenario
MT5MqlTradeResult.retcode10016 (TRADE_RETCODE_INVALID_STOPS)OrderSend / PositionModify wurde vom Server abgelehnt
MT5CTrade.ResultRetcode()10016Order-Aufgabe/-Änderung über CTrade abgelehnt
MT4GetLastError()130 (ERR_INVALID_STOPS)Nach fehlgeschlagenem OrderSend / OrderModify

Die Nummern unterscheiden sich, aber Bedeutung und Ursache sind nahezu identisch, ebenso die Abhilfe. Häufig verwechselt wird bei MT5 der Code 10015 (TRADE_RETCODE_INVALID_PRICE), der „der Orderpreis selbst ist ungültig" bedeutet – das ist etwas anderes. 10016 betrifft ausschließlich die „Position von SL/TP (Stop)".


Erste 30-Sekunden-Diagnose

Öffne in MT5 unter „Kurse → Symbol rechtsklicken → Spezifikation" die folgenden zwei Punkte:

Stop-Level (Stops level)     : Mindestabstand, den SL/TP vom aktuellen Kurs einhalten muss (in Punkten)
Freeze-Level (Freeze level)  : Abstand, ab dem Ändern/Stornieren einer kurz vor Ausführung stehenden Order gesperrt ist (in Punkten)

Vergleiche anschließend im Log zum Zeitpunkt des Fehlers den gesendeten SL/TP-Wert mit dem aktuellen Bid/Ask.

  • SL oder TP liegen weniger als den Stop-Level-Abstand vom aktuellen Kurs entfernt → das ist mit hoher Wahrscheinlichkeit die Ursache (Ursache ①).
  • Bei BUY liegt der SL über dem Bid bzw. der TP unter dem Bid (bei SELL umgekehrt) → Richtung vertauscht (Ursache ②).
  • Nur die Änderung einer bestehenden Position schlägt fehl → Freeze-Level oder nachträgliches SL/TP-Setzen (Ursache ③/⑤).
  • Der SL-Wert ist eindeutig kein Preis, z. B. „50" → Verwechslung von Preis und Punkten (Ursache ④).

Direkt im Code lässt sich das mit einer Zeile prüfen.

Print("StopsLevel=", SymbolInfoInteger(_Symbol, SYMBOL_TRADE_STOPS_LEVEL),
      " FreezeLevel=", SymbolInfoInteger(_Symbol, SYMBOL_TRADE_FREEZE_LEVEL));

Ursachen und Abhilfe (6 Muster)

① SL/TP liegen zu nah am aktuellen Kurs (unter dem Stop-Level)

Symptom: Tritt häufig bei Scalping-EAs mit engem SL oder EAs mit kleinem Trailing-Abstand auf. Auch manuell lässt sich der Order-Button nicht drücken bzw. wird die Order abgelehnt, wenn man versucht, den SL „direkt neben" den Kurs zu setzen.

Ursache: Broker legen für jedes Symbol SYMBOL_TRADE_STOPS_LEVEL (Mindest-Stop-Abstand in Punkten) fest, und SL/TP oder Pending-Preise, die weniger als diesen Abstand vom aktuellen Kurs entfernt sind, werden vom Server pauschal abgelehnt. Als Referenzpreis für die Prüfung dient bei BUY-Positionen Bid, bei SELL Ask. Weitet sich der Spread aus, vergrößert sich der Abstand zwischen Bid und Ask – ein Abstand, der normalerweise durchgeht, kann daher bei Nachrichten oder frühmorgens plötzlich abgelehnt werden.

Abhilfe:

  1. Den Stop-Level im Spezifikationsfenster prüfen und die SL/TP- bzw. Trailing-Abstände des EA so einstellen, dass sie darüber liegen
  2. Auf EA-Seite vor dem Senden clampen (siehe Code weiter unten)
  3. Wenn unbedingt ein enger SL benötigt wird, einen Broker bzw. Kontotyp mit kleinerem Stop-Level in Betracht ziehen

② Richtung von SL/TP vertauscht (BUY/SELL verwechselt)

Symptom: In einer bestimmten Richtung (nur Kauf oder nur Verkauf) tritt immer Invalid Stops auf. Das häufigste Muster beim ersten Test eines selbst geschriebenen EA.

Ursache: Die Regel ist einfach: Bei BUY muss der SL unter dem aktuellen Kurs (Bid) und der TP darüber liegen; bei SELL muss der SL über dem aktuellen Kurs (Ask) und der TP darunter liegen. Ein klassischer Fehler ist es, die BUY-Formel für SELL zu kopieren und dabei das Vorzeichen zu vergessen oder price - sl mit price + sl zu vertauschen – der Server antwortet dann sofort mit 10016/130.

Abhilfe:

  1. Bei Fehlern mit PrintFormat("type=%s sl=%.5f tp=%.5f bid=%.5f ask=%.5f", ...) die tatsächlichen Werte ausgeben und die Richtung visuell prüfen
  2. Die SL/TP-Berechnung für BUY/SELL in einer gemeinsamen Funktion zusammenfassen, sodass die Vorzeichenverzweigung an nur einer Stelle steht (keine kopierten Verzweigungen)

③ Order- oder Positionsänderung innerhalb des Freeze-Levels

Symptom: Neue Orders funktionieren problemlos, aber nur Änderungen/Stornos kurz vor TP, kurz vor SL oder kurz vor Auslösung einer Pending Order werden abgelehnt.

Ursache: Bei Symbolen mit gesetztem SYMBOL_TRADE_FREEZE_LEVEL wird das Ändern oder Stornieren einer Order gesperrt, sobald sich der aktuelle Kurs dem Auslösepreis (TP/SL bzw. Trigger einer Pending Order) bis auf einen bestimmten Abstand nähert. Das ist eine Serverfunktion, um Konflikte zwischen Ausführung und Änderungsanfrage zu vermeiden, und zeigt sich beim Trailing eines EA häufig dadurch, dass „kurz vor dem TP noch eine weitere Anpassung versucht und abgelehnt wird".

Abhilfe:

  1. Vor jeder Änderung SYMBOL_TRADE_FREEZE_LEVEL auslesen und die betreffende Änderung überspringen, wenn der Abstand zum Auslösepreis unter dem Freeze-Level liegt
  2. Das Update-Intervall bzw. den Update-Abstand des Trailings vergrößern, um unnötige Änderungsanfragen kurz vor Auslösung zu reduzieren
  3. Da eine Ablehnung nicht kritisch ist (kurz vor Auslösung = die Order wird ohnehin gleich ausgeführt), reicht es, den Fehler abzufangen und nur zu loggen

④ Verwechslung von Preis und Punkten (Abstand)

Symptom: Im SL steht ein „als Abstand gemeinter" Wert wie 50 oder 0.0050 unverändert. Der im Log erscheinende Wert sl=50.00000 ist eindeutig kein Preis.

Ursache: In MqlTradeRequest.sl / .tp gehört der absolute Preis (nicht „50 Punkte unter dem Einstieg"). Ein EA, der mit Abständen arbeitet, muss diese vor der Übergabe in entry ± distance * _Point umrechnen. Umgekehrt führt es, wenn man aus MT4-Gewohnheit an einer Stelle, an der ein absoluter Preis erwartet wird, einen Abstand übergibt, dazu, dass kein gültiger Preis zustande kommt und 10016/130 die Folge ist.

Ein weiterer Klassiker ist die Verwechslung von Pips und Punkten. Bei 5-stelligen Brokern (z. B. USDJPY mit 3 Nachkommastellen, EURUSD mit 5) gilt 1 Pip = 10 Punkte. Je nachdem, ob „SL 50" als Pips oder Punkte gemeint ist, verschiebt sich der Abstand um den Faktor 10 und fällt dann unter den Stop-Level, was zur Ablehnung führt.

Abhilfe:

  1. SL/TP stets in der Form NormalizeDouble(price ± dist * _Point, _Digits) aufbauen
  2. Die Einheit der Eingabeparameter (Pips/Punkte) per Kommentar klarstellen und die _Point-Umrechnung intern an einer einzigen Stelle bündeln

⑤ Bei Brokern mit Market Execution wird SL/TP bei Orderaufgabe nicht akzeptiert

Symptom: Ohne SL/TP wird die Order ausgeführt, nur mit SL/TP tritt Invalid Stops auf. Betrifft besonders Konten mit ECN-/Market-Execution.

Ursache: Bei Market Execution weichen „Preis zum Zeitpunkt der Anfrage" und „tatsächlicher Ausführungspreis" voneinander ab. Deshalb akzeptieren manche Server SL/TP innerhalb einer neuen Orderanfrage nicht und verlangen stattdessen, diese erst nach Ausführung per Positionsänderung zu setzen (eine klassische Eigenheit, die zu MT4-Zeiten bei ECN-Konten häufig zu Error 130 führte und bei manchen Servern auch unter MT5 fortbesteht).

Abhilfe:

  1. Zunächst ohne SL/TP eine Order aufgeben → nach Bestätigung der Ausführung SL/TP per PositionModify() (bei CTrade: trade.PositionModify()) setzen – also ein zweistufiges Vorgehen
  2. Da bei diesem Ansatz der Moment entstehen kann, in dem „die Order erfolgreich war, das Setzen des SL aber fehlgeschlagen ist", muss unbedingt eine Absicherung eingebaut werden, die so lange erneut versucht, bis der SL gesetzt ist, und bei einer festgelegten Anzahl Fehlversuche die Position sofort schließt (eine ungeschützte Position ohne SL ist das schlimmste Ergebnis)
  3. Die Ausführungsart lässt sich mit SymbolInfoInteger(_Symbol, SYMBOL_TRADE_EXEMODE) abfragen

⑥ Symbolspezifische Eigenheiten (Gold und Indizes haben größere Stop-Level)

Symptom: Derselbe EA funktioniert bei EURUSD, aber sobald er auf XAUUSD (Gold) oder einen CFD auf einen Aktienindex angewendet wird, kommt es ständig zu Invalid Stops.

Ursache: Der Stop-Level wird für jedes Symbol separat festgelegt, und bei Gold, Indizes und exotischen Währungen ist er in der Regel größer angesetzt als bei den Hauptwährungen. Wenn ein für Major-FX-Paare angepasster enger SL- bzw. Trailing-Abstand unverändert übernommen wird, reicht er nicht an den Mindestabstand des Symbols heran und wird abgelehnt. Auch die Anzahl der Nachkommastellen unterscheidet sich je nach Symbol (bei Gold z. B. 2 bis 3 Stellen), sodass Code mit fest codiertem _Digits ebenfalls Probleme bekommt.

Abhilfe:

  1. Nach einem Symbolwechsel unbedingt Stop-Level und Nachkommastellen im Spezifikationsfenster prüfen
  2. Den SL/TP-Abstand statt in festen Punkten auf Basis der Volatilität (z. B. ATR) festlegen – so bricht die Logik symbolübergreifend seltener zusammen
  3. Im Code immer _Point / _Digits / SYMBOL_TRADE_STOPS_LEVEL dynamisch abfragen (kein Hardcoding)

Unterschiede je nach Broker (Hinweise)

Stop-Level und Freeze-Level unterscheiden sich vollständig je nach Kombination aus Broker und Symbol. Es ist völlig normal, dass derselbe EA mit derselben Einstellung bei Broker A nie einen Fehler zeigt, bei Broker B aber täglich.

Besondere Vorsicht ist bei Brokern geboten, die den Stop-Level als „0" anzeigen. Eine 0 bedeutet oft nicht „keine Beschränkung", sondern „dynamische Prüfung" – im Normalbetrieb geht dann jeder noch so enge SL durch, wird aber genau in dem Moment abgelehnt, in dem sich der Spread ausweitet, etwa bei Nachrichten oder frühmorgens. Das ist meist die wahre Ursache für ein „nur gelegentlich auftretendes Invalid Stops".

Die Überprüfung sollte stets auf dem tatsächlichen Konto erfolgen.

long stops  = SymbolInfoInteger(_Symbol, SYMBOL_TRADE_STOPS_LEVEL);   // in Punkten
long freeze = SymbolInfoInteger(_Symbol, SYMBOL_TRADE_FREEZE_LEVEL);  // in Punkten

Da die konkreten Werte vom jeweiligen Kontotyp und der Symbolspezifikation des Brokers abhängen, werden sie in diesem Artikel nicht genannt. Der einzig verlässliche Wert ist der, den du mit obigem Code auf deinem eigenen Konto ausliest.


Code zur Vermeidung dieses Fehlers in MQL5 (für EA-Entwickler)

Das richtige Design lautet nicht „reparieren, wenn der Fehler auftritt", sondern SL/TP vor der Orderaufgabe auf den Mindestabstand des Brokers zu clampen, sodass 10016 gar nicht erst entsteht.

SL/TP vor der Orderaufgabe validieren und clampen

// SL/TP vor der Orderaufgabe auf einen Abstand mindestens in Höhe des Stop-Levels clampen
// Rückgabewert false = Richtung vertauscht (Designfehler), daher keine Order aufgeben
bool ClampStops(ENUM_ORDER_TYPE type, double &sl, double &tp)
{
   double point   = SymbolInfoDouble(_Symbol, SYMBOL_POINT);
   int    digits  = (int)SymbolInfoInteger(_Symbol, SYMBOL_DIGITS);
   long   stopsPt = SymbolInfoInteger(_Symbol, SYMBOL_TRADE_STOPS_LEVEL);
   double spread  = SymbolInfoDouble(_Symbol, SYMBOL_ASK)
                  - SymbolInfoDouble(_Symbol, SYMBOL_BID);
   // Puffer aus Stop-Level + Spread (Absicherung gegen Broker mit dynamischer Prüfung bei stops=0)
   double minDist = stopsPt * point + spread;

   double bid = SymbolInfoDouble(_Symbol, SYMBOL_BID);
   double ask = SymbolInfoDouble(_Symbol, SYMBOL_ASK);

   if(type == ORDER_TYPE_BUY)
   {
      // SL/TP bei BUY werden anhand des Bid geprüft
      if(sl > 0 && sl >= bid) return false;              // Richtung vertauscht
      if(tp > 0 && tp <= bid) return false;
      if(sl > 0 && (bid - sl) < minDist) sl = bid - minDist;
      if(tp > 0 && (tp - bid) < minDist) tp = bid + minDist;
   }
   else if(type == ORDER_TYPE_SELL)
   {
      // SL/TP bei SELL werden anhand des Ask geprüft
      if(sl > 0 && sl <= ask) return false;              // Richtung vertauscht
      if(tp > 0 && tp >= ask) return false;
      if(sl > 0 && (sl - ask) < minDist) sl = ask + minDist;
      if(tp > 0 && (ask - tp) < minDist) tp = ask - minDist;
   }
   sl = NormalizeDouble(sl, digits);
   tp = NormalizeDouble(tp, digits);
   return true;
}

Drei Punkte sind entscheidend:

  1. SYMBOL_TRADE_STOPS_LEVEL und SYMBOL_POINT jedes Mal dynamisch abfragen (dadurch unabhängig von Symbol und Broker)
  2. Einen Puffer in Höhe des Spreads hinzufügen (damit es auch bei Brokern mit dynamischer Prüfung und Stop-Level 0 leichter durchgeht)
  3. Am Ende immer mit NormalizeDouble(Preis, _Digits) die Nachkommastellen angleichen (überzählige Nachkommastellen sind ebenfalls ein Ablehnungsgrund)

retcode 10016 gezielt behandeln

Wenn im Ablehnungsfall geloggt wird, „was gesendet wurde und wie groß der Abstand zu diesem Zeitpunkt war", lässt sich auf einen Blick erkennen, welche der Ursachen ①–⑥ zutrifft.

MqlTradeRequest req; MqlTradeResult res;
ZeroMemory(req); ZeroMemory(res);
// ... req aufbauen (sl/tp bereits durch ClampStops verarbeitet) ...
if(!OrderSend(req, res) || res.retcode != TRADE_RETCODE_DONE)
{
   if(res.retcode == TRADE_RETCODE_INVALID_STOPS)   // 10016
      PrintFormat("Invalid stops: sl=%s tp=%s bid=%s stopsLevel=%d",
                  DoubleToString(req.sl, _Digits),
                  DoubleToString(req.tp, _Digits),
                  DoubleToString(SymbolInfoDouble(_Symbol, SYMBOL_BID), _Digits),
                  (int)SymbolInfoInteger(_Symbol, SYMBOL_TRADE_STOPS_LEVEL));
   else
      PrintFormat("OrderSend failed: retcode=%d, lastError=%d", res.retcode, GetLastError());
}

Trailing-Änderungen erst nach Prüfung des Freeze-Levels vornehmen

// Vor der Positionsänderung prüfen, ob der Auslösepreis in der Freeze-Zone liegt
bool CanModify(double triggerPrice)
{
   long freeze = SymbolInfoInteger(_Symbol, SYMBOL_TRADE_FREEZE_LEVEL);
   if(freeze <= 0) return true;
   double dist = MathAbs(SymbolInfoDouble(_Symbol, SYMBOL_BID) - triggerPrice);
   return (dist > freeze * SymbolInfoDouble(_Symbol, SYMBOL_POINT));
}

Bei EAs für MT4 lassen sich dieselben Werte über MarketInfo(Symbol(), MODE_STOPLEVEL) / MODE_FREEZELEVEL abrufen. Das Prinzip ist völlig identisch.

Die von FXEA365 vertriebenen EAs implementieren standardmäßig diese Validierung von SL/TP vor der Orderaufgabe, das Clamping auf den Stop-Level sowie die symbolunabhängige dynamische Abfrage – dadurch bleibt das Design auch bei einem Wechsel von Broker oder Symbol von Invalid Stops unbeeinträchtigt.


Prioritäten-Checkliste

PrioritätPrüfungAbhilfe
🚨 ZuerstIst der Abstand zwischen SL/TP und aktuellem Kurs < Stop-Level?SL/TP-Abstand vergrößern / Clamping implementieren
🚨 ZuerstIst die Richtung von SL/TP bei BUY/SELL vertauscht?Tatsächliche Werte loggen und visuell prüfen
⚠️ DanachNur Änderung schlägt fehl → innerhalb des Freeze-Levels?Änderung kurz vor Auslösung überspringen
⚠️ DanachSteht in sl/tp versehentlich ein Abstand (in Punkten)?In absoluten Preis price ± dist*_Point umrechnen
✅ PrüfenHandelt es sich um ein Market-Execution-Konto, bei dem SL/TP nachträglich gesetzt werden muss?Zweistufiges Vorgehen: Order → PositionModify
🛠 EntwicklungWird die Symbolspezifikation dynamisch abgefragt?Obiges ClampStops implementieren

Zusammenfassung

  • Invalid stops bedeutet bei MT5 = 10016 (TRADE_RETCODE_INVALID_STOPS), bei MT4 = 130 (ERR_INVALID_STOPS). Die Nummern unterscheiden sich, Bedeutung und Abhilfe sind aber identisch.
  • Die Ursache liegt überwiegend nicht in einem Rechenfehler, sondern in einer von sechs Kategorien: Unterschreitung des Stop-Levels, vertauschte Richtung, Freeze-Level, Verwechslung von Preis und Punkten, nachträgliches Setzen von SL/TP sowie symbolspezifische Eigenheiten.
  • Entwickler können mit „SYMBOL_TRADE_STOPS_LEVEL vor der Orderaufgabe auslesen, clampen und NormalizeDouble" dauerhaft vorsorgen. Auch Broker mit Stop-Level 0 lassen sich mit einem Spread-Puffer abfangen.

Eine Gesamtübersicht aller Fehlercodes findest du im umfassenden Leitfaden zu MQL5/MT5-Fehlercodes. Zum ebenfalls häufigen Ablehnungsfehler „unzureichendes Guthaben" gibt es außerdem den Artikel zu ERR_NO_MONEY (134/10019).


FAQ

F: Die Berechnung von SL/TP müsste eigentlich stimmen, trotzdem erscheint Invalid Stops. Warum?

Es ist wahrscheinlich, dass die Ablehnung nicht wegen eines falschen Werts erfolgt, sondern wegen des Abstands zum aktuellen Kurs. SL/TP unterhalb des vom Broker festgelegten Mindestabstands (Stop-Level) werden pauschal abgelehnt, selbst wenn der Wert an sich korrekt ist. Prüfe den Mindestabstand im Spezifikationsfenster oder über SymbolInfoInteger(_Symbol, SYMBOL_TRADE_STOPS_LEVEL).

F: Worin unterscheiden sich 10016 und 130?

10016 (TRADE_RETCODE_INVALID_STOPS) ist der Ergebniscode von OrderSend() / PositionModify() in MT5, 130 (ERR_INVALID_STOPS) ist der Wert, den GetLastError() in MT4 zurückgibt. Es handelt sich nur um unterschiedliche Plattformen – Bedeutung (ungültige Position von SL/TP) und Abhilfe sind identisch.

F: Normalerweise tritt der Fehler nicht auf, aber nur bei Nachrichtenveröffentlichungen kommt es zu Invalid Stops.

Die Ursache ist die Ausweitung des Spreads. Da SL/TP bei BUY anhand des Bid und bei SELL anhand des Ask geprüft werden, reicht der Abstand genau in dem Moment nicht mehr aus, in dem sich der Spread ausweitet. Auch bei Brokern mit Stop-Level 0 kommt es bei plötzlichen Kursbewegungen zu einer dynamischen Ablehnung. Füge dem SL/TP-Abstand einen Puffer in Höhe des Spreads hinzu (siehe Code im Artikel).

F: Ohne SL/TP geht die Order durch, mit SL/TP wird sie abgelehnt.

Möglicherweise handelt es sich um ein Konto mit Market Execution, dessen Server SL/TP innerhalb einer neuen Orderanfrage nicht akzeptiert. Gib die Order ohne SL/TP auf und setze SL/TP nach der Ausführung per PositionModify() in einem zweistufigen Vorgehen. Baue dabei unbedingt eine Wiederholungslogik für den Fall ein, dass das Setzen des SL fehlschlägt, sowie eine sofortige Schließung, falls dies dauerhaft fehlschlägt.

F: Ein EA, der bei EURUSD funktioniert, erzeugt bei Gold ständig Invalid Stops.

Bei Gold und Aktienindizes ist der Stop-Level normalerweise größer angesetzt als bei Hauptwährungen, auch die Anzahl der Nachkommastellen unterscheidet sich. Passe den SL-/Trailing-Abstand an die Symbolspezifikation an oder wechsle zu einem volatilitätsbasierten Abstand auf ATR-Basis.

📧 Preis-Alarm vor Erhöhungen + kostenloser 5-Tage-E-Mail-Kurs

Alle EAs sind zum Einführungspreis erhältlich und steigen stufenweise mit den Verkäufen. Erhalten Sie vor jeder Erhöhung eine Benachrichtigung, plus täglich eine E-Mail zu Algo-Trading, Backtest-Lektüre und Brokerwahl.

* Datenschutz streng geschützt. Sie können jederzeit kündigen.

Kommentare & Fragen