- 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
Comprobación del número de barras calculadas: BarsCalculated
Cuando creamos un indicador de terceros llamando a iCustom o a otras funciones que veremos más adelante en este capítulo, se requiere algún tiempo para hacer el cálculo. Como sabemos, la principal medida de la disponibilidad de datos del indicador es el número de barras calculadas, que devuelve desde su función OnCalculate. Podemos averiguar este número dado que tenemos el manejador del indicador.
int BarsCalculated(int handle)
La función devuelve el número de barras cuyos datos se calculan en el indicador especificado por handle. En caso de error, obtenemos -1.
Mientras no se hayan calculado los datos, el resultado es 0. Posteriormente, este número debe compararse con el tamaño de la serie temporal (por ejemplo, con rates_total si el indicador que llama comprueba BarsCalculated en el contexto de su propia función OnCalculate) para analizar el procesamiento de nuevas barras por parte del indicador.
En el indicador UseWPR2.mq5, intentaremos crear IndWPR mientras cambiamos el periodo WPR en el argumento de entrada.
input int WPRPeriod = 0; |
Su valor por defecto es 0, que es un valor no válido. Se propone de forma intencionada para demostrar una situación anormal. Recordemos que en el código fuente IndWPR.mq5 hay comprobaciones en OnInit y en OnCalculate.
// IndWPR.mq5
|
Así, en el periodo cero, deberíamos recibir un mensaje de error, y BarsCalculated debería devolver siempre 0. Una vez que hemos introducido un valor positivo para el periodo, el indicador auxiliar debería empezar a calcular normalmente (y dada la facilidad de cálculo de WPR, casi inmediatamente), y BarsCalculated debería devolver el número total de barras.
Ahora vamos a presentar el código fuente para la creación de un manejador en UseWPR2.mq5.
// UseWPR2.mq5
|
En OnCalculate sólo registramos los valores BarsCalculated y rates_total.
int OnCalculate(const int rates_total,
|
Compile y ejecute UseWPR2, primero con el parámetro 0, y después con algún valor válido, por ejemplo, 21. Aquí están las entradas de registro para el período cero.
iCustom(_Symbol,_Period,IndWPR,WPRPeriod)=10 / ok
|
Inmediatamente después de la creación del manejador, los datos aún no están disponibles, por lo que se muestra el error INDICATOR_DATA_NOT_FOUND(4806), y el resultado BarsCalculated es igual a -1. A continuación aparece una notificación sobre un parámetro de entrada incorrecto que confirma la carga y el inicio correctos del indicador IndWPR. En el siguiente segmento obtenemos el valor BarsCalculated igual a 0.
Para que se calcule el indicador, introduciremos el parámetro de entrada correcto. En este caso, BarsCalculated es igual a rates_total.
iCustom(_Symbol,_Period,IndWPR,WPRPeriod)=10 / ok
|
Después de haber dominado la comprobación de la disponibilidad de un indicador esclavo, podemos empezar a leer sus datos. Hagámoslo en el siguiente ejemplo UseWPR3.mq5, donde nos familiarizaremos con la función CopyBuffer.