Seguimiento de los cambios de eventos por tipo

La API de MQL5 le permite solicitar cambios recientes no sólo en general para todo el calendario o por país o divisa, sino también en un rango más estrecho, o mejor dicho, para un tipo específico de evento.

En teoría, podemos decir que las funciones integradas permiten filtrar los eventos en función de varias condiciones básicas: hora, país, divisa o tipo de evento. Para otros atributos, como la importancia o el sector económico, deberá aplicar su propio filtrado, del que nos ocuparemos más adelante. De momento, vamos a presentar la función CalendarValueLastByEvent.

int CalendarValueLastByEvent(ulong id, ulong &change_id, MqlCalendarValue &values[])

La función rellena el array values pasado por referencia con registros de eventos de un tipo específico con el identificador id que se han producido desde change_id. Este parámetro change_id es a la vez entrada y salida: el código de llamada pasa en él la etiqueta del estado pasado del calendario, tras lo cual se solicitan los cambios, y cuando vuelve el control, la función escribe la etiqueta actual del estado de la base de datos del calendario en change_id. Debe utilizarse la próxima vez que se llame a la función.

Si pasa null en change_id, entonces la función no rellena el array sino que simplemente envía el estado actual de la base de datos a través del parámetro change_id.

El array puede ser dinámico (entonces se ajustará automáticamente a la cantidad de datos) o de tamaño fijo (si su tamaño es insuficiente, sólo se copiarán los datos que quepan).

El valor de salida de la función es igual al número de elementos copiados en el array values. Si no hay cambios o se especifica change_id = 0, la función devolverá 0.

Para comprobar si se ha producido algún error, analice la variable integrada _LastError. Algunos de los posibles códigos de error son:

  • 4004 - ERR_NOT_ENOUGH_MEMORY (memoria insuficiente para completar la solicitud);
  • 5401 - ERR_CALENDAR_TIMEOUT (solicitud agotada);
  • 5400 - ERR_CALENDAR_MORE_DATA (el tamaño del array fijo no es suficiente para obtener todos los valores).

No daremos un ejemplo aparte para CalendarValueLastByEvent. En lugar ello, pasemos a una tarea más compleja, pero muy demandada, de consulta y filtrado de entradas de calendario con condiciones arbitrarias sobre atributos de noticias, en la que intervendrán todas las funciones de la API «calendario». Este será el tema de la próxima sección.