Cursos Para Traders Estratégias Trader Guia Definitivo: Crie Diálogos em MQL5 na Prática

Guia Definitivo: Crie Diálogos em MQL5 na Prática

Se você já tentou montar um Expert Advisor e bateu na parede ao precisar de uma interface amigável, não está sozinho. No MQL5, criar caixas de diálogo parece mais um luxo do que uma necessidade, mas na prática elas salvam horas de depuração e evitam erros de input que custam dinheiro real.

Quando usar um diálogo?

Imagine um robô que compra ações só se o usuário confirmar o risco máximo. Sem um popup para validar esse parâmetro, o script pode executar blindamente. Diálogos dão ao trader o controle imediato, reduzindo a margem de erro humano.

Estrutura básica de um dialog

  • DialogCreate – cria a janela.
  • DialogAddControl – insere botões, campos de texto ou listas.
  • DialogShow – exibe e bloqueia a execução até o usuário fechar.

Um exemplo mínimo:

Código
 int OnInit() { long dlg=DialogCreate(0,0,200,150,"Config"); DialogAddControl(dlg,0,10,10,180,30,"Risco %:",OBJ_LABEL); DialogAddControl(dlg,1,10,50,180,30,"",OBJ_EDIT); DialogAddControl(dlg,2,50,100,100,30,"OK",OBJ_BUTTON); return(INIT_SUCCEEDED); } 

Limitações práticas

Os diálogos nativos não suportam temas personalizados. Se precisar de um visual corporativo, terá que recorrer a bibliotecas externas ou ao MetaTrader UI Toolkit, que traz CSS‑like styling, mas aumenta a complexidade e o tempo de compilação.

Falhas comuns e como evitá‑las

  • Bloqueio excessivo: DialogShow pausa o EA. Use DialogShowAsync quando o algoritmo precisa continuar rodando.
  • Validação de input: Campos de texto aceitam qualquer string. Sempre converta com StringToDouble e teste IsNaN antes de usar o valor.
  • Gerenciamento de recursos: Esquecer DialogDelete deixa objetos “fantasmas” na memória, degradando a performance.

FAQ relâmpago

  • Preciso de #property strict para usar diálogos? Não, mas ajuda a evitar erros de tipagem.
  • Posso abrir vários diálogos simultâneos? Sim, porém cada um tem seu próprio ID; controle-os cuidadosamente.
  • Existe suporte a arrastar a janela? Não nativamente; a única alternativa é criar um controle customizado que capture eventos de mouse.

O ponto contra‑intuitivo aqui é que, apesar de parecer “mais código”, um diálogo bem projetado reduz drasticamente a necessidade de logs extensos. Ao validar tudo na UI, você elimina a maioria dos falsos positivos que normalmente inundam o arquivo de histórico.

Primeiros passos após a instalação

Abra o MetaEditor, crie um novo Expert Advisor (.mq5) e inclua o cabeçalho padrão. Em seguida, adicione a diretiva #include – este arquivo contém as classes base para diálogos.

Se o arquivo não existir, baixe-o do repositório oficial da MQL5 Community e salve na pasta Include. A compilação deve ocorrer sem erros antes de avançar.

Configuração inicial do objeto dialog

Instancie a classe CDialog dentro da função OnInit():

Código
 CDialog dlg; int OnInit() { dlg.Create("Configurações",0,0,300,200); dlg.AddLabel("Preço de entrada:",10,20); dlg.AddEdit("price",10,45,80); dlg.AddButton("OK",200,150,80,30); return(INIT_SUCCEEDED); } 

O método Create define título, posição (x,y) e dimensões. Cada controle recebe um ID interno usado para leitura posterior.

Módulos prioritários – captura e validação

  • Leitura dos campos: no OnChartEvent(), capture o clique no botão “OK” e recupere o valor digitado.
     void OnChartEvent(const int id,const long &lparam,const double &dparam,const string &sparam) { if(id==CHARTEVENT_OBJECT_CLICK && sparam=="OK") { double entry=StrToDouble(dlg.GetText("price")); if(entry<=0) Alert("Preço inválido"); else Print("Entrada: ",entry); } } 
  • Validação de limites: use MathRound ou NormalizeDouble para adequar ao número de casas decimais do símbolo.
  • Persistência: salve o valor em um arquivo .ini com FileWriteString para reutilizar em execuções futuras.

Checklist operacional – rotina recomendada

  • ✅ Verificar versão do MetaTrader 5 (mínimo 5.0 Build 2620).
  • ✅ Incluir Dialogs.mqh na pasta Include.
  • ✅ Compilar sem warnings – ajuste #property strict se necessário.
  • ✅ Testar o diálogo em modo “Strategy Tester” antes de usar em conta real.
  • ✅ Documentar IDs de controles para evitar colisões.

