- 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
Crear objetos
Para crear un objeto, se requiere un conjunto mínimo de atributos comunes a todos los tipos. Las propiedades adicionales específicas de cada tipo pueden establecerse o modificarse posteriormente en un objeto ya existente. Los atributos necesarios incluyen el identificador del gráfico en el que debe crearse el objeto, el nombre del objeto, el número de la ventana/subventana y dos coordenadas para el primer punto de anclaje: tiempo y precio.
Aunque haya un grupo de objetos posicionados en coordenadas de pantalla, para crearlos sigue siendo necesario pasar dos valores, normalmente cero porque no se utilizan.
En general, un prototipo de la función ObjectCreate tiene el siguiente aspecto:
bool ObjectCreate(long chartId, const string name, ENUM_OBJECT type, int window,
datetime time1, double price1, datetime time2 = 0, double price2 = 0, ...)
Un valor de 0 para chartId implica el gráfico actual. El parámetro name debe ser único en todo el gráfico, incluidas las subventanas, y no debe superar los 63 caracteres.
En las secciones anteriores hemos dado tipos de objeto para el parámetro type: son los elementos de la enumeración ENUM_OBJECT.
Como sabemos, la numeración de ventanas/subventanas para el parámetro window empieza en 0, que significa la ventana principal del gráfico. Si se especifica un índice mayor para una subventana, debe existir, ya que, de lo contrario, la función terminará con un error y devolverá false.
Sólo para recordárselo, la bandera de éxito devuelta (true) sólo indica que el comando para crear el objeto se ha colocado con éxito en la cola. El resultado de su ejecución no se conoce de inmediato. Es la otra cara de la llamada asíncrona, que se emplea para mejorar el rendimiento.
Para comprobar el resultado de la ejecución, puede utilizar la función ObjectFind o cualquiera de las funciones ObjectGet, que consultan las propiedades de un objeto. Pero debe tener en cuenta que tales funciones esperan la ejecución de toda la cola de comandos del gráfico y sólo entonces devuelven el resultado real (el estado del objeto). Este proceso puede llevar algún tiempo, durante el cual se suspenderá el código del programa MQL. En otras palabras: las funciones de comprobación del estado de los objetos son síncronas, a diferencia de las funciones de creación y modificación de objetos.
Los puntos de anclaje adicionales, a partir del segundo, son opcionales. El número permitido de puntos de anclaje, hasta 30, se proporciona para uso futuro, y no se utilizan más de 5 en los tipos de objeto actuales.
Es importante tener en cuenta que la llamada a la función ObjectCreate con el nombre de un objeto ya existente simplemente cambia el punto o puntos de anclaje (si las coordenadas se han modificado desde la llamada anterior). Esto es conveniente para escribir código unificado sin bifurcarse en condiciones basadas en la presencia o ausencia de un objeto. En otras palabras: una llamada incondicional a ObjectCreate garantiza la existencia del objeto, si no nos importa si existía antes o no. Sin embargo, hay un matiz: si, al llamar a ObjectCreate, el tipo de objeto o el índice de la subventana es diferente de un objeto ya existente, los datos relevantes siguen siendo los mismos y no se produce ningún error.
Al llamar a ObjectCreate se pueden dejar todos los puntos de anclaje con valores por defecto (null), siempre que después de esta instrucción se llame a funciones ObjectSet con las propiedades OBJPROP_TIME y OBJPROP_PRICE adecuadas.
El orden en que se especifican los puntos de anclaje puede ser importante para algunos tipos de objetos. Para canales como OBJ_REGRESSION (Canal de regresión lineal) y OBJ_STDDEVCHANNEL (Canal de desviación estándar), es obligatorio que se cumplan las condiciones time1<time2. De lo contrario, el canal no se construirá normalmente, aunque el objeto se creará sin errores.
Como ejemplo de la función, tomemos el script ObjectSimpleShowcase.mq5, que crea varios objetos de diferentes tipos en las últimas barras del gráfico, necesitando un único punto de anclaje.
Todos los ejemplos de trabajo con objetos utilizarán el archivo de encabezado ObjectPrefix.mqh, que contiene una definición de cadena con un prefijo común para los nombres de objetos. Así, nos resultará más cómodo, en caso necesario, limpiar los gráficos de objetos «propios».
const string ObjNamePrefix = "ObjShow-"; |
En la función OnStart se define un array que contiene tipos de objetos.
void OnStart()
|
A continuación, en el bucle a través de sus elementos, creamos objetos en la ventana principal, pasando la hora y el precio de cierre de la barra i-ésima.
const int n = ArraySize(types);
|
Este es el posible resultado de ejecutar el script:
Objetos de tipos simples en los puntos de cierre de las últimas barras
El trazado de líneas mediante el precio Close y la visualización de la cuadrícula están activados en este ejemplo. Más adelante aprenderemos a ajustar el tamaño, el color y otros atributos de los objetos. En concreto, los puntos de anclaje de la mayoría de los iconos están situados por defecto en el centro de la parte superior, por lo que quedan visualmente desplazados bajo la línea. No obstante, el icono de venta está por encima de la línea porque el punto de anclaje siempre está en el centro de la parte inferior.
Tenga en cuenta que los objetos creados mediante programación no se muestran por defecto en la lista de objetos del cuadro de diálogo del mismo nombre. Para verlos ahí, haga clic en el botón All.