- Principales características de los indicadores
- Evento indicador principal: OnCalculate
- Dos tipos de indicadores: para la ventana principal y para la subventana
- Ajuste del número de buffers y gráficos
- Asignación de un array como buffer: SetIndexBuffer
- Configuración de plot: PlotIndexSetInteger
- Reglas de asignación de buffers y gráficos
- Aplicación de directivas para personalizar plots
- Configuración de nombres de plots
- Visualización de las carencias de datos (elementos vacíos)
- Indicadores de subventanas independientes: tamaños y niveles
- Propiedades generales de los indicadores: precisión del título y del valor
- Coloreado de gráficos por elementos
- Omitir dibujo en barras iniciales
- Esperar datos y gestionar la visibilidad (DRAW_NONE)
- Indicadores multidivisa y multitemporal
- Seguimiento de formación de barras
- Comprobación de indicadores
- Limitaciones y ventajas de los indicadores
- Crear un borrador de indicador en el Asistente MQL
Comprobación de indicadores
El probador incorporado de MetaTrader 5 admite dos tipos de programas MQL: Asesores Expertos e indicadores. Los indicadores se comprueban siempre en la ventana visual, pero esto sólo se aplica a la comprobación de un indicador aislado. Si el indicador se crea y se llama desde un Asesor Experto mediante programación, entonces este Asesor Experto junto con el indicador o indicadores puede probarse sin visualización, a discreción del usuario. Estudiaremos la tecnología del uso de indicadores desde el código MQL en el próximo capítulo. La misma tecnología se utilizará para la integración con los Asesores Expertos.
Al mismo tiempo, el desarrollador del indicador debe prestar atención al hecho de que, sin visualización, el probador utiliza un método de cálculo acelerado para los indicadores que se llaman desde Asesores Expertos. Los datos no se calculan en cada tick, sino sólo cuando se solicitan los datos pertinentes desde los búferes de indicadores (véase la función CopyBuffer).
Si el indicador aún no se ha calculado en el tick actual, se calcula una vez en el primer acceso a sus datos. Si se generan otras solicitudes durante el mismo tick, los datos calculados se devuelven en el formulario preparado. Si no se leen los búferes del indicador en el tick actual, este no se calcula. El cálculo de indicadores a la carta proporciona un importante impulso a las pruebas y la optimización.
Si un determinado indicador requiere cálculos precisos y no puede saltarse ticks, MQL5 puede dar instrucciones al probador para que habilite el recálculo del indicador en cada tick. Esto se hace con la siguiente directiva:
#property tester_everytick_calculate |
La palabra everytick de la directiva se refiere específicamente al cálculo del indicador y no afecta al modo de generación de ticks. En otras palabras: los ticks significan cambios de precios generados por el probador, ya sea para cada tick, para precios OHLC M1, o para aperturas de barras, y esta configuración del probador permanece en efecto.
Para los indicadores que hemos considerado en este capítulo, esta propiedad no es crítica. También debe tenerse en cuenta que sólo se aplica a las operaciones en el probador de estrategias. En el terminal, los indicadores siempre reciben eventos de OnCalculate en cada tick entrante (lo que ofrece la posibilidad de saltarse ticks si sus cálculos en OnCalculate tardan demasiado y no se completan antes de que llegue un nuevo tick).
En cuanto al comprobador, los indicadores se calculan en cada tick en cualquiera de las siguientes condiciones:
- En modo visual;
- Si existe la directiva tester_everytick_calculate;
- Si tienen la llamada EventChartCustom o las funciones OnChartEvent u OnTimer.
Vamos a intentar probar el indicador IndMultiSymbolMonitor.mq5 de la sección anterior.
Seleccionamos el símbolo principal y el marco temporal de EURUSD, gráfico H1. El método de generación de ticks está «basado en ticks reales».
Tras iniciar la prueba, deberíamos ver las siguientes entradas en el registro de la ventana de modo visual:
2021.10.20 00:00:00 New bar(s) on: EURUSD USDCHF USDJPY , in-sync:false 2021.10.20 00:00:00 New bar(s) on: AUDUSD , in-sync:false 2021.10.20 00:00:00 New bar(s) on: GBPUSD , in-sync:false 2021.10.20 00:00:02 New bar(s) on: USDCAD , in-sync:false 2021.10.20 00:00:11 New bar(s) on: NZDUSD , in-sync:true 2021.10.20 01:00:04 New bar(s) on: EURUSD GBPUSD USDCHF USDJPY AUDUSD USDCAD NZDUSD , in-sync:true 2021.10.20 02:00:00 New bar(s) on: EURUSD USDJPY NZDUSD , in-sync:false 2021.10.20 02:00:00 New bar(s) on: USDCHF , in-sync:false 2021.10.20 02:00:01 New bar(s) on: AUDUSD , in-sync:false 2021.10.20 02:00:15 New bar(s) on: GBPUSD USDCAD , in-sync:true 2021.10.20 03:00:00 New bar(s) on: EURUSD AUDUSD NZDUSD , in-sync:false 2021.10.20 03:00:00 New bar(s) on: GBPUSD USDJPY USDCAD , in-sync:false 2021.10.20 03:00:12 New bar(s) on: USDCHF , in-sync:true |
Como puede ver, aparecen nuevas barras en diferentes símbolos de forma gradual. Normalmente, se producen varios eventos antes de que aparezca la bandera «in-sync» en true.
También puede realizar pruebas para otros indicadores de este capítulo. Tenga en cuenta que, si un programa MQL consulta el historial de ticks, seleccione el método de generación «basado en ticks reales» en el comprobador.
La prueba «por precios de apertura» sólo se puede utilizar para los indicadores y Asesores Expertos que se desarrollan con ayuda para este modo; por ejemplo, calculan sólo por Open precios o analizan barras completadas a partir de la 1ª.
¡Atención! Al probar indicadores en el probador, el evento OnDeinit no funciona. Además, no se realizan otras finalizaciones; por ejemplo, no se llama a los destructores de objetos globales.