Unsupported filling mode (MT5, erreur 10030)
Sommaire
- Qu'est-ce que le code 10030 (TRADE_RETCODE_INVALID_FILL) ?
- Les 4 types de mode d'exécution (type_filling)
- Pourquoi cette erreur survient-elle — SYMBOL_FILLING_MODE
- Pourquoi cette erreur apparaît-elle « le jour du changement de broker » ?
- Le lien avec le mode d'exécution (SYMBOL_TRADE_EXEMODE)
- Diagnostic rapide en 30 secondes
- ① Consulter le mode autorisé pour le symbole (interface MT5)
- ② Vérifier les paramètres d'entrée de l'EA
- ③ Vérifier via le code (pour les développeurs)
- Solution pérenne — code MQL5 pour une sélection automatique selon les flags d'autorisation
- Fonction de détection automatique
- Utilisation avec OrderSend
- Si vous utilisez CTrade
- Attention en cas d'utilisation d'un ordre à cours limité (BOC)
- Points d'attention côté broker (à revérifier lors d'un changement)
- Liste de contrôle par priorité
- Résumé
- FAQ
- Q : Un EA qui fonctionnait normalement la veille ne peut plus passer aucun ordre après un changement de broker, avec l'erreur 10030. L'EA est-il défectueux ?
- Q : Faut-il privilégier FOK ou IOC ?
- Q : L'erreur n'apparaît pas en backtest mais survient sur compte réel.
- Q : Chez le même broker, l'erreur 10030 apparaît sur certains symboles mais pas sur d'autres.
- Q : Impossible de modifier le code de l'EA (fichier .ex5 uniquement). Que faire ?
Résoudre définitivement l'erreur Unsupported filling mode (MT5, erreur 10030)
Un EA qui fonctionnait normalement la veille chez un autre broker, et qui, dès son transfert sur un nouveau compte, affiche des Unsupported filling mode ou OrderSend error 10030 en rafale dans l'onglet Expert — au point de ne plus pouvoir passer un seul ordre — c'est l'un des problèmes les plus classiques lors d'un changement de broker sous MT5. L'EA n'est pas cassé, et le compte n'a aucun problème. Le mode d'exécution des ordres (filling mode) spécifié n'est tout simplement pas autorisé pour ce symbole chez le nouveau broker.
Cet article s'adresse aussi bien aux utilisateurs d'EA sous MT5 qu'aux développeurs MQL5. Il rassemble en un seul guide définitif : la nature exacte de TRADE_RETCODE_INVALID_FILL (10030), la signification de FOK/IOC/RETURN, une vérification possible en 30 secondes, et une solution pérenne côté code. Pour la liste complète des codes d'erreur, consultez le guide complet des codes d'erreur MQL5 / MT5.
Cet article se base sur MT5 (build 4xxx) à la date de juillet 2026. Les noms d'écrans et libellés peuvent légèrement varier selon le broker ou la build.
Qu'est-ce que le code 10030 (TRADE_RETCODE_INVALID_FILL) ?
Le résultat d'un OrderSend() est renvoyé dans MqlTradeResult.retcode. Le code 10030 = TRADE_RETCODE_INVALID_FILL qui y apparaît est un refus émis par le serveur signifiant que le type_filling (mode d'exécution) indiqué dans la requête n'est pas autorisé pour ce symbole.
Signification : le type d'exécution (filling type) spécifié n'est pas supporté
Constante : TRADE_RETCODE_INVALID_FILL
Valeur : 10030
Affichage : Unsupported filling mode / Invalid order filling type
// Exemple typique de sortie visible dans le journal
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]
Il est essentiel de comprendre que le capital, le lot ou le prix n'ont strictement rien à voir avec cette erreur. Le code 10030 concerne uniquement le champ MqlTradeRequest.type_filling de la requête ; une fois ce point corrigé, le même ordre passe sans problème.
Les 4 types de mode d'exécution (type_filling)
L'énumération MQL5 ENUM_ORDER_TYPE_FILLING comporte quatre valeurs.
| Constante | Nom courant | Signification |
|---|---|---|
ORDER_FILLING_FOK | Fill or Kill | Exécution uniquement si la totalité du volume peut être servie. Si seulement 0,7 lot de liquidité est disponible pour un ordre de 1 lot, l'ordre entier est annulé |
ORDER_FILLING_IOC | Immediate or Cancel | Exécution immédiate de la partie disponible, le reste est annulé. Si seuls 0,7 lot peuvent être exécutés, les 0,3 lot restants disparaissent |
ORDER_FILLING_RETURN | Return | La partie exécutable est traitée, et le volume restant demeure dans le carnet d'ordres (en attente d'une exécution ultérieure). Utilisé pour les exécutions de type bourse |
ORDER_FILLING_BOC | Book or Cancel | Accepté uniquement s'il rejoint le carnet d'ordres (exécution passive), refusé si le prix entraînerait une exécution immédiate. Réservé aux ordres limites/stop limites (ajouté dans les builds récentes) |
Pour un EA Forex classique, on utilise pratiquement toujours FOK ou IOC. RETURN a un sens pour les exécutions de type bourse (Exchange execution), utilisées notamment pour les actions et les futures, tandis que BOC est réservé à des usages spécifiques visant à forcer un ordre passif (maker).
Pourquoi cette erreur survient-elle — SYMBOL_FILLING_MODE
Le mode d'exécution accepté dépend d'un indicateur défini par le broker pour chaque symbole (SYMBOL_FILLING_MODE). En MQL5, on peut le lire ainsi :
long flags = SymbolInfoInteger(_Symbol, SYMBOL_FILLING_MODE);
// Si le flag SYMBOL_FILLING_FOK est actif, FOK est autorisé
// Si le flag SYMBOL_FILLING_IOC est actif, IOC est autorisé
SYMBOL_FILLING_MODE est un champ de bits qui indique les autorisations pour FOK et IOC (si les deux sont autorisés, les deux flags sont actifs). RETURN n'est pas inclus dans ce flag ; sa disponibilité dépend du mode d'exécution du symbole (voir plus loin).
En résumé, le schéma de l'erreur 10030 est simple :
type_filling envoyé par l'EA ∉ modes d'exécution autorisés pour ce symbole → 10030
C'est tout.
Pourquoi cette erreur apparaît-elle « le jour du changement de broker » ?
Voici pourquoi le code 10030 est considéré comme « l'erreur classique du changement de broker ».
- Les modes d'exécution autorisés varient selon le broker et selon le symbole. Un broker peut n'autoriser que FOK pour les symboles Forex, un autre uniquement IOC, un troisième les deux. Même chez un seul et même broker, il est courant que la configuration diffère entre le Forex et les CFD actions.
- De nombreux EA codent le type_filling en dur. Un EA écrit avec
request.type_filling = ORDER_FILLING_FOK;, par exemple, fonctionnera pendant des années chez un broker A qui autorise FOK. Comme il fonctionne dans l'environnement de son auteur, ce défaut n'est jamais identifié comme un bug et l'EA est distribué tel quel. - Si le broker B de destination n'autorise pas FOK, tous les ordres échouent dès le premier envoi. Ce comportement n'apparaît souvent pas en backtest (le comportement du testeur est plus permissif que le serveur réel) et ne se révèle donc que le jour du passage sur le compte réel.
Le code 10030 n'est donc pas tant un bug de l'EA qu'une hypothèse figée sur l'environnement qui se révèle au grand jour. À l'inverse, si l'EA lit dynamiquement les flags d'autorisation du symbole, il fonctionnera chez n'importe quel broker (voir le code plus bas).
Le lien avec le mode d'exécution (SYMBOL_TRADE_EXEMODE)
Indépendamment du mode d'exécution des ordres, chaque symbole possède un mode d'exécution (execution mode) qui influence la pertinence de chaque type_filling.
| Mode d'exécution | Constante | Cas typique | Tendance des modes d'exécution |
|---|---|---|---|
| Instant | SYMBOL_TRADE_EXECUTION_INSTANT | Certains Forex (souvent chez les brokers DD) | Exécution au prix indiqué. Univers FOK/IOC + requotes |
| Market | SYMBOL_TRADE_EXECUTION_MARKET | La plupart des Forex/CFD (brokers NDD) | Exécution au marché. FOK ou IOC (selon la configuration du broker) |
| Exchange | SYMBOL_TRADE_EXECUTION_EXCHANGE | Actions, futures | Exécution transmise au carnet d'ordres. RETURN par défaut |
| Request | SYMBOL_TRADE_EXECUTION_REQUEST | Historique | Exécution sur requête (rare aujourd'hui) |
La combinaison exacte des autorisations dépend de la configuration serveur du broker, mais en pratique il suffit de retenir : « pour une exécution Market en Forex/CFD, c'est FOK ou IOC ; pour un actif de type bourse, c'est RETURN par défaut ». Le mode d'exécution peut également être vérifié via SymbolInfoInteger(_Symbol, SYMBOL_TRADE_EXEMODE).
Diagnostic rapide en 30 secondes
① Consulter le mode autorisé pour le symbole (interface MT5)
Dans Cotations → clic droit sur le symbole → Spécification (Specification), repérez la ligne « Exécution » (Filling). Elle affiche Fill or Kill, Immediate or Cancel, ou les deux. Si l'EA envoie un mode qui n'apparaît pas ici, l'erreur 10030 est certaine.
② Vérifier les paramètres d'entrée de l'EA
Un EA bien conçu propose souvent un paramètre d'entrée du type FillingType / Filling Mode. Si c'est le cas, il suffit d'ajuster ce paramètre selon le mode autorisé identifié en ① — aucune modification de code n'est nécessaire.
③ Vérifier via le code (pour les développeurs)
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));
En exécutant ce code via un script, vous obtenez en une seule ligne l'état réel des autorisations pour ce broker et ce symbole.
Solution pérenne — code MQL5 pour une sélection automatique selon les flags d'autorisation
La bonne façon de corriger l'erreur 10030 n'est pas de réajuster manuellement à chaque changement de broker, mais de faire lire à l'EA lui-même les flags d'autorisation du symbole afin qu'il choisisse automatiquement le bon mode. Voici une implémentation standard, prête à l'emploi.
Fonction de détection automatique
// Retourne le mode d'exécution réellement autorisé pour ce symbole
// Ordre de priorité : FOK → IOC → RETURN (repli pour les exécutions de type bourse)
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; // Exécution uniquement si le volume total peut être servi (pas d'exécution partielle)
if((flags & SYMBOL_FILLING_IOC) != 0)
return ORDER_FILLING_IOC; // Exécution de la part disponible, le reste est annulé
return ORDER_FILLING_RETURN; // Aucun flag = type bourse, etc. Envoi en RETURN
}
Utilisation avec 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); // ← ne pas coder en dur
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);
}
Avec ce code, le même binaire fonctionne aussi bien chez un broker exigeant FOK que chez un broker exigeant IOC, sans nécessiter d'ajustement à chaque migration.
Si vous utilisez CTrade
La bibliothèque standard CTrade propose la méthode SetTypeFillingBySymbol(), qui configure automatiquement le mode d'exécution à partir des flags d'autorisation du symbole.
#include <Trade/Trade.mqh>
CTrade trade;
int OnInit()
{
trade.SetExpertMagicNumber(MagicNumber);
trade.SetTypeFillingBySymbol(_Symbol); // Lecture des flags et configuration automatique
return INIT_SUCCEEDED;
}
Si l'ancienne écriture trade.SetTypeFilling(ORDER_FILLING_FOK); (valeur figée) est à l'origine de l'erreur 10030, il suffit de la remplacer par cette seule ligne pour résoudre le problème. Pour une configuration manuelle, il suffit également de transmettre le résultat de GetFillingMode() présentée plus haut à SetTypeFilling(), avec le même effet.
Attention en cas d'utilisation d'un ordre à cours limité (BOC)
ORDER_FILLING_BOC (Book or Cancel) est réservé aux ordres limites et stop limites ; il est refusé si le prix indiqué entraînerait une exécution immédiate. L'utiliser pour un ordre au marché est une erreur : il n'y a donc pas lieu d'inclure BOC parmi les options d'un EA fonctionnant en ordres au marché.
Points d'attention côté broker (à revérifier lors d'un changement)
- Les autorisations de mode d'exécution varient non seulement d'un broker à l'autre, mais aussi d'un symbole (groupe d'instruments) à l'autre chez un même broker. Il est courant qu'IOC soit autorisé pour le Forex, mais que seul RETURN soit disponible pour les CFD actions.
- Un changement de type de compte ou de serveur peut aussi modifier la configuration. Au-delà d'un simple changement de broker, l'erreur 10030 peut apparaître soudainement après une migration de serveur, un changement de type de compte, ou une révision des spécifications d'un symbole, même chez un broker inchangé.
- Il est donc conseillé d'adopter comme règle : « dès qu'un compte, un serveur ou un symbole change, revérifier le mode d'exécution via l'écran de spécification (ou un script) ». Avec un EA intégrant la détection automatique, cette vérification devient d'ailleurs inutile.
Les informations spécifiques du type « ce broker n'autorise que FOK pour ce symbole » deviennent rapidement obsolètes suite aux changements de configuration serveur ; elles ne sont donc pas listées dans cet article. Vérifiez impérativement les spécifications du symbole sur votre propre compte.
Liste de contrôle par priorité
| Priorité | Vérification | Action |
|---|---|---|
| 🚨 En premier | Le champ « Exécution » de la spécification du symbole correspond-il au mode indiqué par l'EA ? | Aligner sur le mode autorisé |
| 🚨 En premier | L'EA dispose-t-il d'un paramètre d'entrée FillingType ? | Il suffit de modifier ce paramètre (aucun code requis) |
| ⚠️ Ensuite | Le type_filling est-il codé en dur dans le code de l'EA ? | Le remplacer par GetFillingMode() / SetTypeFillingBySymbol() |
| ⚠️ Ensuite | Y a-t-il eu un changement de broker, de serveur ou de type de compte ? | Revérifier systématiquement les spécifications après tout changement |
| ✅ À vérifier | Différence de mode d'exécution (Instant/Market/Exchange) | Pour les instruments de type bourse, RETURN est la référence |
| 🛠 Développement | Le code 10030 est-il géré individuellement via le retcode ? | Journaliser le mode envoyé et les flags autorisés |
Résumé
- L'erreur
Unsupported filling mode(10030 / TRADE_RETCODE_INVALID_FILL) correspond à un refus du serveur lorsque letype_fillingde l'ordre (FOK / IOC / RETURN / BOC) n'est pas autorisé pour ce symbole. Le capital ou la taille du lot n'ont aucun rapport avec cette erreur. - Les modes autorisés varient selon le broker et selon le symbole ; un EA codant le type_filling en dur produira donc en masse des erreurs 10030 le jour d'un changement de broker. C'est le scénario classique de cette erreur.
- Pour l'utilisateur, la solution immédiate consiste à consulter le champ « Exécution » des spécifications du symbole puis à ajuster le paramètre d'entrée de l'EA. Pour le développeur, la solution pérenne consiste à lire les flags via
SymbolInfoInteger(SYMBOL_FILLING_MODE)pour une sélection automatique (ou à utiliserCTrade::SetTypeFillingBySymbol()).
Pour l'ensemble des codes d'erreur, consultez le guide complet des codes d'erreur MQL5 / MT5. Les EA distribués par FXEA365 intègrent la détection automatique du mode d'exécution et fonctionnent quel que soit le broker (liste des EA).
FAQ
Q : Un EA qui fonctionnait normalement la veille ne peut plus passer aucun ordre après un changement de broker, avec l'erreur 10030. L'EA est-il défectueux ?
Non, l'EA n'est pas défectueux. Le mode d'exécution indiqué par l'EA (par exemple FOK) n'est simplement pas autorisé pour ce symbole chez le nouveau broker. Vérifiez le champ « Exécution » des spécifications du symbole, ajustez le paramètre d'entrée de l'EA (FillingType, etc.), ou modifiez le code pour une détection automatique : l'EA fonctionnera de nouveau normalement.
Q : Faut-il privilégier FOK ou IOC ?
Si le symbole autorise les deux, la différence de comportement n'apparaît qu'en cas de liquidité insuffisante. Avec FOK, l'ordre entier est annulé si le volume total ne peut pas être exécuté (pas de position partielle) ; avec IOC, seule la partie exécutable est conservée (une exécution partielle est possible). Pour les tailles de lot habituelles d'un trader particulier en Forex, le manque de liquidité étant rare, la différence pratique entre les deux est minime. Il n'y a donc aucun problème à privilégier FOK en priorité, comme le fait le code de détection automatique.
Q : L'erreur n'apparaît pas en backtest mais survient sur compte réel.
Le traitement de l'exécution du testeur de stratégies ne reproduit pas fidèlement la configuration du serveur réel ; une incohérence de type_filling peut donc rester invisible lors des tests. Lors de la première exécution sur un compte réel ou démo, vérifiez en priorité le champ « Exécution » des spécifications du symbole.
Q : Chez le même broker, l'erreur 10030 apparaît sur certains symboles mais pas sur d'autres.
C'est un comportement normal (et possible). L'autorisation du mode d'exécution étant définie par symbole, il est courant que les paires Forex autorisent IOC alors que seuls les CFD actions autorisent RETURN, selon le groupe d'instruments. Pour un EA multi-symboles, veillez à toujours lire SYMBOL_FILLING_MODE séparément pour chaque symbole.
Q : Impossible de modifier le code de l'EA (fichier .ex5 uniquement). Que faire ?
Vérifiez d'abord si l'EA propose un paramètre d'entrée de type FillingType. Si ce n'est pas le cas, cet EA ne peut pas être utilisé pour ce symbole chez ce broker en l'état. Il faut alors demander une correction à l'auteur, ou utiliser l'EA avec un broker/type de compte qui autorise le mode d'exécution attendu par l'EA.
Associés
📧 Alertes avant hausse de prix + cours gratuit de 5 jours par e-mail
Tous les EA sont au prix de lancement et augmentent par paliers selon les ventes. Soyez averti avant chaque hausse, plus un e-mail quotidien sur le trading algo, la lecture des backtests et le choix du courtier.
* Confidentialité strictement protégée. Vous pouvez vous désabonner à tout moment.