Цвета

MQL-программа может узнать и изменить цвета для отображения всех элементов графика. Соответствующие свойства входят в состав перечисления ENUM_CHART_PROPERTY_INTEGER.

Идентификатор

Описание

CHART_COLOR_BACKGROUND

Цвет фона графика

CHART_COLOR_FOREGROUND

Цвет осей, шкалы и строки OHLC

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

Цвет линии Bid-цены

CHART_COLOR_ASK

Цвет линии Ask-цены

CHART_COLOR_LAST

Цвет линии цены последней совершенной сделки (Last)

CHART_COLOR_STOP_LEVEL

Цвет уровней стоп-ордеров (Stop Loss и Take Profit)

В качестве примера работы с данными свойствами создадим скрипт ChartColorInverse.mq5, который будет менять все цвета графика на инверсивные, то есть для битового представления цвета в формате RGB будет выполняться операция XOR ('^', исключающее ИЛИ). Таким образом, после повторного запуска скрипта на том же графике его настройки будут восстановлены.

#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])));
   }
}

На следующем изображении совмещены образы графика до и после применения скрипта.

Инверсия цветов графика из MQL-программы

Инверсия цветов графика из MQL-программы

Теперь закончим доработку IndSubChart.mq5. Нам осталось прочитать цвета основного графика и применить их к диаграмме нашего индикатора. Для этих целей уже была запланирована функция SetPlotColors, вызов которой был закомментирован в обработчике OnChartEvent (см. последний пример в разделе Режимы отображения графика).

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));
   }
}

В этой новой функции мы получаем, в зависимости от режима отрисовки графика, либо цвета контуров и тел бычьих и медвежьих свечей, либо цвет линий, и применяем цвета к диаграммам. Разумеется, не забудем вызвать эту функцию при инициализации.

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

Индикатор готов. Попробуйте набросить его в окно и поменять цвета в диалоге свойств графика — диаграмма должна автоматически адаптироваться по новые настройки.