Manipulação de eventos

A linguagem MQL5 providencia o processamento de eventos predefinidos. As funções para processar esses eventos devem ser definidas no programa MQL5: o nome da função, o tipo de retorno, a composição dos parâmetros (se houver) e seus tipos devem corresponder estritamente à descrição da função do manipulador de eventos.

É pelo tipo do valor de retorno e pelos tipos de parâmetros que o manipulador de eventos do terminal do cliente identifica as funções que manipulam eventos. Se, para a respectiva função, forem definidos outros parâmetros que não correspondem às seguintes descrições, ou se for especificado um tipo de retorno diferente, essa função não será usada para processar o evento.

Função

Descrição

OnStart

É chamada no script quando ocorre um evento Start para executar ações definidas no script

OnInit

É chamada em indicadores e EAs quando ocorre um evento Init para inicializar um programa MQL5 em execução

OnDeinit

É chamada em indicadores e EAs quando ocorre um evento Deinit para desinicializar um programa MQL5 em execução

OnTick

É chamada em EAs quando ocorre um evento NewTick para processar uma nova cotação

OnCalculate

É chamada em indicadores quando ocorre um evento Calculate para processar alterações de dados de preço

OnTimer

É chamada em indicadores e EAs no início de um evento periódico Timer que é gerado pelo terminal com o intervalo de tempo definido

OnTrade

É chamada em EAs quando ocorre um evento Trade que é gerado no final da negociação no servidor de negociação

OnTradeTransaction

É chamada em EAs quando ocorre um evento TradeTransaction para processar os resultados de uma solicitação de negociação

OnBookEvent

É chamada em EAs quando ocorre um evento BookEvent para processar alterações no livro de ofertas

OnChartEvent

É chamada em indicadores e Eas quando ocorre um evento ChartEvent para processar mudanças no gráfico causadas por ações do usuário ou pelo funcionamento de programas MQL5

OnTester

É chamada em EAs quando ocorre um evento Tester para executar as ações necessárias no final do teste

OnTesterInit

É chamada em EAs quando ocorre um evento TesterInit para executar as ações necessárias antes do início da otimização

OnTesterDeinit

É chamada em EAs quando ocorre um evento TesterDeinit para realizar as ações necessárias após a otimização do EA

OnTesterPass

É chamada em EAs quando ocorre um evento TesterPass para processar a chegada de um novo quadro de dados durante a otimização do EA

O terminal do cliente envia os novos eventos para os respectivos gráficos abertos. Além disso, os eventos podem ser gerados por gráficos (evento de gráfico) ou por programas MQL5 (eventos personalizados). A geração de eventos para criar e excluir objetos gráficos no gráfico pode ser ativada e desativada definindo as propriedades do gráfico CHART_EVENT_OBJECT_CREATE e CHART_EVENT_OBJECT_DELETE. Cada programa MQL5 e cada gráfico tem sua própria fila de eventos, à qual são adicionados todos os eventos recém-chegados.

O programa recebe eventos apenas do gráfico em que está sendo executado. Todos os eventos são processados um após o outro na ordem em que são recebidos. Se na fila já houver um evento NewTick ou este evento estiver no estado de processamento, o novo evento NewTick não será colocado na fila do programa MQL5. Da mesma forma, se na fila do programa MQL5 já estiver o evento ChartEvent ou tal evento estiver sendo processado, não será enfileirado um novo evento desse tipo. Os eventos do temporizador são processados da mesma maneira, isto é, se um evento estiver na fila ou o evento Timer já estiver sendo processado, não será enfileirado um novo evento do temporizador.

Filas de eventos são de tamanho limitado, mas suficiente, portanto, para um programa escrito corretamente, o estouro da fila é improvável. Quando a fila estourar, novos eventos são descartados sem serem enfileirados.

Evite usar loops infinitos para manipular eventos. Uma exceção a essa regra podem ser apenas os scripts que lidam com o evento único Start.

As bibliotecas não processam nenhum evento.