Construir um painel de estatísticas em tempo real no MQL5 parece simples na teoria, mas na prática o desenvolvedor se depara com limitações de latência, gerenciamento de objetos gráficos e sincronização de dados de múltiplas fontes. O objetivo costuma ser transformar fluxos de tick e indicadores em visualizações claras para decisões de negociação instantâneas. No mercado real, traders que dependem de atualizações a cada segundo acabam sacrificando performance do EA ou sobrecarregando o terminal, o que pode virar o ponto de inflexão entre lucro e prejuízo.
Estrutura básica do dashboard
- Canvas gráfico: use
ChartCreatepara abrir um gráfico vazio e reserve uma subjanela exclusiva para o painel. - Objetos de texto:
ObjectCreatecom OBJ_LABEL permite atualizar valores sem redesenhar todo o canvas. - Timer:
EventSetTimer(1)garante atualização a cada segundo, mas aumenta o uso de CPU – ajuste para o intervalo que seu broker realmente entrega.
Métricas essenciais
Não basta exibir preço e spread. Foque em indicadores que realmente influenciam a estratégia:
| Métrica | Fonte | Uso típico |
|---|---|---|
| Bid/Ask | MarketInfo() | Validação de slippage |
| Volume de tick | CopyTicks() | Detecção de alta volatilidade |
| Desvio padrão (ATR) | iATR() | Ajuste dinâmico de stop‑loss |
Performance e gargalos
O maior vilão é o overdraw de objetos. Cada chamada a ObjectSetText dispara um repaint; em um painel com 20 linhas isso pode consumir 30 % da carga de CPU. A solução prática é agrupar atualizações em um único ObjectSet usando StringConcatenate para montar o texto completo antes de enviá‑lo ao objeto.
Exemplo funcional
int OnInit() { ChartCreate(0,"Panel",0,0,0); ObjectCreate(0,"PanelLabel",OBJ_LABEL,0,0,0); ObjectSetInteger(0,"PanelLabel",OBJPROP_XSIZE,200); EventSetTimer(1); return(INIT_SUCCEEDED); } void OnTimer() { string txt = "Bid: "+DoubleToString(SymbolInfoDouble(_Symbol,SYMBOL_BID),5)+"\n" +"Spread: "+DoubleToString(SymbolInfoDouble(_Symbol,SYMBOL_SPREAD)*_Point,2)+"\n" +"Vol: "+IntegerToString(CopyTicks(_Symbol,0,0,100)); ObjectSetString(0,"PanelLabel",OBJPROP_TEXT,txt); } Recursos avançados
- WebRequest para puxar dados externos (ex.: notícias econômicas) e exibir no painel.
- Uso de
IndicatorBufferspara desenhar mini‑gráficos de tendência dentro da mesma subjanela. - Integração com biblioteca de UI de terceiros que oferece temas responsivos.
Aplicações práticas
Um trader de scalping pode usar o painel para monitorar o delta de compra/venda em tempo real e abortar a operação se o spread ultrapassar um limiar pré‑definido. Em swing trading, o mesmo painel, com atualização a cada minuto, serve para validar a ruptura de um nível de suporte antes de abrir uma posição.
FAQ rápido
- O painel atrasa a execução? Só se o timer for menor que 0,5 s ou se houver mais de 30 objetos simultâneos.
- Posso usar o mesmo painel em múltiplos símbolos? Sim, basta criar uma subjanela por símbolo e referenciar
_Symboldinamicamente. - O que fazer se o terminal trava? Reduza a frequência do timer ou consolide textos em um único objeto.
1. Configuração inicial do MetaEditor
- Abra o MetaEditor e crie um novo
.mq5chamadoRealtimeDashboard.mq5. - Inclua as bibliotecas padrão:
#includee#include. - Defina as variáveis globais que alimentarão o painel:
double AccountEquity, AccountBalance, OpenProfit;e umdatetime LastRefresh;. - Salve e compile. Qualquer erro de sintaxe impede a criação do painel, então corrija antes de prosseguir.
2. Estrutura do dashboard – mini‑layout textual
| Elemento | Posição (pixels) | Descrição |
|---|---|---|
| Label “Equity” | X=10, Y=20 | Mostra AccountEquity formatado com duas casas decimais. |
| Label “Balance” | X=10, Y=45 | Exibe AccountBalance. |
| Label “Profit/Loss” | X=10, Y=70 | Valor de OpenProfit com cor verde/vermelha. |
| Timer “Refresh” | X=10, Y=95 | Indica o intervalo desde a última atualização. |
Essas quatro linhas formam o “core” do painel. Use ObjectCreate() para cada label e ObjectSetInteger() para posicionamento. O timer será atualizado via OnTimer() a cada 1000 ms.
3. Rotina de atualização – código enxuto
void OnTimer() { if(TimeCurrent()-LastRefresh<1) return; // evita chamadas excessivas AccountEquity = AccountInfoDouble(ACCOUNT_EQUITY); AccountBalance = AccountInfoDouble(ACCOUNT_BALANCE); OpenProfit = AccountInfoDouble(ACCOUNT_PROFIT); UpdateLabel("Equity", DoubleToString(AccountEquity,2)); UpdateLabel("Balance", DoubleToString(AccountBalance,2)); UpdateLabel("Profit/Loss", DoubleToString(OpenProfit,2), OpenProfit>=0); LastRefresh = TimeCurrent(); } Função UpdateLabel() altera o texto e, opcionalmente, a cor do fundo. Chame EventSetTimer(1) no OnInit() para iniciar o loop.
4. Checklist operacional (para não deixar nada escapar)
- ✅ Compilação limpa sem warnings.
- ✅
EventSetTimer()ativo. - ✅ Todos os objetos de texto criados antes da primeira chamada de
OnTimer(). - ✅ Teste em conta demo: verifique atualização a cada segundo.
- ✅ Salve o script na pasta
MQL5\Scriptse arraste para o gráfico.
5. Erros comuns e como mitigá‑los
- Objeto já existente – antes de
ObjectCreate(), useObjectDelete()para limpar versões antigas. - Lag de atualização – reduzir o intervalo do timer para 500 ms pode sobrecarregar o terminal; mantenha 1000 ms como padrão.
- Formato de número –
DoubleToString()sem especificar casas decimais gera “1.23e+06”. Sempre passe o segundo parâmetro.
6. Expansão para métricas avançadas
Após validar o core, inclua:
- Spread médio:
MarketInfo(Symbol(),MODE_SPREAD). - Taxa de acerto: armazene resultados de
OrderSend()em umstructe calculewins/total. - Gráfico de evolução:
ObjectCreate(0,"EquityLine",OBJ_TREND,0,Time[0],AccountEquity);
Essas extensões demandam apenas mais duas linhas de código cada, mantendo a densidade de informação alta.
7. Próximos passos – roadmap de 4 semanas
| Semana | Objetivo | Entregável |
|---|---|---|
| 1 | Dashboard básico | Script funcional em conta demo |
| 2 | Adicionar métricas de risco | Spread, margem livre |
| 3 | Implementar histórico de profit | Mini‑gráfico de equity |
| 4 | Otimize UI | Layout responsivo, cores customizáveis |
Seguindo esse cronograma, o painel evolui de um simples monitor de saldo a um centro de decisão em tempo real.
⚠️ Dica rápida: mantenha o
OnTimer()leve. Cada chamada adicional de API (por exemplo,SymbolInfoDouble()) aumenta o consumo de CPU e pode congelar o terminal.
Quem realmente tira proveito do painel de estatísticas em tempo real no MQL5
Se você vive de decisões instantâneas nos mercados, esse recurso pode ser seu atalho para lucro ou perda – depende do encaixe com seu perfil.
Perfil ideal
- Trader algorítmico avançado: desenvolve e otimiza estratégias próprias, requer visualização granular de latência, drawdown e taxa de acerto.
- Gestor de portfólio semi‑automático: combina sinais humanos e bots, precisa monitorar múltiplos símbolos simultaneamente.
- Desenvolvedor de indicadores: testa ideias em tempo real, usa o dashboard para validar hipóteses de forma iterativa.
Quem vai desperdiçar tempo
- Iniciante absoluto: ainda luta para entender ordens básicas; o volume de informação pode ser esmagador.
- Operador “buy‑and‑hold” tradicional: não requer métricas de tick‑by‑tick nem gráficos de performance a cada segundo.
- Quem usa apenas a conta demo: o custo de recursos computacionais não compensa em ambientes sem risco real.
Limitações práticas
Não é um plug‑and‑play mágico. Requer conexão estável com o servidor MetaTrader 5, consumo de RAM acima de 1 GB e ajustes finos de latência. Em contas com spreads amplos, a visualização “tempo real” pode gerar ruído, desviando a atenção do que realmente importa: o sinal de entrada.
| Aspecto | Impacto |
|---|---|
| Recursos de hardware | CPU ≥ 2 GHz, RAM ≥ 1 GB |
| Conexão | Ping < 30 ms para servidores principal |
| Curva de aprendizado | ≈ 15 horas para configuração avançada |
FAQ contextual
- Posso usar o painel em VPS? Sim, mas escolha um plano com latência mínima e SSD.
- Ele substitui o histórico? Não, serve como complemento visual; o back‑test ainda é essencial.
- É compatível com sinais externos? Apenas se o provedor ofereça API compatível MQL5.
Checklist rápido antes da decisão
- Possui pelo menos 2 estratégias automatizadas em produção?
- Consegue dedicar 30 min por dia para analisar métricas?
- Tem infraestrutura que suporte carga contínua?
Parecer editorial equilibrado
Para quem já domina a linguagem MQL5 e gere capital significativo por meio de bots, o painel entrega visão quase cirúrgica das variáveis críticas. Ele reduz o tempo de diagnóstico de falhas em cerca de 40 % e permite ajustes proativos antes que o drawdown escale.
Para o resto, o custo de oportunidade – tempo de estudo, hardware extra, risco de sobre‑análise – pode superar o benefício. A recomendação, portanto, é clara: adote apenas se sua operação já está no “nível profissional” ou se pretende migrar para ele nos próximos três a seis meses.



