- 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
Coloreado de gráficos por elementos
Además de los tipos de dibujo estándar enumerados anteriormente en ENUM_DRAW_TYPE, la plataforma proporciona a sus variantes la posibilidad de colorear individualmente los valores de cada barra. Para ello se utiliza un búfer de indicador adicional en el que se almacenan los números de color. Los números hacen referencia a elementos de un array especial que contiene un conjunto de colores definidos por el programador. El número máximo de colores es 64.
En la siguiente tabla se enumeran los elementos ENUM_DRAW_TYPE con soporte de color y el número de búferes necesarios para dibujarlos, incluyendo 1 búfer con índices de color.
Tipo de visualización |
Descripción |
Número de |
---|---|---|
DRAW_COLOR_LINE |
Línea multicolor |
1+1 |
DRAW_COLOR_SECTION |
Segmentos multicolores |
1+1 |
DRAW_COLOR_ARROW |
Flechas multicolores |
1+1 |
DRAW_COLOR_HISTOGRAM |
Histograma multicolor a partir de la línea cero |
1+1 |
DRAW_COLOR_HISTOGRAM2 |
Histograma multicolor entre valores emparejados de dos búferes de indicadores |
2+1 |
DRAW_COLOR_ZIGZAG |
Zigzag multicolor |
2+1 |
DRAW_COLOR_BARS |
Barras multicolores |
4+1 |
DRAW_COLOR_CANDLES |
Velas multicolores |
4+1 |
Al vincular los búferes a los gráficos, tenga en cuenta que debe especificarse un búfer de color adicional en el primer parámetro SetIndexBuffer bajo el número que va inmediatamente después de los búferes de datos. Por ejemplo, para colorear una línea utilizando un búfer de datos y un búfer de color, los datos reciben el número 0 y sus colores, el número 1:
double ColorLineData[];
|
El conjunto inicial de colores de la paleta para el diagrama N puede especificarse mediante la directiva #property indicator_colorN, que especifica los colores necesarios separados por comas como constantes con nombre o literales de color. Por ejemplo, la siguiente entrada en el indicador seleccionará 6 colores estándar para colorear el gráfico 0º (la numeración empieza por 1 en las directivas):
#property indicator_color1 clrRed,clrBlue,clrGreen,clrYellow,clrMagenta,clrCyan |
Más adelante en el programa, debe especificar no el color en sí, que mostrará la construcción gráfica, sino sólo su índice. La numeración en la paleta se realiza como en un array normal, empezando por 0. Por lo tanto, si necesita establecer un color verde para la i-ésima barra, entonces es suficiente con establecer el índice del color verde de la paleta en el búfer de color, es decir, 2 en este caso.
ColorLineColors[i]=2;// reference to element with color clrGreen |
El conjunto de colores para colorear no se establece de una vez por todas, sino que puede cambiarse dinámicamente mediante la función PlotIndexSetInteger(index, PLOT_LINE_COLOR, color).
Por ejemplo, para sustituir el color clrGreen de la paleta anterior por clrGray, utilice la siguiente llamada:
PlotIndexSetInteger(0, PLOT_LINE_COLOR, clrGray); |
Vamos a aplicar la coloración en nuestro indicador WPR. El nuevo archivo es IndColorWPR.mq5. Los cambios afectan a los siguientes ámbitos.
El número de búferes se ha incrementado en 1. Tres colores en lugar de uno.
#property indicator_buffers 2
|
Se ha añadido un nuevo array bajo el búfer de color y su registro en OnInit.
double WPRColors[];
|
Si no establece el tipo de búfer INDICATOR_COLOR_INDEX (es decir, con una llamada SetIndexBuffer(1, WPRColors) se trataría por defecto como INDICATOR_DATA), se hará visible en la página Data Window.
En la función OnCalculate dentro del ciclo de trabajo, vamos a añadir coloración basada en el análisis del valor de la i-ésima barra. Por defecto, utilizamos el color con índice 0, es decir, el antiguo clrDodgerBlue. Si las lecturas del indicador se mueven hacia la zona superior, se resaltan en color 2 (clrRed), y si entran en la zona inferior, se colorean en 1 (clrGreen).
int OnCalculate(ON_CALCULATE_STD_FULL_PARAM_LIST)
|
Este es su aspecto en la pantalla:
Indicador WPR con zonas de sobrecompra y sobreventa coloreadas
Tenga en cuenta que el fragmento de línea se pinta en un color alternativo si su punto final (barra) se encuentra en la zona superior o inferior. En este caso, la lectura anterior puede estar dentro de la zona central, lo que puede dar la impresión de que el color es incorrecto. Sin embargo, se trata de un comportamiento correcto, coherente con la implementación actual y con el modo en que la plataforma utiliza el color.
El color del segmento del gráfico de líneas DRAW_COLOR_LINE entre dos barras adyacentes viene determinado por el color de la barra de la derecha (más reciente).
Si desea resaltar con color sólo los fragmentos en los que ambas barras adyacentes se encuentran en la misma zona, modifique el código como sigue:
WPRColors[i] = 0;
|
Además, recuerde que hemos añadido al código fuente la configuración del título y la precisión de la representación de los valores (2 caracteres). Comparar la nueva imagen con la antigua le permitirá darse cuenta de estas diferencias visuales. En concreto, el título tiene ahora el aspecto de «%R(14)», y la escala vertical de valores es mucho más compacta.
El último aspecto que cambiaremos en el indicador IndColorWPR.mq5 es que omitimos el dibujo en las barras iniciales.