- DRAW_NONE
- DRAW_LINE
- DRAW_SECTION
- DRAW_HISTOGRAM
- DRAW_HISTOGRAM2
- DRAW_ARROW
- DRAW_ZIGZAG
- DRAW_FILLING
- DRAW_BARS
- DRAW_CANDLES
- DRAW_COLOR_LINE
- DRAW_COLOR_SECTION
- DRAW_COLOR_HISTOGRAM
- DRAW_COLOR_HISTOGRAM2
- DRAW_COLOR_ARROW
- DRAW_COLOR_ZIGZAG
- DRAW_COLOR_BARS
- DRAW_COLOR_CANDLES
Estilos de indicadores en ejemplos
El terminal de cliente MetaTrader 5 cuenta con 38 indicadores técnicos incorporados que se puede utilizar en los programas MQL5 a través de las funciones correspondientes. Pero el principal mérito del lenguaje MQL5 consiste en la posibilidad de crear sus propios indicadores personalizados que luego pueden ser utilizados en los Asesores Expertos para obtener valores, o simplemente pueden ser aplicados a los gráficos de precios para realizar el análisis técnico.
Usted puede conseguir toda la variedad de indicadores a base de unos estilos de dibujo básicos, llamados construcciones gráficas. Bajo la construcción se entiende el modo de visualización de datos que el indicador calcula, guarda y ofrece si se solicitan. Hay siete tipos de construcciones básicas:
- línea,
- sección (segmento),
- histograma,
- flecha (símbolo),
- área coloreada (canal con relleno),
- barras,
- velas japonesas.
Cada construcción requiere para su visualización de uno a cinco arrays del tipo double en los que se guardan los valores del indicador. Para un cómodo trabajo del indicador, estos arrays se asocian a los búfers indicadores. La cantidad de búfers en el indicador hace falta declarar de antemano, utilizando las directivas del compilador, por ejemplo:
#property indicator_buffers 3 // número de búfers
|
El número de búfers en el indicador siempre es igual o superior al número de construcciones gráficas en el indicador.
Puesto que cada construcción gráfica base puede tener diferentes variaciones de colores o un carácter específico de visualización, el número real de construcciones en el lenguaje MQL5 es 18:
Construcción |
Descripción |
Búfers de valores |
Búfers de colores |
---|---|---|---|
No se muestra visualmente en el gráfico, pero se puede ver los valores del búfer correspondiente en la "Ventana de datos" |
1 |
- |
|
Se traza una línea a base de los valores del búfer correspondiente (los valores vacíos son indeseables en el búfer) |
1 |
- |
|
Se traza como una línea segmentada entre los valores del búfer correspondiente (normalmente hay muchos valores vacíos) |
1 |
- |
|
Se traza como un histograma desde la línea cero hasta los valores del búfer correspondiente (puede tener valores vacíos) |
1 |
- |
|
Se traza como un histograma basándose en dos búfers indicadores (puede tener valores vacíos) |
2 |
- |
|
Se traza como símbolos (puede tener valores vacíos) |
1 |
- |
|
Parecido al estilo DRAW_SECTION, pero a diferencia de éste puede dibujar segmentos verticales en una barra |
2 |
- |
|
Relleno de colores entre dos líneas. En la "Ventana de datos" se muestran 2 valores de los búfers correspondientes |
2 |
- |
|
Se visualiza en el gráfico en forma de las barras. En la "Ventana de datos" se muestran 4 valores de los búfers correspondientes |
4 |
- |
|
Se visualiza en forma de las velas japonesas. En la "Ventana de datos" se muestran 4 valores de los búfers correspondientes |
4 |
- |
|
Es una línea para la que se puede alternar colores en diferentes barras y cambiar su calor en el momento deseado |
1 |
1 |
|
Parecido al estilo DRAW_SECTION, pero el color para cada sección se puede definir de manera individual; también se puede definir el color de forma dinámica |
1 |
1 |
|
Parecido al estilo DRAW_HISTOGRAM, pero cada raya puede tener su propio color; también se puede definir el color de forma dinámica |
1 |
1 |
|
Parecido a DRAW_HISTOGRAM2, ero cada raya puede tener su propio color; también se puede definir el color de forma dinámica |
2 |
1 |
|
Parecido al estilo DRAW_ARROW, pero cada símbolo puede tener su propio color. Se puede cambiar el color dinámicamente |
1 |
1 |
|
El estilo DRAW_ZIGZAG con las posibilidades del coloreado individual de secciones y el cambio dinámico del color |
2 |
1 |
|
Estilo DRAW_BARS con las posibilidades del coloreado individual de barras y el cambio dinámico del color |
4 |
1 |
|
Estilo DRAW_CANDLES con las posibilidades del coloreado individual de velas y el cambio dinámico del color |
4 |
1 |
La diferencia entre un búfer indicador y un array
En cada indicador hay que declarar a un nivel global uno o más arrays del tipo double que luego tendrá que ser utilizado como búfer indicador mediante la función SetIndexBuffer(). Para dibujar las construcciones gráficas del indicador, se utilizan sólo los valores desde el búfer indicador. No se puede utilizar ningún otro array para este propósito. Además de eso, los valores de los búfers se muestran en la "Ventana de datos".
Un búfer indicador tiene que ser dinámico y no requiere la especificación del tamaño el tamaño del array que ha sido utilizado como búfer indicador se determina por el subsistema ejecutable del terminal de forma automática.
Tras la vinculación del array con el búfer indicador, la dirección de indexación se establece por defecto como en los arrays comunes, pero si hace falta, Usted puede aplicar la función ArraySetAsSeries() para cambiar el modo de acceso a los elementos del array. Por defecto, el búfer indicador se utiliza para almacenar los datos que están destinados para el proceso de dibujo (INDICATOR_DATA).
Si para el cálculo de los valores del indicador es necesario realizar algunas computaciones intermedias y almacenar un valor adicional para cada barra, entonces durante la vinculación este array puede ser declarado como el búfer de cálculo ( INDICATOR_CALCULATIONS). Un array ordinario también puede ser utilizado para los valores intermedios, pero en este caso el programador debe encargarse personalmente de controlar el tamaño de este array.
Algunas construcciones permiten establecer un color de visualización para cada barra. Para almacenar la información sobre el color, se utilizan los búfers de colores (INDICATOR_COLOR_INDEX). El color está representado con el tipo de números enteros color, pero todos los búfers indicadores deben tener el tipo double. No se puede obtener los valores de colores y de los búfers auxiliares (INDICATOR_CALCULATIONS) mediante la función CopyBuffer().
El número de los búfers indicadores debe ser indicado por la directiva del compilador #property indicator_buffers número_de_búfers:
#property indicator_buffers 3 // el indicador tiene 3 búfers |
El número máximo permitido de los búfers en un indicador - 512.
Correspondencia de búfers indicadores y construcciones gráficas
Cada construcción gráfica se basa en uno o más búfers indicadores. De esta manera, para visualizar las velas japonesas simples, hacen falta cuatro valores: los precios Open, High, Low y Close. En consecuencia, para visualizar un indicador en forma de velas japonesas, es necesario declarar 4 búfers indicadores y 4 arrays del tipo double para ellos. Por ejemplo:
//--- el indicador tiene cuatro búfers indicadores
|
Las construcciones gráficas utilizan automáticamente los búfers indicadores de acuerdo con el número de construcción. Los números de construcción se empiezan desde 1, los números de búfers se empiezan desde 0. Si la primera construcción requiere 4 búfers indicadores, para el trazado serán utilizados los 4 primeros búfers indicadores. Estos cuatro búfers indicadores deben estar vinculados con los arrays correspondientes con la indexación correcta mediante la función SetIndexBuffer().
//--- Vinculación de arrays con búfers indicadores
|
Durante el dibujo de velas japonesas el indicador va a utilizar precisamente los cuatro primeros búfers, porque la construcción "velas japonesas" ha sido declarada bajo el número uno.
Vamos a cambiar un poco nuestro ejemplo, vamos a añadir la construcción en forma de una línea simple - DRAW_LINE. Ahora, que la línea tenga el número 1, y las velas japonesas el número 2. El número de búfers y el número de construcciones se ha aumentado.
//--- el indicador tiene 5 búfers indicadores
|
El orden de construcciones se ha cambiado, ahora primero va la línea, luego van las velas japonesas. Por esta razón, el orden de búfers va a ser el apropiado. Es decir, primero declararemos bajo el índice cero el búfer para la línea, y luego cuatro búfers para la visualización de velas japonesas.
SetIndexBuffer(0,LineBuffer,INDICATOR_DATA); // el primer búfer corresponde al índice 0
|
El número de búfers y construcciones gráficas se puede fijar sólo a través las directivas del compilador, es imposible el cambio dinámico de estas propiedades a través de las funciones.
Versiones de color de los estilos
Como se puede divisar de la tabla, los estilos se dividen en dos grupos. Al primer grupo pertenecen los estilos en cuyos nombres no figura la palabra COLOR, vamos a llamarlos estilos básicos:
- DRAW_LINE
- DRAW_SECTION
- DRAW_HISTOGRAM
- DRAW_HISTOGRAM2
- DRAW_ARROW
- DRAW_ZIGZAG
- DRAW_FILLING
- DRAW_BARS
- DRAW_CANDLES
El segundo grupo de estilos contiene la palabra COLOR, vamos a llamarlos versiones de color:
- DRAW_COLOR_LINE
- DRAW_COLOR_SECTION
- DRAW_COLOR_HISTOGRAM
- DRAW_COLOR_HISTOGRAM2
- DRAW_COLOR_ARROW
- DRAW_COLOR_ZIGZAG
- DRAW_COLOR_BARS
- DRAW_COLOR_CANDLES
Todas las versiones de color de los estilos se diferencian de los temas básicos, lo que permite especificar un color para cada parte de la construcción. La parte mínima de la construcción es una barra, por eso se puede decir que las versiones de color permiten especificar un color para cada barra.
Para que se pueda especificar el color de la construcción en cada barra, en las versiones de color de los estilos ha sido agregado un búfer adicional especial para almacenar el índice del color. Estos índices indican el número del color en un array especial que contiene el conjunto de colores especificado de antemano. El tamaño del array de los colores 64. Esto quiere decir que cada versión de color del estilo permite colorear una construcción gráfica con 64 diferentes colores.
El conjunto y el número de colores en este array especial se puede establecer con la directiva del compilador #property indicator_color, donde Usted puede especificar todos los colores necesarios separados con coma. Por ejemplo, hacemos la siguiente entrada en el indicador:
//--- estableceremos 8 colores para colorear las velas (se guardan en un array especial)
|
Aquí está indicado que para la construcción gráfica número 1 hemos establecido 8 colores que serán colocados en el array especial. Luego en el programa no vamos a indicar el color para la construcción gráfica, sino vamos a utilizar su índice. Si queremos establecer para una barra el color rojo,para ello es necesario indicar en el búfer de colores el índice del color rojo desde el array. En la directiva el rojo va el primero, le corresponde el índice con el número 0.
//--- fijaremos el color de la vela clrRed
|
El conjunto de colores no es algo determinado de una vez y para siempre, se puede cambiarlo dinámicamente a través de la función PlotIndexSetInteger(). Ejemplo:
//--- estableceremos el color para cada índice como la propiedad PLOT_LINE_COLOR
|
Propiedades del indicador y construcciones gráficas
Para las construcciones gráficas se puede establecer las propiedades tanto mediante las directivas del compilador, como a través de las funciones correspondientes. En el apartado Relación entre las propiedades de indicador y funciones correspondientes este asunto se describe con más detalles. El cambio dinámico de las propiedades del indicador a través de las funciones permite crear los indicadores personalizados más flexibles.
Inicio del proceso de dibujo de un indicador en el gráfico
En muchas ocasiones, según las condiciones del algoritmo, resulta imposible iniciar el cálculo de los valores del indicador inmediatamente desde la barra actual, es necesario proporcionar el número mínimo de las barras previas disponibles en el historial. Por ejemplo, muchos tipos del suavizado suponen el uso del array de precios para N barras anteriores, y a base de estos valores se calcula el valor del indicador para la barra actual.
En estas ocasiones, o no hay posibilidad de calcular los valores del indicador en las primeras N barras, o estos valores no están destinados para ser visualizados en el gráfico y conllevan un papel auxiliar para el cálculo de siguientes valores. Para renunciar la visualización del indicador en las primeras N barras del historial, se debe establecer el valor N para la propiedad PLOT_DRAW_BEGIN para la construcción gráfica correspondiente:
//--- vinculación de arrays con búfers indicadores para las velas japonesas
|
Aquí:
- número_de_construcción_gráfica un valor de cero a indicator_plots-1 (la numeración de construcciones gráficas se empieza desde cero).
- N número de las primeras barras en el historial en las cuales el indicador no debe mostrarse en el gráfico.