- 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
Abrir y cerrar gráficos
Un programa MQL no sólo puede analizar la lista de gráficos, sino también modificarla: abrir nuevos o cerrar los existentes. Se asignan dos funciones a estos efectos: ChartOpen y ChartClose.
long ChartOpen(const string symbol, ENUM_TIMEFRAMES timeframe)
La función abre un nuevo gráfico con el símbolo y el marco temporal especificados y devuelve el ID del nuevo gráfico. Si se produce un error durante la ejecución, el resultado es 0 y el código de error puede leerse en la variable integrada _LastError.
Si el parámetro symbol es NULL, significa el símbolo del gráfico actual (en el que se está ejecutando el programa MQL). El valor 0 del parámetro timeframe corresponde a PERIOD_CURRENT.
El número máximo posible de gráficos abiertos simultáneamente en el terminal no puede superar CHARTS_MAX (100).
Veremos un ejemplo de uso de la función ChartOpen en la próxima sección, después de estudiar las funciones para trabajar con plantillas tpl.
Tenga en cuenta que el terminal le permite crear no sólo ventanas completas con gráficos, sino también objetos gráficos. Se colocan dentro de los gráficos normales del mismo modo que otros objetos gráficos como líneas de tendencia, canales, etiquetas de precios, etc. Los objetos gráficos permiten mostrar dentro de un gráfico estándar varios fragmentos pequeños de series de precios para símbolos y marcos temporales alternativos.
bool ChartClose(long chartId = 0)
La función cierra el gráfico con el ID especificado (el valor por defecto 0 significa el gráfico actual). La función devuelve un indicador de éxito.
Como ejemplo, vamos a implementar el script ChartCloseIdle.mq5, que cerrará los gráficos duplicados con combinaciones repetidas de símbolo y marco temporal si no contienen programas MQL y objetos gráficos.
En primer lugar, tenemos que hacer una lista que cuente los gráficos de un determinado par símbolo/marco temporal. Esta tarea se implementa mediante la función ChartIdleList, que es muy similar a la que vimos en el script ChartList.mq5. La propia lista se forma en el array del mapa MapArray<string,int> chartCounts.
#include <MQL5Book/Periods.mqh>
|
Mientras tanto, la función ChartIdleList rellena el array duplicateChartIDs con identificadores de gráficos libres que coinciden con las condiciones de cierre.
int ChartIdleList(MapArray<string,int> &map, ulong &duplicateChartIDs[])
|
Una vez formada la lista para borrar, en OnStart llamamos a la función ChartClose en un bucle sobre la lista.
void OnStart()
|
Para cada gráfico, primero se llama a la función ChartSetInteger(id, CHART_BRING_TO_TOP, true) para mostrar al usuario qué ventana debe cerrarse. Dado que esta función es asíncrona (sólo pone el comando para activar la ventana en la cola de eventos), es necesario llamar adicionalmente a ChartRedraw, que procesa todos los mensajes acumulados. A continuación, se pide al usuario que confirme la acción. El gráfico sólo se cierra al hacer clic en Yes. Seleccionando No se salta el gráfico actual (lo deja abierto), y el bucle continúa. Pulsando Cancel, puede interrumpir el bucle antes de tiempo.