Painel no gráfico do robô: o que mostrar para acompanhar em tempo real
Por Jackson Jordão · 17 de outubro de 2026 · 6 min

Um bom painel no gráfico mostra só o que você precisa para decidir se o robô está bem: estado (ligado, pausado ou bloqueado), posição aberta, resultado do dia, limite de perda usado, spread atual e o motivo da última ação. No MetaTrader 5 ele se faz com a função Comment() ou, para algo mais organizado, com objetos gráficos como OBJ_LABEL e OBJ_RECTANGLE_LABEL.
O erro comum é o oposto: encher a tela de números que ninguém consulta. Painel bom é curto, legível e não atrapalha o gráfico nem a execução do robô. Veja o que vale mostrar e como programar com segurança.
O que mostrar no painel
Pense no painel como o painel de um carro: poucas informações, escolhidas porque ajudam a agir. Para um robô, estas costumam ser as mais úteis:
- Estado do robô: operando, fora do horário, pausado por limite diário ou bloqueado por erro. Esta é a linha mais importante.
- Posição atual: lado (compra ou venda), volume, preço médio e resultado em aberto.
- Resultado do dia: lucro ou prejuízo realizado mais o aberto, comparado ao limite de perda diária configurado.
- Spread atual do símbolo, para entender por que o robô não entrou.
- Última decisão: por exemplo, "sinal ignorado: fora do horário" ou "ordem rejeitada: veja o diário".
- Parâmetros-chave em uso: Magic Number, lote e horário de operação, para confirmar que o robô certo está no gráfico certo.
Tudo isso serve a um objetivo: bater o olho e saber se está tudo como deveria. Se você precisa de uma calculadora para entender o painel, ele tem informação demais.
Opção 1: Comment(), a mais simples
Segundo a documentação do MQL5, a função Comment() exibe um texto definido pelo usuário no canto superior esquerdo do gráfico. Você separa as linhas com "\n", pode passar até 64 parâmetros e o texto total não pode passar de 2045 caracteres. Arrays não são aceitos: é preciso passar os elementos um a um.
Outro detalhe da documentação: números do tipo double saem com muitas casas decimais. Para controlar o formato, use DoubleToString(), e use TimeToString() para datas. Sem isso, o painel mostra algo como 1523.4500000000001, o que fica feio e difícil de ler.
Comment() é ótima para um painel de depuração ou para uma versão enxuta. Os limites são visuais: você não escolhe cor por linha, não posiciona em outro canto e não faz botões.
Dica: Para limpar o comentário ao remover o robô, chame Comment("") dentro de OnDeinit(). Sem isso, o texto pode ficar no gráfico depois que o robô sai.
Opção 2: objetos gráficos para um painel de verdade
Quando o painel precisa de cores, alinhamento e fundo, o caminho é criar objetos com ObjectCreate(). O mais usado é o OBJ_LABEL, uma etiqueta de texto cuja posição é dada em pixels pelas propriedades OBJPROP_XDISTANCE e OBJPROP_YDISTANCE, contadas a partir de um canto do gráfico. O canto é escolhido com OBJPROP_CORNER, usando a enumeração ENUM_BASE_CORNER.
Como a posição é em pixels e não em preço e tempo, a etiqueta fica parada na tela quando o gráfico rola ou muda de escala. É exatamente o que se quer de um painel. Para dar fundo ao painel, usa-se um OBJ_RECTANGLE_LABEL atrás das etiquetas, com a cor definida em OBJPROP_BGCOLOR. O texto de cada etiqueta é alterado com ObjectSetString() na propriedade OBJPROP_TEXT, e cor e tamanho de fonte com ObjectSetInteger().
Uma observação importante sobre o nome: o nome do objeto precisa ser único dentro do gráfico. A prática segura é começar todos os nomes com um prefixo do robô, como "PNL_estado" e "PNL_resultado". Assim você apaga só os objetos dele, com ObjectsDeleteAll() informando o prefixo, e não mexe nas linhas e anotações que você desenhou à mão.
Quando atualizar o painel
Atualizar a cada tick é desperdício, principalmente em ativos muito líquidos como o mini índice e o mini dólar, que geram muitos ticks por segundo. Há duas abordagens melhores:
- Por tempo: ative um timer com EventSetTimer(1) em OnInit() e atualize o painel em OnTimer(). Segundo a documentação, o timer é destruído quando o programa termina, mas o certo é chamar EventKillTimer() em OnDeinit().
- Por evento: atualize só quando algo muda, como a abertura ou o fechamento de uma posição, a troca do estado do robô ou uma ordem rejeitada.
Atualizar uma vez por segundo é suficiente para o olho humano e deixa o OnTick() livre para o que importa: a lógica de entrada e saída. Depois de alterar vários objetos, uma chamada a ChartRedraw() força o gráfico a mostrar a mudança.
De onde vêm os dados
As informações do painel vêm de funções que o próprio MQL5 oferece:
- Conta: AccountInfoDouble() com ACCOUNT_BALANCE e ACCOUNT_EQUITY.
- Posição aberta: PositionsTotal(), PositionSelect() e PositionGetDouble() com POSITION_PROFIT e POSITION_VOLUME.
- Resultado do dia: HistorySelect() para o intervalo desde o início do dia, seguido da leitura dos negócios com HistoryDealGetDouble() na propriedade DEAL_PROFIT.
- Spread: SymbolInfoInteger() com SYMBOL_SPREAD.
- Permissões: TerminalInfoInteger() com TERMINAL_TRADE_ALLOWED e TERMINAL_CONNECTED, e MQLInfoInteger() com MQL_TRADE_ALLOWED, para avisar quando o botão de negociação automática está desligado.
Esse último grupo é um dos mais valiosos. Muita gente passa horas achando que o robô está com defeito quando, na verdade, a negociação automática estava desativada no terminal. Uma linha em vermelho no painel resolve em um segundo.
Dica: Mostre também o motivo de o robô não ter operado. Em vez de só "aguardando", escreva "aguardando: fora do horário" ou "aguardando: spread acima do limite". Isso reduz muito a dúvida sobre o comportamento do robô.
Painel e teste visual
O painel também aparece no modo visual do Testador de Estratégia, o que ajuda a conferir a lógica do robô enquanto ele roda no histórico. Vale testar o painel nesse modo para ver se estado, resultado do dia e motivo da última decisão fazem sentido a cada operação. Veja também o artigo sobre backtest, em /blog/como-fazer-backtest-metatrader-5.
Cuidados de programação
- Não coloque o painel no caminho crítico: se a atualização falhar, o robô precisa continuar operando.
- Limpe os objetos em OnDeinit(). Painel antigo sobrando no gráfico confunde.
- Use fontes e cores legíveis tanto em fundo claro quanto escuro. Se possível, deixe a cor como parâmetro de entrada.
- Não deixe o painel esconder o gráfico: ocupe um canto e mantenha o tamanho pequeno.
- Quando houver vários robôs na mesma conta, mostre o Magic Number para saber de quem é cada painel. Há mais detalhes em /blog/varios-robos-mesma-conta-metatrader-5.
O painel também combina com os alertas: ele mostra o estado atual, e o aviso no celular chama você quando algo muda. Veja como configurar em /blog/alerta-no-celular-metatrader-5.
Um aviso importante: o painel apenas informa. Ele não protege a conta. A proteção vem de regras no código, como limite de perda diária e horário de operação, e o painel serve para você enxergar que essas regras estão ativas. Operar em mercado financeiro envolve risco de perda, e nenhum painel muda isso.
Resumo
- Mostre pouco: estado do robô, posição, resultado do dia, spread e motivo da última decisão.
- Comment() é simples, mas limitada a 2045 caracteres e ao canto superior esquerdo.
- Com OBJ_LABEL e OBJ_RECTANGLE_LABEL você controla posição, cor e fundo do painel.
- Atualize por timer (EventSetTimer) ou por evento, não a cada tick, e limpe os objetos em OnDeinit().
- Painel informa, mas quem protege a conta são as regras de risco programadas no robô.
Quer um painel sob medida no seu robô?
- Descreva a sua estratégia e o que você quer acompanhar, pelo Termo de Referência do site ou pelo WhatsApp.
- Eu analiso o que é viável e combino com você o desenho do painel e as regras do robô.
- Você recebe o robô com o painel, testado em conta demo e com o código-fonte.