Unsupported filling mode (MT5-Fehler 10030) endgültig gelöst
Inhalt
- Was ist 10030 (TRADE_RETCODE_INVALID_FILL)?
- Die vier Ausführungsarten (type_filling)
- Warum wird die Order "abgelehnt"? – SYMBOL_FILLING_MODE
- Warum tritt der Fehler ausgerechnet "am Tag des Brokerwechsels" auf?
- Zusammenhang mit dem Ausführungsmodus (SYMBOL_TRADE_EXEMODE)
- Die 30-Sekunden-Diagnose
- ① Erlaubte Ausführungsart des Symbols prüfen (MT5-Oberfläche)
- ② Eingabeparameter des EA prüfen
- ③ Per Code prüfen (für Entwickler)
- Dauerhafte Lösung – MQL5-Code zur automatischen Auswahl anhand der Flags
- Funktion zur automatischen Erkennung
- Verwendung mit OrderSend
- Bei Verwendung von CTrade
- Hinweis zur Verwendung von Limit-Orders (BOC)
- Hinweise zum Broker (erneute Prüfung beim Wechsel)
- Prioritäten-Checkliste
- Fazit
- FAQ
- F: Ein EA, der bis gestern lief, platziert nach dem Brokerwechsel wegen 10030 überhaupt keine Orders mehr. Ist der EA defekt?
- F: Sollte man FOK oder IOC verwenden?
- F: Im Backtest tritt 10030 nicht auf, aber auf dem Echtkonto schon.
- F: Beim selben Broker tritt 10030 je nach Symbol mal auf, mal nicht.
- F: Ich kann den EA-Code nicht ändern (nur .ex5 vorhanden). Was tun?
Unsupported filling mode (MT5-Fehler 10030) endgültig gelöst
Ein EA, der bis gestern bei einem anderen Broker problemlos lief, wird auf ein neues Konto umgezogen – und plötzlich reihen sich im Experten-Tab Unsupported filling mode und OrderSend error 10030 aneinander, keine einzige Order geht mehr durch. Das ist eines der klassischsten Probleme beim Brokerwechsel im MT5-EA-Betrieb. Weder ist der EA defekt, noch liegt ein Problem mit dem Konto vor. Die angegebene "Ausführungsart" (Filling Mode) der Order wird für dieses Symbol beim neuen Broker schlicht nicht akzeptiert.
Dieser Artikel richtet sich sowohl an MT5-Anwender als auch an MQL5-Entwickler und fasst alles zu TRADE_RETCODE_INVALID_FILL (10030) zusammen: die eigentliche Ursache, die Bedeutung von FOK/IOC/RETURN, eine 30-Sekunden-Diagnose und die dauerhafte Lösung im Code. Eine Gesamtübersicht aller Fehlercodes findet sich im umfassenden Leitfaden zu MQL5-/MT5-Fehlercodes.
Dieser Artikel bezieht sich auf den Stand von MT5 (Build 4xxx-Reihe) im Juli 2026. Bezeichnungen und Anzeigen können je nach Broker und Build leicht abweichen.
Was ist 10030 (TRADE_RETCODE_INVALID_FILL)?
Das Ergebnis von OrderSend() wird in MqlTradeResult.retcode zurückgegeben. Der Code 10030 = TRADE_RETCODE_INVALID_FILL ist eine serverseitige Ablehnung, die bedeutet: "Die in der Anfrage angegebene type_filling (Ausführungsart) wird für dieses Symbol nicht unterstützt."
Bedeutung: Die angegebene Ausführungsart (filling type) wird nicht unterstützt
Konstante: TRADE_RETCODE_INVALID_FILL
Wert : 10030
Anzeige : Unsupported filling mode / Invalid order filling type
// Typisches Beispiel aus dem Log
2026.07.07 09:15:32.441 EA_NAME EURUSD,M15: OrderSend error 10030
2026.07.07 09:15:32.441 EA_NAME EURUSD,M15: failed market buy 0.10 EURUSD [Unsupported filling mode]
Wichtig ist: Kontostand, Lotgröße und Preis spielen dabei überhaupt keine Rolle. 10030 betrifft ausschließlich das einzige Feld MqlTradeRequest.type_filling in der Anfrage – sobald das korrigiert ist, geht dieselbe Order problemlos durch.
Die vier Ausführungsarten (type_filling)
Die MQL5-Enumeration ENUM_ORDER_TYPE_FILLING kennt vier Werte.
| Konstante | Bezeichnung | Bedeutung |
|---|---|---|
ORDER_FILLING_FOK | Fill or Kill | Wird nur ausgeführt, wenn die gesamte Menge ausgeführt werden kann. Ist bei einer Order über 1 Lot nur Liquidität für 0,7 Lot vorhanden, wird die gesamte Order storniert |
ORDER_FILLING_IOC | Immediate or Cancel | Es wird sofort so viel wie möglich ausgeführt, der Rest wird storniert. Bei 0,7 Lot Ausführung verfällt der restliche 0,3-Lot-Anteil |
ORDER_FILLING_RETURN | Return | Der ausführbare Teil wird ausgeführt, der Rest bleibt als Order im Orderbuch stehen (spätere Nachausführung möglich). Wird bei börsenbasierter Ausführung verwendet |
ORDER_FILLING_BOC | Book or Cancel | Wird nur akzeptiert, wenn die Order passiv im Orderbuch platziert wird; bei einem Preis, der zu sofortiger Ausführung führen würde, wird sie abgelehnt. Nur für Limit-/Stop-Limit-Orders (in neueren Builds hinzugefügt) |
Bei typischen FX-EAs kommen praktisch nur FOK oder IOC zum Einsatz. RETURN ist bei börsenbasierter Ausführung (Exchange execution) für Aktien und Futures relevant, BOC dient dem speziellen Zweck, ausschließlich als Maker-Order zu agieren.
Warum wird die Order "abgelehnt"? – SYMBOL_FILLING_MODE
Welche Ausführungsarten akzeptiert werden, legt der Broker pro Symbol über ein Flag fest (SYMBOL_FILLING_MODE). In MQL5 lässt sich das so auslesen:
long flags = SymbolInfoInteger(_Symbol, SYMBOL_FILLING_MODE);
// Ist das Flag SYMBOL_FILLING_FOK gesetzt, ist FOK erlaubt
// Ist das Flag SYMBOL_FILLING_IOC gesetzt, ist IOC erlaubt
SYMBOL_FILLING_MODE ist ein Bit-Flag, das angibt, ob FOK und/oder IOC erlaubt sind (bei Erlaubnis beider sind beide Flags gesetzt). RETURN ist in diesem Flag nicht enthalten – ob RETURN nutzbar ist, hängt vom Ausführungsmodus des Symbols ab (siehe unten).
Damit ist die Logik hinter 10030 denkbar einfach:
Vom EA gesendetes type_filling ∉ für dieses Symbol erlaubte Ausführungsarten → 10030
Mehr steckt nicht dahinter.
Warum tritt der Fehler ausgerechnet "am Tag des Brokerwechsels" auf?
10030 gilt als "der klassische Fehler beim Brokerwechsel" – aus folgenden Gründen:
- Welche Ausführungsarten erlaubt sind, unterscheidet sich je nach Broker und Symbol. Der eine Broker erlaubt für FX-Symbole nur FOK, ein anderer nur IOC, wieder ein anderer beide. Selbst innerhalb desselben Brokers unterscheiden sich die Einstellungen zwischen FX und CFDs/Aktien häufig.
- Viele EAs haben type_filling fest im Code hinterlegt. Ein EA mit
request.type_filling = ORDER_FILLING_FOK;läuft bei Broker A, der FOK erlaubt, jahrelang problemlos. Da er in der Umgebung des Entwicklers funktioniert, wird das Problem nie als Bug erkannt und der EA so weiterverbreitet. - Erlaubt der neue Broker B kein FOK, scheitert bereits die allererste Order. Im Backtest tritt der Fehler oft nicht auf (der Strategy Tester verhält sich nachsichtiger als ein echter Server), sodass sich das Problem erst "am Tag des Umzugs auf das Echtkonto" zeigt.
10030 ist also weniger ein Bug im EA als vielmehr eine offengelegte fest codierte Annahme über die Umgebung. Umgekehrt bedeutet das: Liest der EA die erlaubten Flags des Symbols aus und wählt dynamisch, funktioniert er bei jedem Broker (Code dazu weiter unten).
Zusammenhang mit dem Ausführungsmodus (SYMBOL_TRADE_EXEMODE)
Neben der Ausführungsart besitzt jedes Symbol auch einen Ausführungsmodus, der beeinflusst, welche Ausführungsarten überhaupt sinnvoll sind.
| Ausführungsmodus | Konstante | Typisch für | Tendenz bei der Ausführungsart |
|---|---|---|---|
| Instant | SYMBOL_TRADE_EXECUTION_INSTANT | Manche FX-Broker (häufig bei DD) | Ausführung zum angegebenen Preis. Welt von FOK/IOC + Requotes |
| Market | SYMBOL_TRADE_EXECUTION_MARKET | Viele FX/CFDs (NDD-Broker) | Marktausführung. FOK oder IOC (je nach Brokereinstellung) |
| Exchange | SYMBOL_TRADE_EXECUTION_EXCHANGE | Aktien, Futures | Ausführung über das Orderbuch. RETURN als Standard |
| Request | SYMBOL_TRADE_EXECUTION_REQUEST | Legacy | Request-Ausführung (heute selten) |
Die genau erlaubten Kombinationen hängen von der Serverkonfiguration des Brokers ab, aber in der Praxis genügt die Faustregel: "Bei FX/CFD mit Market-Ausführung FOK oder IOC, bei börsenbasierten Symbolen RETURN." Auch der Ausführungsmodus lässt sich mit SymbolInfoInteger(_Symbol, SYMBOL_TRADE_EXEMODE) abfragen.
Die 30-Sekunden-Diagnose
① Erlaubte Ausführungsart des Symbols prüfen (MT5-Oberfläche)
Marktübersicht → Symbol mit Rechtsklick → Spezifikation öffnen und die Zeile "Ausführung" (Filling) prüfen. Dort steht Fill or Kill / Immediate or Cancel oder beides. Sendet der EA eine hier nicht aufgeführte Ausführungsart, ist 10030 garantiert.
② Eingabeparameter des EA prüfen
Gut gebaute EAs bieten einen Eingabeparameter wie FillingType / Filling Mode. Ist das der Fall, genügt es, ihn auf die unter ① ermittelte erlaubte Ausführungsart einzustellen – ohne Codeänderung.
③ Per Code prüfen (für Entwickler)
long flags = SymbolInfoInteger(_Symbol, SYMBOL_FILLING_MODE);
PrintFormat("%s filling: FOK=%s IOC=%s exemode=%d",
_Symbol,
((flags & SYMBOL_FILLING_FOK) != 0) ? "yes" : "no",
((flags & SYMBOL_FILLING_IOC) != 0) ? "yes" : "no",
(int)SymbolInfoInteger(_Symbol, SYMBOL_TRADE_EXEMODE));
Führt man dies als Skript aus, zeigt eine einzige Zeile sofort die tatsächlich erlaubten Ausführungsarten für diesen Broker und dieses Symbol.
Dauerhafte Lösung – MQL5-Code zur automatischen Auswahl anhand der Flags
Die richtige Lösung für 10030 lautet nicht "bei jedem Umzug manuell anpassen", sondern: Der EA soll die erlaubten Flags des Symbols selbst auslesen und automatisch wählen. Im Folgenden eine bewährte, direkt einsetzbare Implementierung.
Funktion zur automatischen Erkennung
// Gibt die für dieses Symbol tatsächlich erlaubte Ausführungsart zurück
// Priorität: FOK → IOC → RETURN (Fallback für börsenbasierte Ausführung)
ENUM_ORDER_TYPE_FILLING GetFillingMode(const string symbol)
{
long flags = SymbolInfoInteger(symbol, SYMBOL_FILLING_MODE);
if((flags & SYMBOL_FILLING_FOK) != 0)
return ORDER_FILLING_FOK; // Nur ausführen, wenn die volle Menge möglich ist (keine Teilausführung)
if((flags & SYMBOL_FILLING_IOC) != 0)
return ORDER_FILLING_IOC; // Nur den ausführbaren Teil ausführen, Rest stornieren
return ORDER_FILLING_RETURN; // Keine Flags gesetzt = z. B. börsenbasiert. Mit RETURN senden
}
Verwendung mit OrderSend
MqlTradeRequest req; MqlTradeResult res;
ZeroMemory(req); ZeroMemory(res);
req.action = TRADE_ACTION_DEAL;
req.symbol = _Symbol;
req.volume = lots;
req.type = ORDER_TYPE_BUY;
req.price = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
req.deviation = 20;
req.magic = MagicNumber;
req.type_filling = GetFillingMode(_Symbol); // ← nicht fest codieren
if(!OrderSend(req, res) || res.retcode != TRADE_RETCODE_DONE)
{
if(res.retcode == TRADE_RETCODE_INVALID_FILL) // 10030
PrintFormat("Unsupported filling mode: sent=%d, allowed flags=%d",
(int)req.type_filling,
(int)SymbolInfoInteger(_Symbol, SYMBOL_FILLING_MODE));
else
PrintFormat("OrderSend failed: retcode=%d", res.retcode);
}
So funktioniert dieselbe Binärdatei sowohl bei Brokern, die nur FOK erlauben, als auch bei solchen, die nur IOC erlauben – ganz ohne manuelle Anpassung bei jedem Wechsel.
Bei Verwendung von CTrade
Die Standardbibliothek CTrade stellt die Methode SetTypeFillingBySymbol() bereit, die die Ausführungsart automatisch anhand der erlaubten Flags des Symbols setzt.
#include <Trade/Trade.mqh>
CTrade trade;
int OnInit()
{
trade.SetExpertMagicNumber(MagicNumber);
trade.SetTypeFillingBySymbol(_Symbol); // Erlaubte Flags auslesen und automatisch setzen
return INIT_SUCCEEDED;
}
EAs, bei denen 10030 durch die alte, fest codierte Variante trade.SetTypeFilling(ORDER_FILLING_FOK); verursacht wird, lassen sich durch diese eine Zeile beheben. Wer die Auswahl manuell steuern möchte, kann auch das Ergebnis der oben gezeigten GetFillingMode() an SetTypeFilling() übergeben – mit demselben Effekt.
Hinweis zur Verwendung von Limit-Orders (BOC)
ORDER_FILLING_BOC (Book or Cancel) ist ausschließlich für Limit- und Stop-Limit-Orders gedacht und wird abgelehnt, wenn der angegebene Preis zu einer sofortigen Ausführung führen würde. Bei Market-Orders ist die Angabe falsch – bei EAs mit Market-Ausführung muss BOC daher nicht als Option berücksichtigt werden.
Hinweise zum Broker (erneute Prüfung beim Wechsel)
- Die erlaubten Ausführungsarten unterscheiden sich nicht nur zwischen Brokern, sondern auch innerhalb desselben Brokers zwischen Symbolgruppen. Es ist völlig normal, dass FX IOC erlaubt, Aktien-CFDs hingegen nur RETURN.
- Auch ein Kontotyp- oder Serverwechsel kann die Einstellung verändern. Nicht nur ein Brokerwechsel, sondern auch eine Servermigration, ein Kontotypwechsel oder eine Änderung der Symbolspezifikation innerhalb desselben Brokers kann dazu führen, dass 10030 plötzlich auftritt.
- Als Betriebsregel empfiehlt es sich daher, "bei jeder Änderung von Konto, Server oder Symbol die Ausführungsart erneut in der Spezifikation (oder per Skript) zu prüfen" zur Gewohnheit zu machen. Bei einem EA mit automatischer Erkennung im Code entfällt diese Prüfung ohnehin.
Angaben wie "bei diesem Broker ist für dieses Symbol nur FOK erlaubt" veralten schnell durch Änderungen der Serverkonfiguration und werden in diesem Artikel daher nicht aufgelistet. Prüfen Sie dies unbedingt anhand der Symbolspezifikation Ihres eigenen Kontos.
Prioritäten-Checkliste
| Priorität | Prüfung | Maßnahme |
|---|---|---|
| 🚨 Zuerst | Stimmt das Feld "Ausführung" in der Symbolspezifikation mit der Angabe des EA überein? | An die erlaubte Ausführungsart anpassen |
| 🚨 Zuerst | Besitzt der EA einen FillingType-Eingabeparameter? | Löst sich allein durch Ändern des Parameters (kein Code nötig) |
| ⚠️ Danach | Ist type_filling im EA-Code fest codiert? | Durch GetFillingMode() / SetTypeFillingBySymbol() ersetzen |
| ⚠️ Danach | Wurde Broker, Server oder Kontotyp gewechselt? | Nach jeder Änderung die Spezifikation erneut prüfen |
| ✅ Prüfen | Unterschied im Ausführungsmodus (Instant/Market/Exchange) | Bei börsenbasierten Symbolen gilt RETURN als Standard |
| 🛠 Entwicklung | Wird 10030 anhand des retcode gezielt behandelt? | Gesendete Ausführungsart und erlaubte Flags loggen |
Fazit
Unsupported filling mode(10030 / TRADE_RETCODE_INVALID_FILL) ist eine serverseitige Ablehnung, wenn dastype_filling(FOK / IOC / RETURN / BOC) einer Order für dieses Symbol nicht erlaubt ist. Kontostand und Lotgröße spielen keine Rolle.- Da die erlaubten Ausführungsarten je nach Broker und Symbol unterschiedlich sind, werfen EAs mit fest codiertem type_filling am Tag des Brokerwechsels reihenweise 10030 – das klassische Muster dieses Fehlers.
- Anwender lösen das Problem sofort durch "Feld 'Ausführung' in der Symbolspezifikation prüfen → EA-Eingabeparameter anpassen". Entwickler erreichen eine dauerhafte Lösung, indem sie die Flags von
SymbolInfoInteger(SYMBOL_FILLING_MODE)auslesen und automatisch wählen (oderCTrade::SetTypeFillingBySymbol()verwenden).
Eine Gesamtübersicht aller Fehlercodes findet sich im umfassenden Leitfaden zu MQL5-/MT5-Fehlercodes. Die von FXEA365 vertriebenen EAs implementieren die automatische Erkennung der Ausführungsart und funktionieren unabhängig vom Broker (EA-Übersicht).
FAQ
F: Ein EA, der bis gestern lief, platziert nach dem Brokerwechsel wegen 10030 überhaupt keine Orders mehr. Ist der EA defekt?
Nein, der EA ist nicht defekt. Die vom EA angegebene Ausführungsart (z. B. FOK) wird für dieses Symbol beim neuen Broker einfach nicht akzeptiert. Prüfen Sie das Feld "Ausführung" in der Symbolspezifikation, passen Sie den EA-Eingabeparameter (z. B. FillingType) entsprechend an, oder stellen Sie den Code auf automatische Erkennung um – dann funktioniert alles wie zuvor.
F: Sollte man FOK oder IOC verwenden?
Erlaubt das Symbol beide, zeigt sich der Unterschied im Verhalten nur bei "unzureichender Liquidität". FOK storniert die gesamte Order, wenn nicht die volle Menge ausgeführt werden kann (keine halbfertigen Positionen), IOC hält, was tatsächlich ausgeführt wurde (Teilausführungen sind möglich). Bei den üblichen Lotgrößen im privaten FX-Handel ist Liquiditätsmangel ohnehin selten, sodass es in der Praxis kaum einen Unterschied macht. Wie im Code zur automatischen Erkennung ist eine Priorisierung von FOK unproblematisch.
F: Im Backtest tritt 10030 nicht auf, aber auf dem Echtkonto schon.
Die Ausführungslogik des Strategy Tester bildet die Servereinstellungen nicht vollständig ab, sodass eine falsche type_filling-Angabe im Test möglicherweise nicht zutage tritt. Prüfen Sie beim ersten Einsatz auf einem Echt- oder Demokonto zunächst das Feld "Ausführung" in der Symbolspezifikation.
F: Beim selben Broker tritt 10030 je nach Symbol mal auf, mal nicht.
Das ist normales (und mögliches) Verhalten. Die erlaubten Ausführungsarten werden pro Symbol festgelegt, sodass sich Symbolgruppen unterscheiden können – etwa FX-Paare mit erlaubtem IOC, Aktien-CFDs hingegen nur mit RETURN. EAs, die mehrere Symbole handeln, müssen SYMBOL_FILLING_MODE unbedingt für jedes Symbol einzeln auslesen.
F: Ich kann den EA-Code nicht ändern (nur .ex5 vorhanden). Was tun?
Prüfen Sie zunächst, ob der EA einen Eingabeparameter vom Typ FillingType besitzt. Ist das nicht der Fall, lässt sich dieser EA beim aktuellen Broker für dieses Symbol nicht verwenden. Wenden Sie sich an den Entwickler, oder betreiben Sie den EA bei einem Broker bzw. Kontotyp, der die vom EA vorausgesetzte Ausführungsart erlaubt.
Verwandt
📧 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.