Obtener el número y la visibilidad de las ventanas/subventanas

Mediante la función ChartGetInteger, un programa MQL puede averiguar el número de ventanas de un gráfico (incluidas las subventanas), así como su visibilidad.

Identificador

Descripción

Tipo de valor

CHART_WINDOWS_TOTAL

Número total de ventanas del gráfico, incluidas las subventanas del indicador (r/o)

int

CHART_WINDOW_IS_VISIBLE

Visibilidad de la subventana, el parámetro 'window' es el número de subventana (r/o)

bool

Algunas subventanas pueden estar ocultas si los indicadores colocados en ellas están desactivados en el marco temporal actual en el cuadro de diálogo Propiedades, en la pestaña Visualización. Es imposible restablecer todas las banderas: debido a la naturaleza del almacenamiento de plantillas tpl, dicho estado se interpreta como la habilitación de todos los marcos temporales. Por lo tanto, si el usuario desea ocultar la subventana durante algún tiempo, es necesario dejar al menos una bandera activada en el marco temporal menos utilizado.

Configuración de la visibilidad de los indicadores en diferentes marcos temporales

Configuración de la visibilidad de los indicadores en diferentes marcos temporales

Cabe señalar que no hay herramientas estándar en MQL5 para la determinación programática del estado y la conmutación de banderas específicas. La forma más sencilla de simular dicho control es guardar la plantilla tpl y analizarla, con posible edición y carga posterior (véase la sección Trabajar con plantillas tpl).

En la nueva versión del script ChartList4.mq5, mostramos el número de subventanas (una ventana, que es la principal, está siempre presente), una señal de actividad del gráfico, una señal de un objeto gráfico y un manejador de Windows.

      const int win = (int)ChartGetInteger(idCHART_WINDOWS_TOTAL);
      const string header = StringFormat("%d %lld %s %s %s %s %s %s %lld",
         countidChartSymbol(id), PeriodToString(ChartPeriod(id)),
         (win > 1 ? "#" + (string)(win - 1) : ""), (id == me ? " *" : ""),
         (ChartGetInteger(idCHART_BRING_TO_TOP0) ? "active" : ""),
         (ChartGetInteger(idCHART_IS_OBJECT) ? "object" : ""),
         ChartGetInteger(idCHART_WINDOW_HANDLE));
      ...
      for(int i = 0i < wini++)
      {
         const bool visible = ChartGetInteger(idCHART_WINDOW_IS_VISIBLEi);
         if(!visible)
         {
            Print("  "i"/Hidden");
         }
      }

He aquí cuál podría ser el resultado:

Chart List
N, ID, Symbol, TF, #subwindows, *active, Windows handle
0 132358585987782873 EURUSD M15 #1    68030
1 132360375330772909 EURUSD H1  * active  68048
 [S] ChartList4
2 132544239145024745 XAUUSD H1     395756
3 132544239145024732 USDRUB D1     395768
4 132544239145024744 EURUSD H1 #2    461286
  2/Hidden
Total chart number: 5, with MQL-programs: 1
Experts: 0, Scripts: 1

En el primer gráfico (índice 0) hay una subventana (nº 1). Hay dos subventanas (nº 2) en el último gráfico, y la segunda está actualmente oculta. Más adelante, en la sección Gestionar indicadores en el gráfico, presentaremos la versión completa de ChartList.mq5, donde incluimos en el informe información sobre los indicadores situados en las subventanas y en la ventana principal.

¡Atención! Un gráfico dentro de un objeto gráfico siempre tiene la propiedad CHART_WINDOW_IS_VISIBLE igual a true, incluso si la visualización de objetos está desactivada en el marco temporal actual o en todos los marcos temporales.