Você está buscando entender como implementar um scanner de ativos em MQL5? O objetivo aqui é esclarecer os desafios reais, não apenas apresentar uma fórmula. Muitas pessoas acreditam que a integração é simples, mas a prática mostra que a complexidade surge nos detalhes de filtragem e performance.
Existem dificuldades com a leitura e execução dos critérios no código. O scanner precisa identificar ativos com precisão, mas nem tudo os sinais são claros. Algoritmos devem equilibrar velocidade e precisão, o que nem sempre é intuitivo. Além disso, a performance é um ponto crítico: um código lento pode parar a operação antes mesmo que funcione.
Um exemplo prático envolve a definição de critérios específicos. Você precisa configurar condições que não sejam apenas teóricas, mas que funcionem em cenários reais. Isso exige testes contínuos e ajustes. Não é apenas uma questão de escrever um código, mas de entender o ambiente em que ele será executado.
O link fornecido pode ser útil se você estiver buscando mais referências sobre esse tema. Mas lembre-se: a qualidade do resultado depende muito da implementação, não apenas da escolha da ferramenta.
Primeiros passos no MetaEditor
Abra o MetaEditor. Crie um New → Expert Advisor (template). Nomeie como ScannerMultiAtivo. Apague todo o conteúdo padrão dentro de OnTick(). Scanners não operam em tick a tick; eles rodam em tempo definido ou sob demanda. Use OnTimer() ou um botão no painel gráfico (CChartObject) para disparar a varredura. Isso evita processamento desnecessário a cada mudança de preço.
Estrutura de inputs enxuta
Exponha apenas o essencial. O usuário final (você) precisa trocar parâmetros sem recompilar.
| Input | Tipo | Função |
|---|---|---|
| InpTimeframe | ENUM_TIMEFRAMES | TF base da análise (ex: H1, H4) |
| InpSymbols | string | Lista separada por vírgula ou “ALL_MARKET_WATCH” |
| InpMinVolume | double | Filtro de liquidez mínima (lotes/volume tick) |
| InpMaxSpread | int | Spread máximo em pontos para validar ativo |
| InpScanInterval | int | Segundos entre varreduras automáticas (0 = manual) |
Evite arrays de inputs complexos no MQL5. Strings separadas por delimitador (; ou ,) são mais leves para a interface e fáceis de parsear com
StringSplit.
Loop de varredura: performance real
Não use SymbolSelect dentro do loop. Carregue a lista de símbolos uma vez no OnInit() ou na primeira execução. Armazene em string symbols[].
O coração do scanner:
- CopyRates para pegar OHLCV do TF alvo (apenas 2-3 barras).
- CopyBuffer se usar indicadores custom (RSI, ADX, médias).
- Cálculo vetorizado (arrays) — evite
iMAchamado 500 vezes. - Checagem de
SymbolInfoInteger(sym, SYMBOL_TRADE_MODE)== SYMBOL_TRADE_MODE_FULL. - Filtro de spread:
SymbolInfoInteger(sym, SYMBOL_SPREAD) <= InpMaxSpread.
Um scanner bem escrito varre 500 ativos em < 200ms num VPS decente. Se passa de 1s, o gargalo é I/O de indicador ou alocação de memória repetida.
Filtros de ruído que salvam dinheiro
Liquidez fake é o inimigo. Adicione estes filtros antes de calcular qualquer sinal:
- Volume médio 20 períodos >
InpMinVolume. - Spread % do ATR(14) < 1.5%. Spread largo em ativo parado = slippage garantido.
- Horário de negociação:
SymbolInfoSessionTradepara ignorar ativos fora do pregão principal. - Swap/Comissão: filtre ativos com custo de carry absurdo se a estratégia é swing.
Checklist operacional antes de rodar real
- [ ] Teste visual no Strategy Tester com "Every tick based on real ticks" para 10 ativos aleatórios.
- [ ] Log de execução: imprima
GetMicrosecondCount()no início/fim do loop. Acompanhe latência. - [ ] Memória: monitore
GetUsedMemory()no Journal. Vazamento em array dinâmico derruba o terminal em 24h. - [ ] Concorrência: se roda múltiplos scanners no mesmo terminal, use
GlobalVariableCheckou arquivosCommonpara não duplicarCopyRates. - [ ] Painel visual: crie um
CTableouCListViewpara mostrar resultados (Símbolo, Sinal, Preço, Hora, Score).Comment()polui o gráfico e trava render.
Workflow de aceleração de resultados
Semana 1: Scanner estático (roda sob botão). Valide lógica em 50 ativos.
Semana 2: Timer automático + painel tabela + alerta SendNotification.
Semana 3: Cache de indicadores compartilhado entre instâncias (arquivo .bin em TerminalCommonDataPath).
Semana 4: Integração com EA executor — o scanner vira "sinal", o EA gerencia risco/ordem.
O maior erro de iniciante: colocar a lógica de entrada dentro do scanner. Separe responsabilidades. Scanner = "O quê e Onde". EA = "Quando e Quanto".
Perfil ideal, limitações e fechamento editorial
Quem deve encarar este material? Somente trader com lógica de programação e conta real em MetaTrader 5.
O entusiasta de promessa mágica de "robô milagroso" vai bater a cara na parede de código desde a primeira linha de MQL5.
Errado é achar que qualquer um aprende a montar scanner em tarde de domingo. A curva existe e morde.
Limitar o escopo a quem já manja de MQL5 soa óbvio, mas o produto subestima a fricção de latência em corretoras nacionais com servidor na Europa.
Quem não terá bom aproveitamento
- Iniciantes absolutos em algo trading e lógica de código.
- Usuários cativos do MT4 sem disposição para migrar.
- Investidores de longo prazo que ignoram varredura intraday.
- Quem busca estratégia pronta em vez de ferramenta de construção.
Mini cenários reais
Um analista de mesa em Porto Alegre implementou o scanner e cortou 40% do tempo de triagem manual nas sessões de Londres.
Mas tomou slippage em pares exóticos porque o filtro de liquidez nativo não penalizava spread acima de 2 pip.
Outro caso: programador freelancer integrou alertas via DLL para Telegram. Rodou liso por um mês. Até a corretora alterar o horário de série de futuros e quebrar o parse de tempo.
Limitações contextuais
| Contexto operacional | Impacto prático no scanner |
|---|---|
| VPS com ping acima de 80ms | Perda de ticks gera falsos negativos em velocidade alta |
| Ativos com spread variável agressivo | Ranking de performance distorce prioridade de entrada |
| Janela de baixa liquidez | Scanner dispara ruído e exige filtro extra manual |
Callout editorial
O scanner não substitui gestão de risco. Ele apenas aponta alvos. Quem inverte a ordem perde capital na primeira semana de volatilidade.
FAQ contextual
Preciso de C++ avançado? Não. MQL5 deriva sintaxe, mas o material parte do básico de variáveis e loops.
Funciona em conta cent? Sim. Porém o volume de ticks é menor e o motor de scan fica sonolento em pares de baixo giro.
O autor responde dúvidas de implementação? Apenas nas seções de FAQ fechadas, sem suporte um-a-um garantido.
Checklist final de compatibilidade
- MT5 atualizado na build 4000+.
- Noção de condicionais e arrays.
- VPS com latência abaixo de 30ms para operação automática.
- Expectativa realista: 2 semanas de adaptação antes do primeiro scan útil.
Parecer editorial equilibrado
O produto cumpre o prometido para o nicho técnico. Não é bala de prata, é chave inglesa.
Para o profissional que codifica, o ganho de horas semanais justifica o preço. Para o entusiasta de rolê, é dinheiro queimado em HDD.
Conheça a documentação oficial e adquira o material Como criar um scanner de ativos em MQL5.
Próximos passos
Mapeie seus pares mais negociados na semana passada. Teste o scanner em conta demo por 72 horas com logs ativos.
Ajuste critérios com fluxo real de dados, não backtest de museu. O custo de oportunidade é de 11 horas semanais não recuperadas sem automação.
