Unsupported filling mode (erro 10030 do MT5)
Sumário
- O que é o 10030 (TRADE_RETCODE_INVALID_FILL)
- Os 4 tipos de modo de preenchimento (type_filling)
- Por que a ordem é "inválida" — SYMBOL_FILLING_MODE
- Por que o erro aparece "no dia em que você troca de corretora"
- Relação com o modo de execução (SYMBOL_TRADE_EXEMODE)
- Diagnóstico rápido em 30 segundos
- ① Verifique o modo permitido do símbolo (na tela do MT5)
- ② Verifique os parâmetros de entrada do EA
- ③ Verifique via código (para desenvolvedores)
- Solução definitiva — código MQL5 que lê a flag e escolhe automaticamente
- Função de detecção automática
- Uso no OrderSend
- Se você usa a CTrade
- Cuidado ao usar ordens limitadas (BOC)
- Observações sobre corretoras (reverificação ao migrar)
- Checklist de prioridades
- Resumo
- Perguntas frequentes
- P: Meu EA funcionava normalmente até ontem, mas depois de trocar de corretora não envia mais nenhuma ordem por causa do erro 10030. O EA está com defeito?
- P: Devo usar FOK ou IOC?
- P: O erro 10030 não aparece no backtest, mas ocorre na conta real.
- P: Na mesma corretora, o erro 10030 aparece em alguns símbolos e em outros não.
- P: Não posso alterar o código do EA (só tenho o arquivo .ex5). O que fazer?
Unsupported filling mode (erro 10030 do MT5): a solução definitiva
Um EA que funcionava normalmente em outra corretora até ontem é migrado para uma nova conta e, de repente, a aba Expert só exibe Unsupported filling mode e OrderSend error 10030 — nenhuma ordem é enviada. Este é um dos problemas mais clássicos de migração de corretora na operação de EAs no MT5. O EA não quebrou e a conta não tem problema nenhum. O modo de preenchimento (filling mode) especificado na ordem simplesmente não é permitido para esse símbolo na nova corretora. Só isso.
Este artigo é voltado tanto para quem usa EAs no MT5 quanto para quem programa EAs em MQL5, e reúne em um só lugar o que é, na prática, o TRADE_RETCODE_INVALID_FILL (10030), o significado de FOK/IOC/RETURN, uma verificação de 30 segundos e a solução definitiva no código. Para a lista completa de códigos de erro, consulte o guia completo de códigos de erro do MQL5 / MT5.
Este artigo tem como referência o MT5 (série de builds 4xxx) de julho de 2026. Os nomes de tela e a nomenclatura podem variar ligeiramente entre corretoras e builds.
O que é o 10030 (TRADE_RETCODE_INVALID_FILL)
O resultado de OrderSend() é retornado em MqlTradeResult.retcode. O valor 10030 = TRADE_RETCODE_INVALID_FILL retornado ali é uma notificação de rejeição do lado do servidor, indicando que "o type_filling (modo de preenchimento) especificado na requisição não é permitido para esse símbolo".
Significado: o tipo de preenchimento (filling type) especificado não é suportado
Constante: TRADE_RETCODE_INVALID_FILL
Valor: 10030
Exibição: Unsupported filling mode / Invalid order filling type
// Exemplo típico de saída visível no 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]
O ponto principal é que capital, lote e preço não têm relação alguma com o erro. O 10030 é um problema exclusivo do campo MqlTradeRequest.type_filling da requisição — basta corrigir esse único ponto para que a mesma ordem passe a ser executada normalmente.
Os 4 tipos de modo de preenchimento (type_filling)
O ENUM_ORDER_TYPE_FILLING do MQL5 possui quatro valores.
| Constante | Nome comum | Significado |
|---|---|---|
ORDER_FILLING_FOK | Fill or Kill | Executa somente se for possível preencher o volume total. Se uma ordem de 1 lote encontrar liquidez para apenas 0,7 lote, a ordem inteira é cancelada |
ORDER_FILLING_IOC | Immediate or Cancel | Executa imediatamente apenas a parte que puder ser preenchida e cancela o restante. Se 0,7 lote for executado, os 0,3 lote restantes são descartados |
ORDER_FILLING_RETURN | Return | Executa a parte possível e o volume restante permanece como ordem pendente no book (aguardando execução adicional). Usado em execuções do tipo bolsa |
ORDER_FILLING_BOC | Book or Cancel | Aceita a ordem somente se ela for colocada no book de forma passiva (aguardando); se o preço causar execução imediata, é rejeitada. Exclusivo para ordens limitadas/stop limit (adicionado em builds mais recentes) |
Na prática, os EAs comuns de Forex utilizam quase sempre FOK ou IOC. O RETURN faz sentido em execuções do tipo bolsa (Exchange execution), como ações e futuros, e o BOC é um caso especial para forçar ordens do tipo maker.
Por que a ordem é "inválida" — SYMBOL_FILLING_MODE
Quais modos de preenchimento são aceitos depende de uma flag configurada pela corretora para cada símbolo (SYMBOL_FILLING_MODE). No MQL5, é possível ler essa informação assim:
long flags = SymbolInfoInteger(_Symbol, SYMBOL_FILLING_MODE);
// Se a flag SYMBOL_FILLING_FOK estiver ativa, FOK é permitido
// Se a flag SYMBOL_FILLING_IOC estiver ativa, IOC é permitido
O SYMBOL_FILLING_MODE é um conjunto de bit flags que indica quais entre FOK e IOC são permitidos (se ambos forem permitidos, as duas flags ficam ativas). O RETURN não está incluído nessa flag; sua disponibilidade depende do modo de execução do símbolo (explicado a seguir).
Ou seja, o mecanismo do 10030 é simples:
type_filling enviado pelo EA ∉ modos de preenchimento permitidos para esse símbolo → 10030
É só isso.
Por que o erro aparece "no dia em que você troca de corretora"
O motivo de o 10030 ser conhecido como "o erro clássico de migração de corretora" é o seguinte:
- Os modos de preenchimento permitidos variam de corretora para corretora e de símbolo para símbolo. Uma corretora pode permitir apenas FOK para símbolos de Forex, outra pode permitir apenas IOC, e outra ainda pode permitir ambos. É comum até mesmo dentro da mesma corretora haver configurações diferentes entre Forex e CFDs de ações.
- Muitos EAs têm o type_filling fixo no código (hardcoded). Um EA escrito, por exemplo, com
request.type_filling = ORDER_FILLING_FOK;pode funcionar por anos numa Corretora A que permite FOK. Como funciona no ambiente do próprio desenvolvedor, o problema acaba não sendo identificado como bug e o EA é distribuído assim mesmo. - Se a Corretora B de destino não permitir FOK, todas as ordens falham desde a primeira tentativa. Muitas vezes isso não aparece no backtest (o comportamento do testador costuma ser mais permissivo do que o servidor real), e o problema só se manifesta "no dia em que o EA é movido para a conta real".
Em resumo, o 10030 é menos um bug do EA e mais a exposição de uma premissa fixa sobre o ambiente. Por outro lado, isso significa que, ao corrigir o EA para ler a flag de permissão do símbolo e escolher o modo dinamicamente, ele passa a funcionar em qualquer corretora (veja o código mais adiante).
Relação com o modo de execução (SYMBOL_TRADE_EXEMODE)
Além do modo de preenchimento, cada símbolo tem um modo de execução, que influencia quais modos de preenchimento fazem sentido.
| Modo de execução | Constante | Típico em | Tendência do modo de preenchimento |
|---|---|---|---|
| Instant | SYMBOL_TRADE_EXECUTION_INSTANT | Algumas corretoras de Forex (comum em modelos DD) | Execução no preço indicado. Mundo de FOK/IOC + requotes |
| Market | SYMBOL_TRADE_EXECUTION_MARKET | A maioria dos Forex/CFDs (modelos NDD) | Execução a mercado. FOK ou IOC (depende da configuração da corretora) |
| Exchange | SYMBOL_TRADE_EXECUTION_EXCHANGE | Ações e futuros | Execução enviada ao book. RETURN é o padrão |
| Request | SYMBOL_TRADE_EXECUTION_REQUEST | Legado | Execução por requisição (hoje raro) |
As combinações exatas permitidas dependem da configuração do servidor de cada corretora, mas na prática basta lembrar que "em execução Market de Forex/CFD, é FOK ou IOC; em modelos do tipo bolsa, é RETURN". O modo de execução também pode ser verificado com SymbolInfoInteger(_Symbol, SYMBOL_TRADE_EXEMODE).
Diagnóstico rápido em 30 segundos
① Verifique o modo permitido do símbolo (na tela do MT5)
Abra Visualização de mercado → clique com o botão direito no símbolo → Especificação (Specification) e veja a linha "Preenchimento" (Filling). Ela mostrará Fill or Kill / Immediate or Cancel / ambos. Se o modo enviado pelo EA não estiver listado ali, o 10030 é certo.
② Verifique os parâmetros de entrada do EA
EAs bem construídos costumam ter uma entrada como FillingType / Filling Mode. Se existir, basta ajustá-la conforme o modo permitido verificado no passo ① para resolver o problema (sem necessidade de alterar código).
③ Verifique via código (para desenvolvedores)
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));
Ao executar isso em um script, você obtém em uma única linha o modo realmente permitido para aquela corretora e aquele símbolo.
Solução definitiva — código MQL5 que lê a flag e escolhe automaticamente
A forma correta de resolver o 10030 não é "ajustar manualmente a cada migração", mas sim fazer o próprio EA ler a flag de permissão do símbolo e escolher automaticamente. A seguir está uma implementação padrão pronta para uso.
Função de detecção automática
// Retorna o modo de preenchimento realmente permitido para o símbolo
// Ordem de prioridade: FOK → IOC → RETURN (fallback para modelos do tipo bolsa)
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; // executa somente se o volume total puder ser preenchido (sem preenchimento parcial)
if((flags & SYMBOL_FILLING_IOC) != 0)
return ORDER_FILLING_IOC; // executa apenas a parte possível, cancelando o restante
return ORDER_FILLING_RETURN; // sem flags = modelo do tipo bolsa etc. Envia com RETURN
}
Uso no 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); // ← não fixar no código
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);
}
Com isso, o mesmo binário funciona tanto em corretoras exclusivas de FOK quanto exclusivas de IOC. Não é mais necessário ajustar o código a cada migração.
Se você usa a CTrade
A biblioteca padrão CTrade já oferece o método SetTypeFillingBySymbol(), que configura automaticamente o modo de preenchimento a partir das flags de permissão do símbolo.
#include <Trade/Trade.mqh>
CTrade trade;
int OnInit()
{
trade.SetExpertMagicNumber(MagicNumber);
trade.SetTypeFillingBySymbol(_Symbol); // le as flags permitidas e configura automaticamente
return INIT_SUCCEEDED;
}
Se o 10030 estiver ocorrendo por causa do código antigo trade.SetTypeFilling(ORDER_FILLING_FOK); (valor fixo), basta substituí-lo por essa linha para resolver. Se preferir especificar manualmente, também é possível passar o resultado de GetFillingMode() (apresentado acima) para SetTypeFilling(), obtendo o mesmo efeito.
Cuidado ao usar ordens limitadas (BOC)
O ORDER_FILLING_BOC (Book or Cancel) é exclusivo para ordens limitadas e stop limit; se o preço especificado causar execução imediata, a ordem é rejeitada. Usá-lo em ordens a mercado é um erro, então não há necessidade de incluir o BOC como opção em EAs baseados em ordens a mercado.
Observações sobre corretoras (reverificação ao migrar)
- A configuração de modos de preenchimento permitidos não varia apenas entre corretoras, mas também entre símbolos (grupos de instrumentos) dentro da mesma corretora. É comum, por exemplo, que Forex permita IOC enquanto CFDs de ações permitam apenas RETURN.
- A configuração também pode mudar com a troca de tipo de conta ou de servidor. Além da migração de corretora, casos em que o 10030 passa a ocorrer de repente após uma realocação de servidor, mudança de tipo de conta ou revisão das especificações de um instrumento — tudo dentro da mesma corretora — também são possíveis.
- Portanto, a regra operacional mais segura é adotar o hábito de "sempre que a conta, o servidor ou o símbolo mudar, reverificar o modo de preenchimento na tela de especificações (ou via script)". Um EA com o código de detecção automática elimina a necessidade dessa verificação manual.
Informações específicas do tipo "esta corretora permite apenas FOK para este símbolo" ficam desatualizadas rapidamente com mudanças de configuração do servidor, por isso não são listadas neste artigo. Sempre verifique a especificação do símbolo diretamente na sua própria conta.
Checklist de prioridades
| Prioridade | Verificação | Solução |
|---|---|---|
| 🚨 Primeiro | O campo "Preenchimento" da especificação do símbolo coincide com o modo enviado pelo EA? | Ajustar para o modo permitido |
| 🚨 Primeiro | O EA possui um parâmetro de entrada FillingType? | Resolver apenas alterando a entrada (sem precisar de código) |
| ⚠️ Depois | O type_filling está fixo (hardcoded) no código do EA? | Substituir por GetFillingMode() / SetTypeFillingBySymbol() |
| ⚠️ Depois | Houve migração de corretora, troca de servidor ou de tipo de conta? | Sempre reverificar a especificação após a mudança |
| ✅ Verificar | Diferença entre modos de execução (Instant/Market/Exchange) | Instrumentos do tipo bolsa geralmente exigem RETURN |
| 🛠 Desenvolvimento | O erro 10030 está sendo tratado individualmente pelo retcode? | Registrar em log o modo enviado e as flags permitidas |
Resumo
- O
Unsupported filling mode(10030 / TRADE_RETCODE_INVALID_FILL) é uma rejeição do servidor quando otype_filling(FOK / IOC / RETURN / BOC) da ordem não é permitido para aquele símbolo. Capital e lote não têm relação com o erro. - Como os modos permitidos variam entre corretoras e entre símbolos, EAs com type_filling fixo no código costumam disparar o 10030 em massa justamente no dia da migração de corretora. Esse é o padrão clássico desse erro.
- Para o usuário, a solução imediata é "conferir o campo de preenchimento na especificação do símbolo → ajustar a entrada do EA". Para o desenvolvedor, a solução definitiva é ler as flags de
SymbolInfoInteger(SYMBOL_FILLING_MODE)e escolher automaticamente (ou usarCTrade::SetTypeFillingBySymbol()).
Para a lista completa de códigos de erro, consulte o guia completo de códigos de erro do MQL5 / MT5. Os EAs distribuídos pela FXEA365 implementam a detecção automática do modo de preenchimento e funcionam independentemente da corretora (lista de EAs).
Perguntas frequentes
P: Meu EA funcionava normalmente até ontem, mas depois de trocar de corretora não envia mais nenhuma ordem por causa do erro 10030. O EA está com defeito?
Não é defeito. O modo de preenchimento especificado pelo EA (por exemplo, FOK) simplesmente não é permitido para esse símbolo na nova corretora. Verifique o campo "Preenchimento" na especificação do símbolo e ajuste a entrada do EA (como FillingType) para corresponder, ou corrija o código para detecção automática — com isso, o EA volta a funcionar normalmente.
P: Devo usar FOK ou IOC?
Se o símbolo permitir ambos, a diferença de comportamento aparece "quando a liquidez é insuficiente". No FOK, se o volume total não puder ser preenchido, a ordem inteira é cancelada (a posição nunca fica pela metade); no IOC, apenas a parte que puder ser executada é mantida (pode haver preenchimento parcial). Para o tamanho de lote típico de um trader pessoal de Forex, a falta de liquidez em si é rara, então na prática a diferença costuma ser irrelevante. Dar prioridade ao FOK, como no código de detecção automática, não traz problemas.
P: O erro 10030 não aparece no backtest, mas ocorre na conta real.
O processamento de preenchimento do Strategy Tester não reproduz totalmente a configuração do servidor real, então a incompatibilidade de type_filling pode não aparecer no teste. Na primeira execução em conta real ou demo, verifique primeiro o campo de preenchimento na especificação do símbolo.
P: Na mesma corretora, o erro 10030 aparece em alguns símbolos e em outros não.
Isso é um comportamento normal (esperado). Como a permissão do modo de preenchimento é uma configuração por símbolo, é comum que pares de Forex permitam IOC enquanto CFDs de ações permitam apenas RETURN, variando por grupo de instrumento. EAs multi-símbolo devem sempre ler o SYMBOL_FILLING_MODE individualmente para cada símbolo.
P: Não posso alterar o código do EA (só tenho o arquivo .ex5). O que fazer?
Primeiro, verifique se o EA tem algum parâmetro de entrada relacionado a FillingType. Se não houver, esse EA não poderá ser usado nesse símbolo, nessa corretora. Será necessário solicitar uma correção ao desenvolvedor ou operar em uma corretora/tipo de conta que permita o modo de preenchimento pressuposto pelo EA.
Relacionados
📧 Avisos antes de aumentos de preço + curso gratuito de 5 dias por e-mail
Todos os EAs estão em preço de lançamento e sobem em degraus conforme as vendas. Receba aviso antes de cada aumento, além de um e-mail diário sobre trading algorítmico, leitura de backtests e escolha de corretora.
* Privacidade rigorosamente protegida. Você pode cancelar a inscrição a qualquer momento.