Erros comuns e como evitá‑los

1. Controle não aparece – a causa mais frequente é coordenada fora da área visível do gráfico. Use valores menores que a largura/altura do chart ou habilite ChartSetInteger(0,CHART_SHOW_OBJECTS,true).

2. Valor lido como string vazia – ocorre quando o OnChartEvent não está registrado. Certifique‑se de chamar EventSetMillisecondTimer(100) ou ChartSetInteger(0,CHART_EVENT_MOUSE_MOVE,true) para ativar a captura.

3. Crash ao fechar o EA – libere recursos com dlg.Destroy(); dentro de OnDeinit(). Isso evita vazamento de objetos UI.

Fluxograma simplificado – do clique ao trade

EtapaAção
1. InícioCarrega EA → cria diálogo.
2. UsuárioPreenche preço e confirma.
3. EventoOnChartEvent captura “OK”.
4. ValidaçãoCheca limites, converte string.
5. ExecuçãoEnvia ordem de compra/venda.
6. FinalSalva configuração e destrói UI.

Produtividade prática – acelerar resultados

Integre o diálogo a um Panel de monitoramento. Enquanto o EA roda, atualize dinamicamente o campo “Preço de entrada” com dlg.SetText("price",DoubleToString(MarketInfo(Symbol(),MODE_BID),Digits)). Assim, o trader vê o preço corrente sem precisar abrir outra janela.

Combine com CSignal para gerar alertas visuais quando o preço atingir o valor definido. O fluxo completo reduz o tempo entre decisão e execução de menos de 2 segundos, ideal para estratégias de breakout.

Perfil ideal e limitações de “Como criar caixas de diálogo em MQL5”

Se você já codifica Expert Advisors e ainda depende de MessageBox() para interação, este guia chega como um diagnóstico preciso: ele serve quem precisa de UI simples, mas morre ao enfrentar layouts complexos ou integração com bibliotecas externas.

Quem vai extrair valor real

  • Desenvolvedores intermediários que dominam a sintaxe MQL5, mas ainda não exploraram o CCustomDialog.
  • Traders que desejam validar parâmetros antes de executar ordens – por exemplo, mudar SL/TP em tempo real.
  • Freelancers que entregam scripts customizados a clientes que exigem um “campo de texto” ou “botão OK/Cancel”.

Quem deve pular agora

  • Iniciantes absolutos que ainda lutam com o ambiente MetaEditor; a curva de aprendizado da API de diálogos pode ser maior que a do próprio MQL5.
  • Quem busca UI de padrão “desktop” (drag‑and‑drop, temas avançados) – o módulo é restrictivo ao visual padrão da plataforma.
  • Projetos que exigem desempenho em tempo real ultra‑baixo; cada caixa impõe overhead de thread UI.

Limitações práticas

  • Somente funciona em clientes MetaTrader 5 desktop; MetaTrader 5 mobile e WebTrader ignoram diálogos.
  • Eventos de botão são síncronos – o EA bloqueia até que o usuário responda.
  • Sem suporte oficial a fontes personalizadas ou animações; tudo fica no “look‑and‑feel” padrão da plataforma.

FAQ contextual

PerguntaResposta
Posso usar em teste de estratégia?Não. O Strategy Tester não processa diálogos, levando a falhas de execução.
Como faço para recolher múltiplos valores?Utilize dialog.AddEditBox() para cada campo e extraia com dialog.GetString().
Existe callback assíncrono?Não. A única forma é monitorar dialog.IsClosed() no ciclo OnTimer().

Checklist de compatibilidade

  • MetaEditor ≥ 5.00
  • Cliente desktop instalado
  • Projeto não depende de testes automáticos simultâneos
  • Usuário final confortável em lidar com pop‑ups

Mini cenários reais

Cenário A: Um trader de scalping usa um dialog para confirmar a ordem antes de abrir. O bloqueio de 2 s não afeta a estratégia, e o controle de risco aumenta.

Cenário B: Um algoritmo de arbitragem 24/7 tenta exibir um aviso de falha de conexão. O bloqueio interrompe a lógica, gerando perdas – aqui o dialog é um inimigo.

Parecer editorial equilibrado

O material entrega o essencial para quem quer “pôr a cara” nas estratégias, mas não tenta transformar o MQL5 em framework UI completo. É uma ferramenta de nicho, bem documentada, porém limitada ao ecossistema da MT5 desktop. Se seu workflow aceita pausas humanas, a compra é justificável; caso contrário, o custo de oportunidade pode superar o benefício.

Próximos passos: teste a amostra no seu ambiente de desenvolvimento, valide a resposta do usuário em OnTimer(), e só então decida integrar ao produto final.

Adquirir o guia

Deixe uma resposta

Related Post