- OnStart
- OnInit
- OnDeinit
- OnTick
- OnCalculate
- OnTimer
- OnTrade
- OnTradeTransaction
- OnBookEvent
- OnChartEvent
- OnTester
- OnTesterInit
- OnTesterDeinit
- OnTesterPass
OnBookEvent
Se llama en los indicadores y expertos al suceder el evento BookEvent. La función está pensada para el procesamiento de los cambios de la profundidad del mercado (Depth of Market).
void OnBookEvent(
|
Parámetros
symbol
[in] Nombre del instrumento financiero según el cual ha tenido lugar el evento BookEvent
Valor retornado
No hay valor retornado
Observación
Para obtener el evento BookEvent de cualquier símbolo, basta con suscribirse preliminarmente para recibir estos eventos para este símbolo con la ayuda de la función MarketBookAdd(). Si queremos anular la suscripción para recibir el evento BookEvent de un símbolo concreto, debemos llamar la función MarketBookRelease().
El evento BookEvent retransmite dentro de los límites del gráfico. Esto significa que basta con que una aplicación en el gráfico se suscriba para recibir el evento BookEvent con la ayuda de la función MarketBookAdd, y todos los demás indicadores y expertos iniciados en este gráfico y que además tengan el manejador OnBookEvent() recibirán este evento. Por eso mismo, es necesario analizar el nombre del símbolo que se transmite al manejador OnBookEvent() como parámetro symbol.
Para todas las aplicaciones iniciadas en un gráfico se dispone de contadores aparte para recibir los eventos BookEvent para cada símbolo por separado. Esto significa que en cada gráfico puede haber varias suscripciones a varios símbolos, y para cada símbolo hay un contador propio. La suscripción y la baja de la suscripción de los eventos de BookEvent solo cambian el contador de suscripciones de los símbolos indicados, pero en este caso, además, solo dentro de los límites del gráfico. Esto significa que en dos gráficos colindantes puede haber suscripciones a los eventos BookEvent en el mismo símbolo, pero con diferentes valores en los contadores de suscripciones.
El valor inicial del contador de suscripciones es igual a cero. Con cada llamada de MarketBookAdd(), el contador de suscripciones para el símbolo indicado en cada gráfico aumenta en una unidad (el símbolo del gráfico y el símbolo en MarketBookAdd() no deben coincidir obligatoriamente). Al llamar a MarketBookRelease(), el contador de suscripciones del símbolo indicado en los límites del gráfico disminuye en una unidad. La transmisión de los eventos BookEvent de cualquier símbolo dentro del gráfico continúa hasta que el contador de suscripciones del símbolo dado no sea igual a cero. Por eso, es importante que cada programa MQL5 que contenga llamadas a MarketBookAdd(), al finalizar su funcionamiento deje de estar suscrita para recibir eventos de cada símbolo utilizado con la ayuda de MarketBookRelease(). Para ello, basta con que el número de llamadas a MarketBookAdd() y MarketBookRelease() de cada llamada sea par durante el tiempo de vida útil del programa MQL5. El uso de banderas o contadores propios de suscripciones dentro del programa permite trabajar de forma segura con los eventos de BookEvent y previene contra la desactivación de las suscripciones para obtener este evento en terceros programas dentro de un mismo gráfico.
Los eventos BookEvent nunca se omiten y siempre se ponen en la cola, incluso si en este momento aún no ha finalizado el procesamiento del anterior evento BookEvent. En este caso, además, es necesario tener en cuenta que los eventos BookEvent se entregan por sí mismos y no portan en ellos el estado de la profundidad de mercado. Esto significa que la llamada a MarketBookGet() desde el manejador OnBookEvent() permite recibir el estado actual de la profundidad de mercado en el momento de la llamada, y no el estado de la profundidad de mercado que provocó el envío del evento BookEvent. Para recibir todos los estados únicos de la profundidad de mercado de forma garantizada, la función OnBookEvent() deberá ser lo más rápida posible.
Ejemplo
//+------------------------------------------------------------------+
|
Ver también
MarketBookAdd, MarketBookRelease, MarketBookGet, OnTrade, OnTradeTransaction, OnTick, funciones de procesamiento de eventos, Ejecución de programas, Eventos del terminal de cliente