Kiểu vẽ
Khi tạo chỉ báo tùy chỉnh, bạn có thể chỉ định một trong 18 loại vẽ đồ họa (được hiển thị trong cửa sổ biểu đồ chính hoặc cửa sổ phụ của biểu đồ), với các giá trị được xác định trong liệt kê ENUM_DRAW_TYPE
.
Trong một chỉ báo tùy chỉnh, có thể sử dụng bất kỳ loại xây dựng/vẽ chỉ báo nào. Mỗi loại xây dựng yêu cầu chỉ định từ một đến năm mảng toàn cục để lưu trữ dữ liệu cần thiết cho việc vẽ. Các mảng dữ liệu này phải được liên kết với các bộ đệm chỉ báo bằng hàm SetIndexBuffer(). Loại dữ liệu từ ENUM_INDEXBUFFER_TYPE cần được chỉ định cho mỗi bộ đệm.
Tùy thuộc vào kiểu vẽ, bạn có thể cần từ một đến bốn bộ đệm giá trị (được đánh dấu là INDICATOR_DATA
). Nếu một kiểu cho phép thay đổi màu sắc động (tất cả các kiểu có chứa COLOR
trong tên), thì bạn sẽ cần thêm một bộ đệm màu (loại được chỉ định là INDICATOR_COLOR_INDEX
). Các bộ đệm màu luôn được liên kết sau các bộ đệm giá trị tương ứng với kiểu.
ENUM_DRAW_TYPE
ID | Mô tả | Bộ đệm dữ liệu | Bộ đệm màu |
---|---|---|---|
DRAW_NONE | Không vẽ | 1 | 0 |
DRAW_LINE | Đường | 1 | 0 |
DRAW_SECTION | Đoạn | 1 | 0 |
DRAW_HISTOGRAM | Biểu đồ từ đường số không | 1 | 0 |
DRAW_HISTOGRAM2 | Biểu đồ của hai bộ đệm chỉ báo | 2 | 0 |
DRAW_ARROW | Vẽ mũi tên | 1 | 0 |
DRAW_ZIGZAG | Kiểu Zigzag cho phép đoạn dọc trên thanh | 2 | 0 |
DRAW_FILLING | Tô màu giữa hai mức | 2 | 0 |
DRAW_BARS | Hiển thị dưới dạng chuỗi thanh | 4 | 0 |
DRAW_CANDLES | Hiển thị dưới dạng chuỗi nến | 4 | 0 |
DRAW_COLOR_LINE | Đường nhiều màu | 1 | 1 |
DRAW_COLOR_SECTION | Đoạn nhiều màu | 1 | 1 |
DRAW_COLOR_HISTOGRAM | Biểu đồ nhiều màu từ đường số không | 1 | 1 |
DRAW_COLOR_HISTOGRAM2 | Biểu đồ nhiều màu của hai bộ đệm chỉ báo | 2 | 1 |
DRAW_COLOR_ARROW | Vẽ mũi tên nhiều màu | 1 | 1 |
DRAW_COLOR_ZIGZAG | ZigZag nhiều màu | 2 | 1 |
DRAW_COLOR_BARS | Thanh nhiều màu | 4 | 1 |
DRAW_COLOR_CANDLES | Nến nhiều màu | 4 | 1 |
Để tinh chỉnh việc hiển thị của các loại vẽ đã chọn, các định danh được liệt kê trong ENUM_PLOT_PROPERTY
được sử dụng.
Đối với các hàm PlotIndexSetInteger() và PlotIndexGetInteger()
ENUM_PLOT_PROPERTY_INTEGER
ID | Mô tả | Loại thuộc tính |
---|---|---|
PLOT_ARROW | Mã mũi tên cho kiểu DRAW_ARROW | uchar |
PLOT_ARROW_SHIFT | Dịch chuyển dọc của mũi tên cho kiểu DRAW_ARROW | int |
PLOT_DRAW_BEGIN | Số lượng thanh ban đầu không vẽ và giá trị trong DataWindow | int |
PLOT_DRAW_TYPE | Loại xây dựng đồ họa | ENUM_DRAW_TYPE |
PLOT_SHOW_DATA | Dấu hiệu hiển thị giá trị xây dựng trong DataWindow | bool |
PLOT_SHIFT | Dịch chuyển vẽ chỉ báo dọc theo trục thời gian theo thanh | int |
PLOT_LINE_STYLE | Kiểu đường vẽ | ENUM_LINE_STYLE |
PLOT_LINE_WIDTH | Độ dày của đường vẽ | int |
PLOT_COLOR_INDEXES | Số lượng màu | int |
PLOT_LINE_COLOR | Chỉ số của bộ đệm chứa màu vẽ | color modifier = số thứ tự của màu |
Đối với hàm PlotIndexSetDouble()
ENUM_PLOT_PROPERTY_DOUBLE
ID | Mô tả | Loại thuộc tính |
---|---|---|
PLOT_EMPTY_VALUE | Giá trị trống cho việc vẽ, không có vẽ | double |
Đối với hàm PlotIndexSetString()
ENUM_PLOT_PROPERTY_STRING
ID | Mô tả | Loại thuộc tính |
---|---|---|
PLOT_LABEL | Tên của chuỗi đồ họa chỉ báo để hiển thị trong DataWindow. Khi làm việc với các kiểu đồ họa phức tạp yêu cầu nhiều bộ đệm chỉ báo để hiển thị, tên cho mỗi bộ đệm có thể được chỉ định bằng cách sử dụng ";" làm dấu phân cách. Mã mẫu được hiển thị trong DRAW_CANDLES | string |
5 kiểu có thể được sử dụng để vẽ đường trong các chỉ báo tùy chỉnh. Chúng chỉ hợp lệ với độ dày đường 0 hoặc 1.
ENUM_LINE_STYLE
ID | Mô tả |
---|---|
STYLE_SOLID | Đường liền |
STYLE_DASH | Đường đứt |
STYLE_DOT | Đường chấm |
STYLE_DASHDOT | Đường chấm-gạch |
STYLE_DASHDOTDOT | Gạch - hai chấm |
Để thiết lập kiểu vẽ đường và loại vẽ, hàm PlotIndexSetInteger() được sử dụng. Đối với các phần mở rộng Fibonacci, độ dày và kiểu vẽ của các mức có thể được chỉ định bằng hàm ObjectSetInteger().
Ví dụ:
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_plots 1
//--- indicator buffers
double MABuffer[];
//+------------------------------------------------------------------+
//| Hàm khởi tạo chỉ báo tùy chỉnh |
//+------------------------------------------------------------------+
void OnInit()
{
//--- Liên kết mảng với bộ đệm chỉ báo có chỉ số 0
`SetIndexBuffer`(0,MABuffer,`INDICATOR_DATA`);
//--- Thiết lập vẽ đường
`PlotIndexSetInteger`(0,`PLOT_DRAW_TYPE`,`DRAW_LINE`);
//--- Thiết lập kiểu đường
`PlotIndexSetInteger`(0,`PLOT_LINE_STYLE`,`STYLE_DOT`);
//--- Thiết lập màu đường
`PlotIndexSetInteger`(0,`PLOT_LINE_COLOR`,`clrRed`);
//--- Thiết lập độ dày đường
`PlotIndexSetInteger`(0,`PLOT_LINE_WIDTH`,1);
//--- Thiết lập nhãn cho đường
`PlotIndexSetString`(0,`PLOT_LABEL`,"Moving Average");
//---
}
//+------------------------------------------------------------------+
//| Hàm lặp chỉ báo tùy chỉnh |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
//---
for(int i=prev_calculated;i<rates_total;i++)
{
MABuffer[i]=close[i];
}
//--- trả về giá trị của prev_calculated cho lần gọi tiếp theo
return(rates_total);
}
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46