- 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
Encontrar objetos
Existen tres funciones para buscar objetos en el gráfico. Los dos primeros, ObjectsTotal y ObjectName, permiten ordenar los objetos por su nombre y, a continuación, si es necesario, utilizar el nombre de cada objeto para analizar sus otras propiedades (describiremos cómo se hace en la siguiente sección). La tercera función, ObjectFind, permite comprobar la existencia de un objeto con un nombre conocido. Lo mismo podría hacerse simplemente solicitando alguna propiedad a través de la función ObjectGet: si no hay ningún objeto con el nombre pasado, obtendremos un error en _LastError, pero esto es menos conveniente que llamar a ObjectFind. Además, la función devuelve inmediatamente el número de la ventana en la que se encuentra el objeto.
int ObjectsTotal(long chartId, int window = -1, int type = -1)
La función devuelve el número de objetos del gráfico con el identificador chartId (0 significa gráfico actual). En el cálculo sólo se tienen en cuenta los objetos de la subventana con el número window especificado (0 representa la ventana principal, -1 representa la ventana principal y todas las subventanas). Observe que sólo se tienen en cuenta los objetos del tipo específico especificado en el parámetro type (-1 indica todos los tipos por defecto). El valor de type puede ser un elemento de la enumeración ENUM_OBJECT.
La función se ejecuta de forma sincrónica, es decir, bloquea la ejecución del programa MQL que llama hasta que se recibe el resultado.
string ObjectName(long chartId, int index, int window = -1, int type = -1)
La función devuelve el nombre del objeto bajo el número index en el gráfico con el identificador chartId. Al compilar la lista interna, dentro de la cual se busca el objeto, se tienen en cuenta el número de subventana (window) y el tipo de objeto (type) especificados. La lista se ordena por nombres de objetos en orden lexicográfico, es decir, en concreto, alfabéticamente, distinguiendo mayúsculas de minúsculas.
Al igual que ObjectsTotal, durante su ejecución, ObjectName espera a que se recupere toda la cola de comandos de gráficos y, a continuación, devuelve el nombre del objeto de la lista actualizada de objetos.
En caso de error, se obtendrá una cadena vacía y el código de error OBJECT_NOT_FOUND (4202) se almacenará en _LastError.
Para probar la funcionalidad de estas dos funciones, vamos a crear un script llamado ObjectFinder.mq5 que registra todos los objetos en todos los gráficos. Utiliza las funciones de iteración del gráfico (ChartFirst y ChartNext), así como funciones para obtener propiedades del gráfico (ChartSymbol, ChartPeriod y ChartGetInteger).
#include <MQL5Book/Periods.mqh>
|
Para cada gráfico, determinamos el número de subventanas (ChartGetInteger(id, CHART_WINDOWS_TOTAL)), llamamos a ObjectsTotal para cada subventana, y llamamos a ObjectName en el bucle interno. A continuación, buscamos por nombre el tipo de objeto y los mostramos juntos en el registro.
A continuación se muestra una versión del posible resultado del script (con abreviaturas).
EURUSD H1 (132358585987782873)
|
Aquí, en particular, puede ver que en el gráfico XAUUSD, D1 hay objetos generados por el script ObjectSimpleShowcase.mq5. No hay objetos en algunos gráficos y en algunas subventanas.
int ObjectFind(long chartId, const string name)
La función busca un objeto por su nombre en el gráfico especificado por el identificador y, si tiene éxito, devuelve el número de la ventana donde se ha encontrado.
Si no se encuentra el objeto, la función devuelve un número negativo. Al igual que las funciones anteriores de esta sección, la función ObjectFind utiliza una llamada sincrónica.
Veremos un ejemplo de uso de esta función en el script ObjectCopy.mq5 en la siguiente sección.