ArrayGetAsSeries
Nó kiểm tra hướng chỉ số của một mảng.
cpp
bool ArrayGetAsSeries(
const void& array[] // mảng để kiểm tra
);
1
2
3
2
3
Tham số
array
[in] Mảng được kiểm tra.
Giá trị trả về
Trả về true nếu mảng được chỉ định có cờ AS_SERIES được đặt, tức là truy cập vào mảng được thực hiện từ sau ra trước như trong chuỗi thời gian. Một chuỗi thời gian khác với mảng thông thường ở chỗ chỉ số của các phần tử chuỗi thời gian được thực hiện từ cuối về đầu (từ dữ liệu mới nhất đến cũ).
Ghi chú
Để kiểm tra xem một mảng có thuộc về chuỗi thời gian hay không, hãy sử dụng hàm ArrayIsSeries(). Các mảng dữ liệu giá được truyền làm tham số đầu vào trong hàm OnCalculate() không bắt buộc phải có hướng chỉ số giống như trong chuỗi thời gian. Hướng chỉ số cần thiết có thể được đặt bằng hàm ArraySetAsSeries().
Ví dụ:
cpp
#property description "Chỉ báo tính giá trị tuyệt đối của chênh lệch giữa"
#property description "giá Mở và Đóng hoặc Cao và Thấp, hiển thị chúng trong một cửa sổ phụ riêng"
#property description "dưới dạng biểu đồ cột."
//--- cài đặt chỉ báo
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots 1
//---- vẽ
#property indicator_type1 DRAW_HISTOGRAM
#property indicator_style1 STYLE_SOLID
#property indicator_width1 3
//--- tham số đầu vào
input bool InpAsSeries=true; // Hướng chỉ số trong bộ đệm chỉ báo
input bool InpPrices=true; // Giá tính toán (true - Mở,Đóng; false - Cao,Thấp)
//--- bộ đệm chỉ báo
double ExtBuffer[];
//+------------------------------------------------------------------+
//| Tính toán giá trị chỉ báo |
//+------------------------------------------------------------------+
void CandleSizeOnBuffer(const int rates_total,const int prev_calculated,
const double &first[],const double &second[],double &buffer[])
{
//--- biến bắt đầu để tính toán các thanh
int start=prev_calculated;
//--- làm việc tại thanh cuối cùng nếu giá trị chỉ báo đã được tính toán ở lần trước
if(prev_calculated>0)
start--;
//--- xác định hướng chỉ số trong các mảng
bool as_series_first=ArrayGetAsSeries(first);
bool as_series_second=ArrayGetAsSeries(second);
bool as_series_buffer=ArrayGetAsSeries(buffer);
//--- thay đổi hướng chỉ số thành trực tiếp nếu cần
if(as_series_first)
ArraySetAsSeries(first,false);
if(as_series_second)
ArraySetAsSeries(second,false);
if(as_series_buffer)
ArraySetAsSeries(buffer,false);
//--- tính toán giá trị chỉ báo
for(int i=start;i<rates_total;i++)
buffer[i]=MathAbs(first[i]-second[i]);
}
//+------------------------------------------------------------------+
//| Hàm khởi tạo chỉ báo tùy chỉnh |
//+------------------------------------------------------------------+
int OnInit()
{
//--- liên kết bộ đệm chỉ báo
SetIndexBuffer(0,ExtBuffer);
//--- đặt phần tử chỉ số trong bộ đệm chỉ báo
ArraySetAsSeries(ExtBuffer,InpAsSeries);
//--- kiểm tra giá nào được dùng để tính chỉ báo
if(InpPrices)
{
//--- giá Mở và Đóng
PlotIndexSetString(0,PLOT_LABEL,"BodySize");
//--- đặt màu chỉ báo
PlotIndexSetInteger(0,PLOT_LINE_COLOR,clrOrange);
}
else
{
//--- giá Cao và Thấp
PlotIndexSetString(0,PLOT_LABEL,"ShadowSize");
//--- đặt màu chỉ báo
PlotIndexSetInteger(0,PLOT_LINE_COLOR,clrDodgerBlue);
}
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| 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[])
{
//--- tính toán chỉ báo theo giá trị cờ
if(InpPrices)
CandleSizeOnBuffer(rates_total,prev_calculated,open,close,ExtBuffer);
else
CandleSizeOnBuffer(rates_total,prev_calculated,high,low,ExtBuffer);
//--- 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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91