- 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
Ajuste del número de búferes y trazados
Para que el indicador muestre los resultados de sus cálculos en el gráfico, debe definir uno o varios arrays y declararlos como búferes del indicador. El número de búferes se establece mediante la directiva:
#property indicator_buffers N |
Aquí N es un número entero de 1 a 512. Esta directiva establece el número de búferes que estarán disponibles en el código para calcular el indicador.
N debe ser una constante de tipo entero (literal) o una definición de macro equivalente. Dado que se trata de una directiva de preprocesador, aún no existe ninguna variable (ni siquiera con el modificador const) en la fase de preprocesamiento del código fuente.
No obstante, los búferes no bastan para visualizar los datos calculados. En MQL5, el sistema de visualización es de dos niveles. El primer nivel está formado por los búferes de indicadores, que son arrays dinámicos que almacenan datos para su visualización. El segundo nivel es para gestionar cómo se mostrarán estos datos. Se construye sobre la base de nuevas entidades denominadas construcciones gráficas (o diagramas, o trazados). La cuestión es que las distintas formas de mostrar los datos pueden requerir distintos números de búferes de indicadores. Por ejemplo, la media móvil tiene exactamente un valor por barra y, por lo tanto, un búfer de indicador es suficiente para un gráfico lineal de este tipo. Sin embargo, para visualizar un gráfico de velas, se necesitan 4 valores por barra (precios OHLC). Así, un trazado gráfico de este tipo requiere 4 búferes de indicadores.
El número de gráficos (P) también debe definirse en el código fuente mediante una directiva especial.
#property indicator_plots P |
En el caso más sencillo, el número de búferes y diagramas es el mismo, pero pronto analizaremos ejemplos en los que se necesitan más búferes que construcciones gráficas. Además de las situaciones en las que la construcción gráfica de un tipo concreto requiere un número predeterminado de búferes, a veces tenemos que hacer frente a la necesidad de asignar uno o varios arrays para cálculos intermedios. Dichos arrays no intervienen directamente en el renderizado, pero contienen datos para construir búferes de renderizado. Por supuesto, puede utilizar arrays dinámicos simples para tales fines sin declararlos como búferes, pero entonces tendríamos que controlarlos y redimensionarlos de forma independiente: es mucho más práctico convertirlos en búferes y así ordenar al terminal que asigne memoria.
El número de búferes y trazados gráficos sólo se puede establecer mediante directivas de preprocesador; estas propiedades no se pueden cambiar dinámicamente utilizando funciones MQL5.
Una vez determinado el número de buffers y gráficos, se deben describir en el código fuente los propios arrays, que se convertirán en búferes de indicadores.
Empecemos por desarrollar un nuevo indicador de ejemplo IndReplica1.mq5 para demostrar las partes necesarias en el código fuente. La esencia del indicador será simple: en su único búfer, mostraremos los valores del array de parámetros data recibidos. Como dijimos anteriormente, el usuario selecciona una serie temporal específica para transferir al array data en el momento en que el indicador se aplica al gráfico; por defecto, se ofrecerá una serie temporal con precios de cierre de barra.
Vamos a añadir directivas que describan un búfer y un gráfico.
#property indicator_chart_window
|
Las directivas no asignan el búfer en sí, sino que sólo establecen las propiedades del indicador y preparan el sistema de ejecución para que el programa determine y configure el número especificado de arrays. A continuación, vamos a ver cómo registrar un array como búfer.