ArraySetAsSeries
Hàm đặt cờ AS_SERIES cho một đối tượng mảng động được chọn, và các phần tử sẽ được lập chỉ mục như trong chuỗi thời gian.
cpp
bool ArraySetAsSeries(
const void& array[], // mảng bằng tham chiếu
bool flag // true biểu thị thứ tự lập chỉ mục ngược
);
1
2
3
4
2
3
4
Tham số
array[]
[in][out] Mảng số để đặt.
flag
[in] Hướng lập chỉ mục của mảng.
Giá trị trả về
Hàm trả về true nếu thành công, nếu không trả về false.
Ghi chú
Cờ AS_SERIES không thể được đặt cho mảng đa chiều hoặc mảng tĩnh (mảng có kích thước trong dấu ngoặc vuông đã được đặt trước ở giai đoạn biên dịch). Việc lập chỉ mục trong chuỗi thời gian khác với mảng thông thường ở chỗ các phần tử của chuỗi thời gian được lập chỉ mục từ cuối về đầu (từ dữ liệu mới nhất đến cũ nhất).
Ví dụ: Chỉ báo hiển thị số thứ tự thanh
cpp
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_plots 1
//---- plot Numeration
#property indicator_label1 "Numeration"
#property indicator_type1 DRAW_LINE
#property indicator_color1 CLR_NONE
//--- indicator buffers
double NumerationBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//--- indicator buffers mapping
SetIndexBuffer(0,NumerationBuffer,INDICATOR_DATA);
//--- đặt lập chỉ mục cho bộ đệm như trong chuỗi thời gian
ArraySetAsSeries(NumerationBuffer,true);
//--- đặt độ chính xác hiển thị trong DataWindow
IndicatorSetInteger(INDICATOR_DIGITS,0);
//--- cách tên của mảng chỉ báo được hiển thị trong DataWindow
PlotIndexSetString(0,PLOT_LABEL,"Bar #");
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
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[])
{
//--- chúng ta sẽ lưu thời gian mở của thanh số 0 hiện tại
static datetime currentBarTimeOpen=0;
//--- đảo ngược truy cập vào mảng time[] - thực hiện như trong chuỗi thời gian
ArraySetAsSeries(time,true);
//--- Nếu thời gian của thanh số 0 khác với thời gian đã lưu
if(currentBarTimeOpen!=time[0])
{
//--- liệt kê tất cả các thanh từ hiện tại đến độ sâu của biểu đồ
for(int i=rates_total-1;i>=0;i--) NumerationBuffer[i]=i;
currentBarTimeOpen=time[0];
}
//--- trả về giá trị của prev_calculated cho lần gọi tiếp theo
return(rates_total);
}
1
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
47
48
49
50
51
52
53
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
47
48
49
50
51
52
53