- OnStart
- OnInit
- OnDeinit
- OnTick
- OnCalculate
- OnTimer
- OnTrade
- OnTradeTransaction
- OnBookEvent
- OnChartEvent
- OnTester
- OnTesterInit
- OnTesterDeinit
- OnTesterPass
OnBookEvent
É chamada em indicadores e EAs quando ocorre o evento BookEvent. A função é projetada para processar alterações no livro de ofertas (Depth of Market).
void OnBookEvent(
|
Parâmetros
symbol
[in] Nome do instrumento financeiro em que ocorre o evento BookEvent
Valor retornado
Sem valor retornado
Observação
Para receber eventos BookEvent em qualquer símbolo, basta fazer uma pré-assinatura a fim de receber esses eventos para este símbolo usando a função MarketBookAdd(). Para cancelar a assinatura de recebimento do evento BookEvent num símbolo específico, você deve chamar a função MarketBookRelease().
O evento BookEvent é difundido no gráfico. Isso significa que basta que um aplicativo no gráfico assine a recepção do evento BookEvent usando a função MarketBookAdd, para todos os outros indicadores e EAs - que estão sendo executados neste gráfico e que têm o manipulador OnBookEvent() - receberem esse evento. Por isso, você precisa analisar o nome do símbolo que é transferido para o manipulador OnBookEvent() como um parâmetro symbol.
Para todos os aplicativos em andamento no mesmo gráfico, são executados contadores separados para receber eventos BookEvent na seção de símbolos. Isso significa que em cada gráfico pode haver assinaturas de diferentes símbolos, e para cada símbolo existe seu próprio contador. Assinatura e remoção de assinatura de eventos BookEvent alteram o contador de assinaturas só dos símbolos especificados, apenas dentro do mesmo gráfico. Isso significa que, em dois gráficos adjacentes, pode haver assinaturas de eventos BookEvent para o mesmo símbolo, mas com valores diferentes para o contador de assinaturas.
O valor inicial do contador de assinaturas é zero. Após cada chamada da MarketBookAdd(), o contador de assinaturas para o símbolo especificado neste gráfico é aumentado em 1 (não é necessário o símbolo do gráfico e o símbolo na MarketBookAdd() coincidirem). Após a chamada da MarketBookRelease(), o contador de assinaturas para o símbolo especificado dentro do gráfico é reduzido em 1. A transmissão de eventos BookEvent em qualquer símbolo dentro do gráfico continua até que o contador de assinaturas para este símbolo se torne zero. Portanto, é importante que cada programa MQL5 contendo chamadas da MarketBookAdd(), ao concluir seu trabalho, corretamente cancele a recepção de eventos para cada símbolo com a ajuda da MarketBookRelease(). Para isso, basta que - para cada chamada - o número de chamadas da MarketBookAdd() e da MarketBookRelease() seja par durante toda a vida útil do programa MQL5. Usar sinalizadores ou próprios contadores de assinaturas dentro do programa permite trabalhar com segurança com eventos BookEvent e impede a remoção de assinaturas de recepção desse evento em programas de terceiros dentro do mesmo gráfico.
Os eventos BookEvent nunca são ignorados e sempre são enfileirados, mesmo que o processamento do evento BookEvent anterior ainda não tenha sido concluído. Deve-se ter em mente que os eventos BookEvent são entregues por eles mesmos e não levam consigo o status do livro de ofertas. Isso significa que a chamada da MarketBookGet() a partir do manipulador OnBookEvent() permite - em vez do status do livro de ofertas que causou o envio do evento BookEvent - obter o status atual do livro de ofertas no momento da chamada. Para garantir que todos os status exclusivos sejam obtidos, a função OnBookEvent() deve ser o mais rápida possível.
Exemplo
//+------------------------------------------------------------------+
|
Veja também
MarketBookAdd, MarketBookRelease, MarketBookGet, OnTrade, OnTradeTransaction, OnTick, Função de manipulação de eventos, Execução do programa, Eventos do terminal do cliente