O Expert Advisor "Test_ChartEvent.mq4" é um exemplo prático que demonstra os diversos tipos de eventos de ChartEvent, como eventos de teclas do teclado, cliques e movimentos do mouse, além de eventos personalizados. Para obter ajuda, basta pressionar a tecla 'H' e para entrar no modo de evento MOUSE_MOVE, pressione a tecla 'M'.
O código fonte é compatível tanto com o MetaTrader 4 quanto com o MetaTrader 5.
Protótipo de Função
- bool Obj_Create()
- bool Obj_Delete()
- bool Obj_Move(int hSens,int vSens) - move um objeto.
- void Print_Info() - imprime informações sobre os objetos.
- int MouseMove(int aXX,int aYY,string sState) - trata o evento de movimento do mouse.
Variáveis Globais
- int gChartNo=0
- int gSubWinNo=0
- string gsObj_Name_selected="" - o nome do objeto atualmente selecionado.
Eventos Personalizados
Três tipos de eventos personalizados são definidos:
- #define cMyEvent_1 0
- #define cMyEvent_2 1
- #define cMyEvent_3_broadcast 2
Função OnTimer()
Essa função cria o ChartEvent personalizado periodicamente. Ela gera aleatoriamente esses três eventos personalizados (cMyEvent_1, cMyEvent_2 e cMyEvent_3_broadcast). Em particular, o evento cMyEvent_3_broadcast é gerado para todas as janelas de gráfico abertas.
Exemplo de Classe
A classe "CObjectMan" foi criada para gerenciar a funcionalidade dos objetos em um gráfico. Duas instâncias (variáveis) da classe são declaradas: gObjectMan1 e gObjectMan2.
Os nomes dos Objetos Gráficos vinculados a essas duas instâncias são, respectivamente: "Botão Verde" e "Botão Amarelo".
Processamento de Eventos
void OnChartEvent():
Os eventos "CHARTEVENT_KEYDOWN":
- As 4 teclas direcionais (setas) ou as 4 teclas direcionais do painel digital para mover o objeto selecionado.
- 'H': imprime as informações de ajuda (na janela de log do expert).
- 'I': imprime as informações de posição de dois Objetos.
- 'M': ativa o evento MOUSE_MOVE.
Eventos Personalizados
Imprime informações sobre esses eventos, especialmente para o evento MyEvent_3_broadcast.
Eventos de Objetos
- CHARTEVENT_OBJECT_CHANGE, CHARTEVENT_OBJECT_DRAG, CHARTEVENT_OBJECT_DELETE - imprime o nome do objeto correspondente.
- CHARTEVENT_OBJECT_CLICK - imprime o nome do objeto sendo clicado, seleciona seu nome para mover pelas teclas direcionais.
Eventos do Mouse
- CHARTEVENT_CLICK - imprime as informações da barra clicada: os preços (abertura, fechamento) e o horário da barra.
- CHARTEVENT_MOUSE_MOVE (veja: CHART_EVENT_MOUSE_MOVE) - imprime as informações do intervalo coberto: número de barras, variação de preço.

Demonstração
Você pode realizar os seguintes testes:
- Clique em um dos dois objetos (Botões) para selecionar e use as teclas de seta para mover o objeto selecionado.
- Clique na barra gráfica e veja as informações da barra na aba de log (mensagem).
- Pressione a tecla 'M' para entrar no modo de evento MOUSE_MOVE. Pressione Ctrl+F para mostrar a cruz, depois faça uma operação de arrastar e soltar. Se você não vir a mensagem de log, altere o parâmetro de entrada: "iLogLevel".
Comentário 0