颜色

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

买价线颜色

CHART_COLOR_ASK

卖价线颜色

CHART_COLOR_LAST

最后交易价格线(Last)的颜色

CHART_COLOR_STOP_LEVEL

止损和止盈订单水平的颜色(止损位和止盈位颜色)

作为使用这些特性的示例,我们将创建一个脚本–ChartColorInverse.mq5。它会将图形的所有颜色转换为反色,即对颜色的二进制表示采用以下格式进行处理: RGB XOR ('^',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);
   ...
}

指标已就绪。尝试在窗口中运行它,并在图表特性对话框中更改颜色。图表会根据新设置自动调整。