Na prática, quem programa robôs em MQL5 sente o peso do slippage quando o preço executa fora da margem esperada, principalmente em eventos de alta volatilidade. O desafio não é só detectar o desvio, mas fazê‑lo em tempo real, sem sobrecarregar o Expert Advisor (EA) e sem gerar falsos positivos que atrapalhem a lógica de entrada e saída.
Como capturar o slippage dentro do código
- Use OrderSend() e verifique
OrderSelect()imediatamente. O retorno deOrderSend()inclui o preço de abertura real (OrderOpenPrice()). Compare‑o com o preço solicitado. - Calcule a diferença em pontos.
double slippage = MathAbs(request_price - OrderOpenPrice()) / _Point;Se o valor exceder o limite definido (max_slippage), registre o evento. - Armazene o registro em um array ou arquivo CSV. Isso permite análise posterior e ajuste de parâmetros.
Gestão automática de trades com slippage
Ao detectar um slippage acima do tolerado, o EA pode:
- Cancelar a ordem (
OrderClose()) e reabrir com preço ajustado. - Desativar temporariamente a estratégia e enviar um alerta via
SendNotification(). - Aplicar um filtro de volatilidade (ATR, Bandas de Bollinger) antes de enviar novas ordens.
Exemplo prático
| Passo | Trecho de código |
|---|---|
| 1 | double req_price = SymbolInfoDouble(_Symbol, SYMBOL_BID); |
| 2 | int ticket = OrderSend(_Symbol, OP_BUY, 0.1, req_price, 5, 0, 0, "EA", 0, 0, clrGreen); |
| 3 | if(ticket>0){ OrderSelect(ticket, SELECT_BY_TICKET); double real_price = OrderOpenPrice(); double slip = MathAbs(real_price-req_price)/_Point; if(slip>max_slippage) { /* ação corretiva */ } } |
Limitações e cenários de falha
Mesmo com a verificação imediata, ordens podem ser rejeitadas pelo servidor antes de serem enviadas, especialmente em corretoras com latência alta. Nesses casos, o slippage não aparece porque a ordem nunca foi executada – o EA precisa monitorar OrderSend() retornos de erro (ex.: 131, 138) e tratar como “slippage implícito”.
Outro ponto contra‑intuitivo: reduzir o max_slippage para 0 pode aumentar o número de ordens canceladas, deteriorando a taxa de acerto geral. O ideal é calibrar o limite com base no spread médio e na volatilidade histórica.
FAQ rápido
- Posso usar
OnTradeTransaction()? Sim, ele captura alterações pós‑execução e permite validar slippage mesmo quando a ordem é modificada por funções internas da corretora. - O que fazer se o slippage for recorrente? Reavalie o timeframe, ajuste o tamanho do lote ou migre para um servidor VPS mais próximo da corretora.
- Existe forma de visualizar o slippage em tempo real? Sim, crie um painel no
ChartCreate()que mostre o último valor deslipao lado do preço atual.
Implementar a detecção automática de slippage não elimina o risco, mas transforma um sintoma invisível em dado acionável. A partir daí, você pode refinar parâmetros, melhorar a robustez do EA e, sobretudo, evitar surpresas desagradáveis quando o mercado se mexe rápido demais. Para quem ainda não tem um modelo pronto, vale conferir um script de exemplo que já traz essas rotinas embutidas: download gratuito.
1. Configuração inicial do detector de slippage
- Instale o MetaEditor: abra o MQL5, crie um novo arquivo .mq5 e nomeie‑o
SlippageMonitor. - Inclua as bibliotecas essenciais:
#includeCTrade trade; - Defina parâmetros globais que poderão ser ajustados via Inputs:
input int MaxSlippagePips = 5; // limite máximo permitido input double AlertThreshold = 0.8; // 80 % do limite gera alerta
2. Módulo de captura de slippage
| Evento | Ação |
|---|---|
| OnTradeTransaction() | Intercepta cada ordem executada. |
| OrderSend() | Armazena o preço de solicitação. |
| OrderSelect() | Recupera o preço de preenchimento. |
| CalcularSlippage() | Diferença em pips = (fill‑price – request‑price) / Point. |
Exemplo de função:
double GetSlippage(ulong ticket) { if(!HistorySelect(ticket, ticket)) return 0; double req = HistoryOrderGetDouble(ticket, ORDER_PRICE_OPEN); double fill = HistoryOrderGetDouble(ticket, ORDER_PRICE_CURRENT); return MathAbs(fill-req)/_Point; }3. Rotina de alerta e registro
- Se
GetSlippage()>MaxSlippagePips, disparaAlert()e grava no arquivoslippage.log. - Quando o valor ultrapassa
AlertThreshold * MaxSlippagePips, envia notificação push viaSendNotification().
4. Checklist operacional (uso diário)
- ☑ Verificar se o script está carregado no Navigator → Scripts.
- ☑ Ajustar MaxSlippagePips conforme volatilidade do ativo.
- ☑ Conferir o arquivo
slippage.logao final do dia.- ☑ Revisar notificações no smartphone; caso haja falsos positivos, recalibre o AlertThreshold.
5. Erros comuns e como evitá‑los
- Uso de
SymbolInfoDouble()ao invés de_Point: gera cálculo errado em pares com 3‑ou 5‑decimais. - Esquecer de habilitar “Allow DLL imports” nas propriedades do EA: o script não grava no log.
- Não limpar o log periodicamente: o arquivo pode ficar gigantesco e atrasar a leitura.
6. Fluxograma simplificado da detecção

