- Funciones para obtener las propiedades básicas del gráfico actual
- Identificación de gráficos
- Obtener la lista de gráficos
- Obtener el símbolo y el marco temporal de un gráfico arbitrario
- Visión general de funciones para trabajar con el conjunto completo de propiedades
- Propiedades descriptivas de los gráficos
- Comprobar el estado de la ventana principal
- Obtener el número y la visibilidad de las ventanas/subventanas
- Modos de visualización de gráficos
- Gestionar la visibilidad de los elementos del gráfico
- Desplazamientos horizontales
- Escala horizontal (por tiempo)
- Escala vertical (por precio y lecturas del indicador)
- Colores
- Control del ratón y del teclado
- Desacoplar la ventana del gráfico
- Obtener las coordenadas de caída del programa MQL en un gráfico
- Conversión de coordenadas de pantalla a tiempo/precio y viceversa
- Desplazamiento de gráficos por el eje temporal
- Solicitud para volver a dibujar el gráfico
- Cambiar símbolo y marco temporal
- Gestionar indicadores en el gráfico
- Abrir y cerrar gráficos
- Trabajar con plantillas de gráficos tpl
- Guardar la imagen de un gráfico
Visión general de funciones para trabajar con el conjunto completo de propiedades de gráfico
Las propiedades de los gráficos son legibles y editables a través de los grupos de funciones ChartSet- y ChartGet-, cada uno de los cuales contiene propiedades de un tipo determinado: números reales (double), números enteros (long, int, datetime, color, bool, enums) y cadenas.
Todas las funciones reciben el ID del gráfico como primer parámetro. El valor 0 significa el gráfico actual, es decir, equivale a pasar el resultado de la llamada ChartID(). Sin embargo, esto no significa que el ID del gráfico actual sea 0.
Las constantes que describen todas las propiedades forman tres enumeraciones ENUM_CHART_PROPERTY_INTEGER, ENUM_CHART_PROPERTY_DOUBLE, ENUM_CHART_PROPERTY_STRING, que se utilizan como parámetros de función para el tipo correspondiente. Puede encontrar una tabla resumen de todas las propiedades en la documentación de MQL5, en la página sobre propiedades de gráficos . En las siguientes secciones de este capítulo iremos abordado poco a poco prácticamente todas las propiedades, agrupándolas según su finalidad. La única excepción son las propiedades de gestión de eventos en el gráfico, que describiremos en la sección correspondiente del capítulo sobre eventos.
A los elementos de las tres enumeraciones se les asignan valores tales que forman una única lista sin intersecciones (repeticiones). Esto permite determinar el tipo de enumeración mediante un valor específico. Por ejemplo, dada una constante, podemos intentar convertirla de forma sistemática en una cadena con el nombre de uno de los enums hasta que lo consigamos.
int value = ...;
|
Más adelante utilizaremos este enfoque en los scripts de prueba.
Algunas propiedades (por ejemplo, el número de barras visibles) son de sólo lectura y no pueden modificarse. Además, se marcarán con «r/o» (sólo lectura).
Las funciones de lectura de propiedades tienen una forma corta y una forma larga: la forma corta devuelve directamente el valor solicitado, y la forma larga devuelve un atributo booleano de éxito (true) o error (false), mientras que el valor en sí se coloca en el último parámetro pasado por referencia. Cuando se utiliza la forma corta es especialmente importante comprobar el código de error en la variable _LastError, ya que el valor 0 (NULL) devuelto en caso de problemas puede ser generalmente correcto.
Al acceder a algunas propiedades debe especificar un parámetro adicional window, que se utiliza para indicar la ventana/subventana del gráfico. 0 significa la ventana principal. Las subventanas se numeran empezando por 1. Algunas propiedades se aplican al gráfico en su conjunto, por lo que tienen variantes de función sin el parámetro window.
A continuación se muestran los prototipos de funciones para leer y escribir propiedades de enteros. Tenga en cuenta que el tipo de valores que contienen es long.
bool ChartSetInteger(long chartId, ENUM_CHART_PROPERTY_INTEGER property, long value)
bool ChartSetInteger(long chartId, ENUM_CHART_PROPERTY_INTEGER property, int window, long value)
long ChartGetInteger(long chartId, ENUM_CHART_PROPERTY_INTEGER property, int window = 0)
bool ChartGetInteger(long chartId, ENUM_CHART_PROPERTY_INTEGER property, int window, long &value)
Las funciones para propiedades reales se describen de forma similar. No hay propiedades reales escribibles para las subventanas, por lo que sólo hay una forma de ChartSetDouble, que es sin el parámetro window.
bool ChartSetDouble(long chartId, ENUM_CHART_PROPERTY_DOUBLE property, double value)
double ChartGetDouble(long chartId, ENUM_CHART_PROPERTY_DOUBLE property, int window = 0)
bool ChartGetDouble(long chartId, ENUM_CHART_PROPERTY_DOUBLE property, int window, double &value)
Lo mismo se aplica a las propiedades de las cadenas, pero hay que tener en cuenta un matiz más: la longitud de la cadena no puede superar los 2045 caracteres (se cortarán los caracteres sobrantes).
bool ChartSetString(long chartId, ENUM_CHART_PROPERTY_STRING property, string value)
string ChartGetString(long chartId, ENUM_CHART_PROPERTY_STRING property)
bool ChartGetString(long chartId, ENUM_CHART_PROPERTY_STRING property, string &value)
Cuando se leen propiedades utilizando la forma abreviada de ChartGetInteger/ChartGetDouble, el parámetro window es opcional y por defecto se toma la ventana principal (window=0).
Las funciones para ajustar las propiedades del gráfico (ChartSetInteger, ChartSetDouble, ChartSetString) son asíncronas y sirven para enviar comandos de cambio al gráfico. Si estas funciones se ejecutan con éxito, el comando se añade a la cola común de eventos del gráfico y se devuelve true. Cuando se produce un error, la función devuelve false. En este caso, debe comprobar el código de error en la variable _LastError.
Las propiedades del gráfico se modifican más tarde, durante el procesamiento de la cola de eventos de este gráfico y, por regla general, con cierto retardo, por lo que no debe esperar una actualización inmediata del gráfico tras aplicar nuevos ajustes. Para forzar la actualización del aspecto y las propiedades del gráfico, utilice la función ChartRedraw. Si desea modificar varias propiedades del gráfico a la vez, deberá llamar a las funciones correspondientes en un bloque de código y, a continuación, una vez en ChartRedraw.
En general, el terminal actualiza automáticamente el gráfico en respuesta a eventos tales como la llegada de una nueva cotización, cambios en el tamaño de la ventana del gráfico, escalado, desplazamiento, adición de un indicador, etc.
Las funciones para obtener las propiedades de los gráficos (ChartGetInteger, ChartGetDouble, ChartGetString) son síncronas, es decir, el código de llamada espera el resultado de su ejecución.