- Conceptos básicos del calendario
- Obtener la lista y las descripciones de los países disponibles
- Consultar tipos de eventos por país y moneda
- Obtener descripciones de eventos por ID
- Obtener registros de eventos por país o moneda
- Obtener registros de eventos de un tipo específico
- Leer registros de sucesos por ID
- Seguimiento de los cambios de eventos por país o moneda
- Seguimiento de los cambios de eventos por tipo
- Filtrar eventos por múltiples condiciones
- Transferir la base de datos de calendarios al probador
- Operar con el calendario
Obtener registros de eventos de un tipo específico
Si es necesario, un programa MQL tiene la capacidad de solicitar eventos de un tipo específico: para ello, basta con conocer de antemano el identificador del evento, por ejemplo, utilizando las funciones CalendarEventByCountry o CalendarEventByCurrency que se presentaron en la sección Consultar tipos de eventos por país y divisa.
int CalendarValueHistoryByEvent(ulong id, MqlCalendarValue &values[], datetime from, datetime to = 0)
La función CalendarValueHistoryByEvent rellena el array pasado por referencia con registros de eventos de un tipo específico indicado por el identificador id. Los parámetros from y to permiten limitar el intervalo de fechas en el que se buscan los eventos.
Si no se especifica el parámetro opcional to, todas las entradas del calendario se colocarán en el array, empezando por la hora de from y avanzando hacia el futuro. Para consultar todos los eventos pasados, establezca from en 0. Si ambos parámetros from y to son 0, se devolverán todos los eventos históricos y programados. En todos los demás casos, cuando to no es igual a 0, debe ser mayor que from.
El array values puede ser dinámico (entonces la función lo ampliará o reducirá automáticamente según la cantidad de datos) o de tamaño fijo (entonces sólo se copiará en el array la parte que quepa).
La función devuelve el número de caracteres copiados.
Como ejemplo, considere el script CalendarStatsByEvent.mq5, que calcula las estadísticas (frecuencia de aparición) de eventos de diferentes tipos para un país o moneda determinados en un intervalo de tiempo dado.
Las condiciones de análisis se especifican en las variables de entrada.
input string CountryOrCurrency = "EU";
|
En función de la longitud de la cadena CountryOrCurrency, se interpreta como un código de país (2 caracteres) o de divisa (3 caracteres).
Para recopilar estadísticas, declararemos una estructura; sus campos almacenarán el identificador y el nombre del tipo de evento, su importancia y el contador de dichos eventos.
struct CalendarEventStats
|
En la función OnStart, primero solicitamos todo tipo de eventos utilizando la función CalendarEventByCountry o CalendarEventByCurrency hasta la profundidad especificada de la historia y hacia el futuro, y luego, en un bucle a través de las descripciones de eventos recibidas en el array events, llamamos a CalendarValueHistoryByEvent para cada ID de evento. En esta aplicación no nos interesa el contenido del array values, ya que sólo necesitamos conocer su recuento.
void OnStart()
|
Si la llamada a la función tiene éxito, rellenamos la estructura CalendarEventStats y la añadimos al array de estructuras stats. A continuación, ordenamos la estructura de la forma que ya conocemos (la macro SORT_STRUCT se describe en la sección Comparar, ordenar y buscar en arrays).
La ejecución del script con la configuración por defecto genera algo como esto en el registro (abreviado):
CalendarEventByCountry(CountryOrCurrency,events)=82 / ok
|
Tenga en cuenta que se recibió un total de 82 tipos de eventos, pero en el array de estadísticas sólo teníamos 74. Esto se debe a que la función CalendarValueHistoryByEvent devuelve false (fallo) y código de error cero en _LastError si no hubo eventos de ningún tipo en el rango de fechas especificado. En la prueba anterior hay 8 entradas de este tipo que teóricamente existen pero que nunca se encontraron en el año.