Um robô em MQL5 nasce de três pilares: OnTick, eventos e funções principais; sem eles, o algoritmo não tem “vida”.
OnTick: o pulso do seu EA
OnTick dispara a cada atualização de preço. É aí que a estratégia reage ao mercado, calcula indicadores e decide abrir ou fechar posições. Se o handler for pesado, a latência mata a performance; ao contrário, um código enxuto garante respostas em milissegundos.
Estrutura mínima de OnTick
cpp
void OnTick()
{
// 1. Verifica condições de mercado
// 2. Calcula indicadores essenciais
// 3. Executa ordens, se houver sinal
}
Eventos: além do tick
Enquanto o OnTick lida com o fluxo de preços, eventos como OnTimer, OnTrade ou OnChartEvent dão ao robô consciência de tempo, execução e interação visual. Use EventSetTimer(60) para avaliações periódicas que não dependem de cada tick.
- OnTimer: análises de longo prazo, reavaliação de risco.
- OnTrade: confirmações de ordem, monitoramento de fills.
- OnChartEvent: botões customizados, inputs do usuário.
Funções principais: modularizando a lógica
Separe cálculo de indicadores, gerenciamento de risco e execução de ordens em funções dedicadas. Isso não só deixa o código legível, como permite testes unitários e otimizações isoladas.
| Função | Responsabilidade |
|---|---|
| CalculateIndicators() | Retorna valores de EMA, RSI, etc. |
| CheckEntryRules() | Verifica se condições de compra/venda são atendidas. |
| ExecuteTrade() | Envia ordem, define SL/TP, registra log. |
| RiskManagement() | Ajusta lote conforme margem disponível. |
Erros comuns que derrubam seu robô
1. Chamar OrderSend dentro de loops intensos; 2. Ignorar o retorno de funções críticas; 3. Usar variáveis globais sem proteção contra race conditions. Cada erro gera rejeição de ordem ou perda de capital.
Dicas rápidas para performance
Use ArraySetAsSeries para indicadores, limite o número de cálculos por tick e prefira CopyRates ao invés de iClose quando precisar de séries históricas.




