Màu sắc
Một chương trình MQL có thể nhận diện và thay đổi màu sắc để hiển thị tất cả các thành phần biểu đồ. Các thuộc tính tương ứng là một phần của liệt kê ENUM_CHART_PROPERTY_INTEGER
.
Định danh | Mô tả |
---|---|
CHART_COLOR_BACKGROUND | Màu nền biểu đồ |
CHART_COLOR_FOREGROUND | Màu của các trục, thang và đường OHLC |
CHART_COLOR_GRID | Màu lưới |
CHART_COLOR_VOLUME | Màu của khối lượng và mức mở vị thế |
CHART_COLOR_CHART_UP | Màu của thanh tăng, bóng và viền thân của nến tăng |
CHART_COLOR_CHART_DOWN | Màu của thanh giảm, bóng và viền thân của nến giảm |
CHART_COLOR_CHART_LINE | Màu của đường biểu đồ và đường viền của nến Nhật Bản |
CHART_COLOR_CANDLE_BULL | Màu thân nến tăng |
CHART_COLOR_CANDLE_BEAR | Màu thân nến giảm |
CHART_COLOR_BID | Màu đường giá Bid |
CHART_COLOR_ASK | Màu đường giá Ask |
CHART_COLOR_LAST | Màu đường giá giao dịch cuối cùng (Last) |
CHART_COLOR_STOP_LEVEL | Màu của các mức lệnh dừng (Stop Loss và Take Profit) |
Ví dụ về cách làm việc với các thuộc tính này, hãy tạo một script — ChartColorInverse.mq5
. Nó sẽ thay đổi tất cả màu sắc của biểu đồ thành màu đảo ngược, tức là đối với biểu diễn bit của màu trong định dạng RGB XOR ('^', XOR). Do đó, sau khi khởi động lại script trên cùng một biểu đồ, các cài đặt của nó sẽ được khôi phục.
#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 = 0; i < ArraySize(colors); ++i)
{
ChartSetInteger(0, colors[i], RGB_INVERSE(ChartGetInteger(0, colors[i])));
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Hình ảnh sau kết hợp hình ảnh của biểu đồ trước và sau khi áp dụng script.
Đảo ngược màu sắc biểu đồ từ chương trình MQL
Bây giờ hãy hoàn thiện việc chỉnh sửa IndSubChart.mq5
. Chúng ta cần đọc màu sắc của biểu đồ chính và áp dụng chúng cho biểu đồ chỉ báo của chúng ta. Có một hàm cho mục đích này: SetPlotColors
, mà lời gọi của nó đã bị comment trong trình xử lý OnChartEvent
(xem ví dụ cuối cùng trong phần Chế độ hiển thị biểu đồ).
void SetPlotColors(const int index, const ENUM_CHART_MODE m)
{
if(m == CHART_CANDLES)
{
PlotIndexSetInteger(index, PLOT_COLOR_INDEXES, 3);
PlotIndexSetInteger(index, PLOT_LINE_COLOR, 0, (int)ChartGetInteger(0, CHART_COLOR_CHART_LINE)); // rectangle
PlotIndexSetInteger(index, PLOT_LINE_COLOR, 1, (int)ChartGetInteger(0, CHART_COLOR_CANDLE_BULL)); // up
PlotIndexSetInteger(index, PLOT_LINE_COLOR, 2, (int)ChartGetInteger(0, CHART_COLOR_CANDLE_BEAR)); // down
}
else
{
PlotIndexSetInteger(index, PLOT_COLOR_INDEXES, 1);
PlotIndexSetInteger(index, PLOT_LINE_COLOR, (int)ChartGetInteger(0, CHART_COLOR_CHART_LINE));
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Trong hàm mới này, chúng ta lấy, tùy thuộc vào chế độ vẽ biểu đồ, hoặc là màu của viền và thân của nến tăng và giảm, hoặc là màu của các đường, và áp dụng các màu này cho các biểu đồ. Tất nhiên, đừng quên gọi hàm này trong quá trình khởi tạo.
int OnInit()
{
...
mode = (ENUM_CHART_MODE)ChartGetInteger(0, CHART_MODE);
InitPlot(0, InitBuffers(mode), Mode2Style(mode));
SetPlotColors(0, mode);
...
}
2
3
4
5
6
7
8
Chỉ báo đã sẵn sàng. Hãy thử chạy nó trong cửa sổ và thay đổi màu sắc trong hộp thoại thuộc tính biểu đồ. Biểu đồ sẽ tự động thích nghi với các cài đặt mới.