- Generar ticks en el probador
- Gestión del tiempo en el comprobador: temporizador, Sleep, GMT
- Pruebas de visualización: gráfico, objetos, indicadores
- Pruebas multidivisa
- Criterios de optimización
- Obtener estadísticas financieras de prueba: TesterStatistics
- Evento OnTester
- Sintonización automática: ParameterGetRange y ParameterSetRange
- Grupo de eventos OnTester para el control de la optimización
- Enviar marcos de datos de los agentes al terminal
- Obtener marcos de datos en terminal
- Directivas del preprocesador para el probador
- Gestionar la visibilidad de los indicadores: TesterHideIndicators
- Emulación de operaciones de depósito y retirada
- Parada forzada de la prueba: TesterStop
- Ejemplo de Gran Asesor Experto
- Cálculos matemáticos
- Depuración y creación de perfiles
- Limitaciones de las funciones del probador
Grupo de eventos OnTester para el control de la optimización
Existen tres eventos especiales en MQL5 para gestionar el proceso de optimización y transferir los resultados arbitrarios aplicados (además de los indicadores de trading) de los agentes al terminal: OnTesterInit, OnTesterDeinit y OnTesterPass. Habiendo descrito los manejadores para ellos en el código, el programador podrá realizar las acciones que necesite antes de iniciar la optimización, después de que la optimización se haya completado, y al final de cada una de las pasadas individuales de optimización (si se han recibido datos de la aplicación desde el agente; abajo encontrará más información al respecto).
Todos los manejadores son opcionales. Como hemos visto, la optimización funciona sin ellos. Debe entenderse también que los tres eventos funcionan sólo durante la optimización, pero no en una sola prueba.
El Asesor Experto con estos manejadores se carga automáticamente en un gráfico independiente del terminal con el símbolo y periodo especificados en el probador. Este Asesor Experto de instancia no negocia, sino que sólo realiza acciones de servicio. Todos los demás manejadores de eventos, como OnInit, OnDeinit y OnTick, no funcionan en él.
Para averiguar si un Asesor Experto se ejecuta en el modo de trading normal en el agente o en el modo de servicio en el terminal, llame a la función MQLInfoInteger(MQL_FRAME_MODE) en su código y obtenga true o false. Este modo de servicio se conoce también como modo «frames» y se aplica a los paquetes de datos que se pueden enviar al terminal desde las instancias del Asesor Experto en los agentes. Veremos un poco más adelante cómo se hace.
Durante la optimización, sólo una instancia del Asesor Experto trabaja en el terminal y, si es necesario, recibe los frames entrantes. No olvide que tal instancia se lanza sólo si el código del Asesor Experto contiene uno de los tres manejadores de eventos descritos.
El evento OnTesterInit se genera cuando se lanza la optimización en el probador de estrategias antes de la primera pasada. El manejador tiene dos versiones: con tipo de retorno int y void.
int OnTesterInit(void)
void OnTesterInit(void)
En la versión de retorno int, un valor cero (INIT_SUCCEEDED) significa una inicialización exitosa del Asesor Experto lanzado en el gráfico en el terminal, lo que permite iniciar la optimización. Cualquier otro valor significa un código de error, y la optimización no se iniciará.
La segunda versión de la función siempre implica una preparación exitosa del Asesor Experto para la optimización.
Se proporciona un tiempo limitado para la ejecución de OnTesterInit, después del cual el Asesor Experto se verá obligado a terminar, y la propia optimización se cancelará. En este caso, se mostrará el mensaje correspondiente en el registro del probador.
En la sección anterior vimos un ejemplo de cómo se utilizaba el manejador OnTesterInit para modificar los parámetros de optimización utilizando las funciones ParameterGetRange/ParameterSetRange.
void OnTesterDeinit(void)
La función OnTesterDeinit se llama al finalizar la optimización del Asesor Experto.
La función está pensada para el tratamiento final de los resultados de optimización aplicados. Por ejemplo, si se abrió un archivo en OnTesterInit para escribir el contenido de los frames, habrá que cerrarlo en OnTesterDeinit.
void OnTesterPass(void)
El evento OnTesterPass se genera automáticamente cuando llega un frame de datos durante la optimización. La función permite procesar los datos de aplicación recibidos de las instancias del Asesor Experto que se ejecutan en los agentes durante la optimización. Un frame del agente de pruebas debe enviarse desde el manejador OnTester utilizando la función FrameAdd.
En el diagrama se muestra la secuencia de eventos al optimizar Asesores Expertos
Los agentes envían automáticamente al terminal un conjunto estándar de estadísticas financieras sobre cada pasada de prueba. El Asesor Experto no está obligado a enviar nada utilizando FrameAdd si no lo necesita. Si no se utilizan frames, no se llamará al manejador OnTesterPass.
Utilizando OnTesterPass puede procesar dinámicamente los resultados de la optimización «sobre la marcha»; por ejemplo, mostrarlos en un gráfico en el terminal o añadirlos a un archivo para su posterior procesamiento por lotes.
Para demostrar las capacidades de los manejadores de eventos de OnTester, primero necesitamos conocer las funciones para trabajar con frames. Se presentan en las secciones siguientes.