Os erros do MetaTrader 5 que travam um robô, e o que cada um quer dizer
Invalid stops, not enough money, market closed, trade disabled, requote: os códigos que aparecem no diário quando uma ordem não sai. O que cada um quer dizer.

Quando o robô manda uma ordem e ela não sai, o servidor da corretora devolve um código, e o terminal escreve o código no Diário (e o robô, se for bem feito, na aba Especialistas). O código diz exatamente o que aconteceu. Este é o dicionário dos que aparecem com mais frequência, com o número que o MetaTrader 5 usa, o que significa e o que fazer. A lista completa está na documentação da MQL5, em "Trade Server Return Codes".
Os que são configuração sua
10027: AutoTrading disabled by client. O botão Algo Trading está desligado, ou o robô não tem permissão no gráfico. Ligue. É o primeiro item de O robô não abre ordens.
10017: Trade disabled. A conta não pode operar: senha de investidor, conta bloqueada, automação não liberada pela corretora. Conecte com a senha de negociação; se persistir, é a corretora.
10014: Invalid volume. O lote não é válido para o símbolo: fração de contrato onde só existe inteiro, abaixo do mínimo, acima do máximo, ou fora do passo. Confira nas propriedades do símbolo (Observação do Mercado → Símbolos → o ativo) o volume mínimo, máximo e o passo, e ajuste o dimensionamento. Sobre o lote: Dimensionamento de posição.
10016: Invalid stops. O mais comum entre os robôs. O stop ou o alvo está do lado errado do preço, ou perto demais: cada símbolo tem uma distância mínima (o "stops level") abaixo da qual o servidor recusa. Um robô que calcula o stop a 5 pontos num ativo com mínimo de 10 recebe este código toda vez. Solução: respeitar a distância mínima do símbolo e, na venda, colocar o stop acima e o alvo abaixo (o erro clássico de sinal trocado).
10015: Invalid price. O preço da ordem pendente não é válido: buy limit acima do preço, buy stop abaixo, preço fora do passo de cotação. A mesma lógica do anterior, para o preço de entrada.

Os que são o mercado ou a conta
10018: Market closed. Fora do pregão, feriado, leilão, ou o símbolo não negocia nesse horário. Não é erro do robô; é o relógio. Um robô que recebe isso em horário de pregão está no contrato errado (vencido) ou a corretora está com o símbolo fechado. Sobre o leilão: Leilão de abertura e fechamento na B3.
10019: Not enough money. A margem exigida para o lote é maior que a disponível. Conta com pouco dinheiro, lote grande demais, ou várias posições já abertas consumindo a margem. Reduza o lote ou o número de estratégias; a conta da margem que a estratégia precisa (que é maior que a da corretora) está em Margem técnica.
10004: Requote. O preço mudou entre a ordem e a execução, e a corretora pede confirmação no novo preço. Acontece em mercado rápido, com ordens a mercado com desvio máximo definido. O robô decide: aceita o novo preço (com limite de desvio) ou desiste. Uma ordem de abertura com desvio zero em mini-índice recebe requote com frequência.
10021: Off quotes. Sem cotação para processar a ordem: o servidor não tem preço no momento. Conexão instável, símbolo parado, abertura. Tentar de novo depois de alguns segundos costuma resolver; tentar mil vezes por segundo leva ao próximo.
10024: Too many requests. O robô mandou pedidos demais em pouco tempo, e o servidor freou. Um robô que reage a cada tick reenviando a mesma ordem recusada faz isso. A solução é do robô: esperar entre tentativas e desistir depois de N.
Os que confirmam
10008: Placed (ordem pendente colocada) e 10009: Done (executada) são os códigos bons. 10010: Done partial é execução parcial: parte do lote saiu, o resto ficou pendente ou foi cancelado, conforme a política de preenchimento. Um robô que assume lote cheio depois de um parcial fica com a posição errada.
Os que são o robô
10013: Invalid request. O pedido está malformado: tipo de ordem inválido, política de preenchimento que o símbolo não aceita (o famoso "fill policy": FOK, IOC ou Return, e cada corretora aceita um conjunto), campo faltando. É erro de programação, ou de robô feito para outra corretora. Nada a fazer na configuração; é no código.
10006: Rejected. A corretora recusou sem detalhar. Em geral, uma regra de risco da corretora (limite de exposição, ativo restrito). Ligue para ela.
O que fazer com o diário
Antes de mexer em qualquer coisa: leia o código. A maior parte dos "robô com defeito" que chegam até nós são um 10016 (stop perto demais) ou um 10014 (lote errado), que se resolvem em dois minutos nas propriedades do símbolo. E um robô que não escreve o que aconteceu na aba Especialistas é um robô que vai custar horas de adivinhação; o diário do terminal cobre parte, o do robô cobre o resto.
No Centurion, a ordem que a corretora recusaria pode ser descartada ou virar entrada a mercado, se estiver perto; e o que acontece com cada estratégia fica registrado no diário. A regra vale para qualquer robô: recusa não é silêncio, é um código, e o código é a resposta.


