- Manejadores y contadores de propietarios de indicadores
- Una forma sencilla de crear instancias de indicadores: iCustom
- Comprobación del número de barras calculadas: BarsCalculated
- Obtención de datos de series temporales a partir de un indicador: CopyBuffer
- Soporte para múltiples símbolos y marcos temporales
- Visión general de los indicadores integrados
- Utilización de los indicadores integrados
- Forma avanzada de crear indicadores: IndicatorCreate
- Creación flexible de indicadores con IndicatorCreate
- Visión general de las funciones de gestión de indicadores en el gráfico
- Combinar salida a ventanas principal y auxiliar
- Leer datos de gráficos que tienen un desplazamiento
- Borrar instancias de indicadores: IndicatorRelease
- Obtener la configuración del indicador por su manejador
- Definir la fuente de datos de un indicador
Leer datos de gráficos que tienen un desplazamiento
Nuestro nuevo indicador UseDemoAll está casi listo; sólo tenemos que considerar una cuestión más.
En el indicador subordinado, algunos gráficos pueden tener un desfase establecido por la propiedad PLOT_SHIFT. Por ejemplo, con un desplazamiento positivo, los elementos de la serie temporal se desplazan hacia el futuro y se muestran a la derecha de la barra con índice 0. Sus índices, curiosamente, son negativos. A medida que se desplaza hacia la derecha, los números disminuyen cada vez más: -1, -2, -3, etc. Esto también afecta a la función CopyBuffer. Cuando utilizamos la primera forma de CopyBuffer, el parámetro offset puesto a 0 se refiere al elemento con el tiempo actual en la serie temporal. Pero si la propia serie temporal se desplaza hacia la derecha, obtendremos datos a partir del elemento numerado N, donde N es el valor de desplazamiento en el indicador de origen. Al mismo tiempo, los elementos situados en nuestro búfer a la derecha del índice N no se llenarán de datos, y la «basura» permanecerá en ellos.
Para demostrar el problema, empecemos con un indicador sin desplazamiento: Awesome Oscillator se ajusta perfectamente a este requisito. Recordemos que UseDemoAll copia todos los valores en sus arrays, y aunque no son visibles en el gráfico debido a las diferentes escalas de precios y lecturas de los indicadores, podemos comprobarlo en Data Window. Dondequiera que movamos el cursor del ratón en el gráfico, los valores de los indicadores en la subventana de Data Window y en los búferes de UseDemoAll coincidirán. Por ejemplo, en la imagen siguiente, puede ver claramente que en la barra horaria de las 16:00, ambos valores son iguales a 0.001797.
Datos del indicador AO en los búferes UseDemoAll
Ahora, en los ajustes de UseDemoAll, seleccionamos el indicador iGator (Gator Oscillator). Para simplificar, borre el campo con los parámetros Gator, de manera que se construya con sus parámetros por defecto. En este caso, el desplazamiento del histograma es de 5 barras (hacia delante), lo que se ve claramente en el gráfico.
Datos del indicador Gator en los búferes UseDemoAll sin corrección para el desplazamiento futuro
La línea vertical negra marca la barra horaria de las 16:00. Sin embargo, los valores del indicador Gator en Data Window y en nuestros arrays leídos del mismo indicador son diferentes. El color amarillo UseDemoAll resalta los búferes que contienen basura.
Si examinamos los datos desplazándonos 5 barras hacia el pasado, a las 11:00 (línea vertical naranja), encontraremos allí los valores que Gator emite a las 16:00. Los valores correctos por pares de los histogramas superior e inferior se resaltan en verde y rosa, respectivamente.
Para resolver este problema, tenemos que añadir a UseDemoAll una variable de entrada para que el usuario especifique un desplazamiento del gráfico, y luego hacer una corrección para ello al llamar a CopyBuffer.
input int IndicatorShift = 0; // Plot Shift
|
Por desgracia, es imposible encontrar la propiedad PLOT_SHIFT para un indicador de terceros de MQL5.
Comprobemos cómo la introducción de un desplazamiento de 5 arregla la situación con el indicador Gator (con la configuración por defecto).
Datos del indicador Gator en los búferes UseDemoAll tras ajustar el desplazamiento futuro
Ahora las lecturas de UseDemoAll en la barra de las 16:00 corresponden a los datos reales de Gator del futuro virtual 5 barras por delante (línea vertical lila a las 21:00).
Quizá se pregunte por qué en la ventana Gator sólo aparecen 2 búferes mientras que en la nuestra hay 4. La cuestión es que el histograma de color de Gator utiliza un búfer adicional para la codificación del color, pero sólo hay dos colores, rojo y verde, y los vemos en nuestros arrays como 0 o 1.