- Tipos de objetos y características de la especificación de sus coordenadas
- Objetos vinculados a tiempo y precio
- Objetos vinculados a coordenadas de pantalla
- Crear objetos
- Borrar objetos
- Encontrar objetos
- Visión general de las funciones de acceso a las propiedades de los objetos
- Propiedades principales de los objetos
- Coordenadas de tiempo y precio
- Anclar la esquina de la ventana y las coordenadas de la pantalla
- Definir el punto de anclaje en el objeto
- Gestión del estado de los objetos
- Prioridad de los objetos (orden Z)
- Ajustes de visualización de objetos: color, estilo y marco
- Ajustes de fuente
- Rotar un texto en un ángulo arbitrario
- Determinar ancho y alto del objeto
- Visibilidad de los objetos en el contexto de marcos temporales
- Asignar un código de carácter a una etiqueta
- Propiedades de los rayos para objetos con líneas rectas
- Gestionar el estado pulsado de los objetos
- Ajustar imágenes en objetos bitmap
- Recortar (dar salida a parte) de una imagen
- Propiedades de los campos de entrada: alineación y sólo lectura
- Anchura del canal de desviación estándar
- Establecer niveles en objetos de nivel
- Propiedades adicionales de los objetos de Gann, Fibonacci y Elliot
- Objeto gráfico
- Mover objetos
- Obtener hora o precio en puntos de línea especificados
Obtener hora o precio en puntos de línea especificados
Muchos objetos gráficos incluyen una o varias líneas rectas. MQL5 permite interpolar y extrapolar puntos en estas líneas y obtener otra coordenada a partir de una coordenada; por ejemplo, precio por tiempo o tiempo por precio.
La interpolación está siempre disponible: funciona «dentro» del objeto, es decir, entre puntos de anclaje. La extrapolación fuera de un objeto sólo es posible si la propiedad de rayo en la dirección correspondiente está activada para él (véase Propiedades de los rayos para objetos con líneas rectas).
La función ObjectGetValueByTime devuelve el valor del precio para el tiempo especificado. La función ObjectGetTimeByValue devuelve el valor temporal del precio especificado
double ObjectGetValueByTime(long chartId, const string name, datetime time, int line)
datetime ObjectGetTimeByValue(long chartId, const string name, double value, int line)
Los cálculos se realizan para un objeto denominado name en el gráfico con chartId. Los parámetros time y value especifican una coordenada conocida para la que debe calcularse la incógnita. Dado que un objeto puede tener varias líneas, varios valores corresponderán a una coordenada, por lo que es necesario especificar el número de línea en el parámetro line.
La función devuelve el precio o valor temporal para la proyección del punto con la coordenada inicial especificada respecto a la línea.
En caso de error, se devolverá 0 y el código de error se escribirá en _LastError. Por ejemplo, intentar extrapolar un valor de línea con la propiedad de haz desactivada genera un error OBJECT_GETVALUE_FAILED (4205).
Las funciones son aplicables a los siguientes objetos:
- Línea de tendencia (OBJ_TREND)
- Línea de tendencia por ángulo (OBJ_TRENDBYANGLE)
- Línea de Gann (OBJ_GANNLINE)
- Canal equidistante (OBJ_CHANNEL), 2 líneas
- Canal de regresión lineal (OBJ_REGRESSION); 3 líneas
- Canal de desviación estándar (OBJ_STDDEVCHANNEL); 3 líneas
- Línea de flecha (OBJ_ARROWED_LINE)
Comprobemos el funcionamiento de la función utilizando un indicador sin búfer ObjectChannels.mq5. Crea dos objetos con canales de desviación estándar y regresión lineal, tras lo cual solicita y muestra en el comentario el precio de las líneas superior e inferior en barras futuras. Para el canal de desviación estándar, la propiedad OBJPROP_RAY_RIGHT está activada, pero para el canal de regresión no lo está (intencionadamente). En este sentido, no se recibirán valores del segundo canal y siempre se mostrarán ceros en la pantalla para él.
A medida que se formen nuevas barras, los canales se desplazarán automáticamente hacia la derecha. La longitud de los canales se ajusta en el parámetro de entrada WorkPeriod (10 barras por defecto).
input int WorkPeriod = 10;
|
La función CreateObjects crea 2 canales y realiza los ajustes iniciales para ellos.
void CreateObjects()
|
La función UpdateObjects desplaza los canales a las últimas barras de WorkPeriod.
void UpdateObjects()
|
En el manejador OnCalculate, actualizamos la posición de los canales en las nuevas barras, y en cada tick, llamamos a DisplayObjectData para obtener la extrapolación del precio y mostrarla como un comentario.
int OnCalculate(const int rates_total,
|
En la función DisplayObjectData encontraremos los precios en los puntos de anclaje de la línea media (OBJPROP_PRICE). Además, utilizando ObjectGetValueByTime, solicitaremos valores de precios para las líneas superior e inferior del canal a través de las barras WorkPeriod en el futuro.
void DisplayObjectData()
|
Es importante observar que, debido a que la propiedad de rayo no está habilitada para el canal de regresión, siempre da ceros en el futuro (aunque si preguntáramos por precios dentro del periodo de tiempo del canal, obtendríamos los valores correctos).
Canales y valores de precios en los puntos de sus líneas
Aquí, para los canales que tienen 10 barras, la extrapolación se hace también sobre 10 barras por delante, lo que da los valores futuros que se muestran en la línea con «dev:», que corresponde aproximadamente al borde derecho de la ventana.