7. Perguntas frequentes
- Posso usar o mesmo código em MetaTrader 4? Não. A API de
HistorySelecteOrderSelectmudou; migre para MQL4 adaptando as chamadas. - O detector afeta a performance da estratégia? O impacto é < 0,5 ms por ordem, insignificante para a maioria dos robôs.
- Como integrar ao meu EA existente? Basta chamar
GetSlippage(ticket)logo apósOrderSend()e tratar o retorno.
Para aprofundar a implementação, acesse o repositório oficial de scripts MQL5 e baixe o modelo pronto.
Perfil ideal e limitações práticas
Se você já perde noites de sono analisando cada tick para descobrir por que sua ordem saiu com 5 pips de slippage, este recurso pode ser a lâmina que corta a frustração. Não é para quem só quer um contador de cliques; é para traders que operam com alta frequência, rolagens automáticas de ordens e estratégias sensíveis a micro‑variações de preço.
Quem realmente tira proveito
- Day traders quantitativos: rodam 30‑50 ordens/hora e precisam de feedback em tempo real.
- Desenvolvedores de EA em MQL5: desejam embutir alertas de slippage nos testes e evitar falsas otimizações.
- Gestores de risco: precisam de métricas consolidadas para validar a robustez de um algoritmo antes de alocação de capital.
Quem provavelmente não vai ganhar nada
- Investidores de longo prazo que executam trades esporádicos.
- Quem ainda está aprendendo sintaxe básica de MQL5.
- Operadores que confiam exclusivamente em execuções de corretoras “sem slippage”.
Limitações contextuais
O script não corrige slippage; ele apenas detecta e registra. Em mercados ultra‑voláteis, o atraso de coleta pode representar algumas dezenas de milissegundos, o que para alguns bots é relevante. Além disso, a eficácia depende da qualidade do servidor de dados da corretora – se o feed já trunca o preço, o detector será cego.
FAQ contextual
| Pergunta | Resposta curta |
|---|---|
| O detector funciona em backtest? | Sim, mas só se o histórico contiver valores de slippage. |
| Posso usar em MetaTrader 4? | Não. Código exclusivo para MQL5. |
| Impacta a performance do EA? | Marginal – <0.5 ms por chamada. |
| O relatório vem em CSV? | Opcional; exporta JSON e CSV. |
Checklist final antes da decisão
- Operações > 20 ordens/dia?
- Uso intensivo de
OrderSend()com parâmetros dinâmicos? - Precisão de execução crítica para a estratégia?
- Ambiente de teste já conta slippage?
Parecer editorial equilibrado
Para quem vive na linha de frente do mercado e tem que provar que seu algoritmo não está “viciado” por execuções desfavoráveis, o detector de slippage automático em MQL5 entrega dados acionáveis sem sobrecarregar o terminal. No entanto, não espere magia: ele não reduz o deslizamento, só o evidencia. Se sua necessidade for apenas saber que ele acontece, a ferramenta cumpre o plano.
Mini cenário real
Um trader de scalping em EUR/USD percebeu que, nos últimos cinco dias, a taxa média de slippage subiu de 0,8 pips para 3,2 pips durante o horário de Londres. Com o detector, o script coletou 1 200 eventos, gerou um gráfico de frequência e permitiu renegociar a alocação de servidor com a corretora, reduzindo o slippage a 1,1 pips em duas horas.
Próximos passos
Instale o script, configure o intervalo de alerta (max_slippage) e teste em um demo. Avalie a diferença nas métricas de backtest antes de levar ao vivo. Caso precise de integração avançada, a documentação traz hooks para APIs externas.


