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
