Colores

Un programa MQL puede reconocer y cambiar los colores para mostrar todos los elementos del gráfico. Las propiedades correspondientes forman parte de la enumeración ENUM_CHART_PROPERTY_INTEGER.

Identificador

Descripción

CHART_COLOR_BACKGROUND

Color de fondo del gráfico

CHART_COLOR_FOREGROUND

Color de los ejes, escalas y líneas OHLC

CHART_COLOR_GRID

Color de la cuadrícula

CHART_COLOR_VOLUME

Color de los volúmenes y niveles de apertura de posiciones

CHART_COLOR_CHART_UP

El color de la barra ascendente, la sombra y el borde del cuerpo de una vela alcista.

CHART_COLOR_CHART_DOWN

El color de la barra descendente, la sombra y el borde del cuerpo de una vela bajista.

CHART_COLOR_CHART_LINE

El color de la línea del gráfico y de los contornos de las velas japonesas

CHART_COLOR_CANDLE_BULL

Color del cuerpo de la vela alcista

CHART_COLOR_CANDLE_BEAR

Color del cuerpo de la vela bajista

CHART_COLOR_BID

Color de la línea de precio de demanda (Bid)

CHART_COLOR_ASK

Color de la línea de precio de oferta (Ask)

CHART_COLOR_LAST

Color de la línea del último precio negociado (Last)

CHART_COLOR_STOP_LEVEL

Color de los niveles de las órdenes stop (Stop Loss y Take Profit)

Como ejemplo de trabajo con estas propiedades, vamos a crear un script, ChartColorInverse.mq5, que cambiará todos los colores del gráfico a inverso, es decir, por la representación en bits del color en el formato RGB XOR ('^',XOR). Así, tras reiniciar el script en el mismo gráfico, se restablecerá su configuración.

#define RGB_INVERSE(C) ((color)C ^ 0xFFFFFF)
   
void OnStart()
{
   ENUM_CHART_PROPERTY_INTEGER colors[] =
   {
      CHART_COLOR_BACKGROUND,
      CHART_COLOR_FOREGROUND,
      CHART_COLOR_GRID,
      CHART_COLOR_VOLUME,
      CHART_COLOR_CHART_UP,
      CHART_COLOR_CHART_DOWN,
      CHART_COLOR_CHART_LINE,
      CHART_COLOR_CANDLE_BULL,
      CHART_COLOR_CANDLE_BEAR,
      CHART_COLOR_BID,
      CHART_COLOR_ASK,
      CHART_COLOR_LAST,
      CHART_COLOR_STOP_LEVEL
   };
   
   for(int i = 0i < ArraySize(colors); ++i)
   {
      ChartSetInteger(0colors[i], RGB_INVERSE(ChartGetInteger(0colors[i])));
   }
}

En la siguiente imagen se combinan las imágenes del gráfico antes y después de aplicar el script:

Invertir los colores del gráfico desde un programa MQL

Invertir los colores del gráfico desde un programa MQL

Ahora vamos a terminar de editar IndSubChart.mq5. Tenemos que leer los colores del gráfico principal y aplicarlos a nuestro gráfico indicador. Existe una función para estos fines: SetPlotColors, cuya llamada se comentó en el manejador OnChartEvent (véase el último ejemplo de la sección Modos de visualización de gráficos).

void SetPlotColors(const int indexconst ENUM_CHART_MODE m)
{
   if(m == CHART_CANDLES)
   {
      PlotIndexSetInteger(indexPLOT_COLOR_INDEXES3);
      PlotIndexSetInteger(indexPLOT_LINE_COLOR0, (int)ChartGetInteger(0CHART_COLOR_CHART_LINE));  // rectangle
      PlotIndexSetInteger(indexPLOT_LINE_COLOR1, (int)ChartGetInteger(0CHART_COLOR_CANDLE_BULL)); // up
      PlotIndexSetInteger(indexPLOT_LINE_COLOR2, (int)ChartGetInteger(0CHART_COLOR_CANDLE_BEAR)); // down
   }
   else
   {
      PlotIndexSetInteger(indexPLOT_COLOR_INDEXES1);
      PlotIndexSetInteger(indexPLOT_LINE_COLOR, (int)ChartGetInteger(0CHART_COLOR_CHART_LINE));
   }
}

En esta nueva función, obtenemos, dependiendo del modo de dibujo del gráfico, el color de los contornos y cuerpos de las velas alcistas y bajistas, o el color de las líneas, y aplicamos los colores a los gráficos. Por supuesto, no olvide llamar a esta función durante la inicialización.

int OnInit()
{
   ...
   mode = (ENUM_CHART_MODE)ChartGetInteger(0CHART_MODE);
   InitPlot(0InitBuffers(mode), Mode2Style(mode));
   SetPlotColors(0mode);
   ...
}

El indicador está listo. Pruebe a ejecutarlo en la ventana y cambiar los colores en el cuadro de diálogo de propiedades del gráfico. El gráfico debería adaptarse automáticamente a la nueva configuración.