ArrayIsDynamic
Hàm này kiểm tra xem một mảng có phải là mảng động hay không.
cpp
bool ArrayIsDynamic(
const void& array[] // mảng được 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ọn là mảng động, ngược lại trả về false.
Ví dụ:
cpp
#property description "Chỉ báo này không tính toán giá trị. Nó thực hiện một lần duy nhất để"
#property description "áp dụng lệnh gọi hàm ArrayFree() cho ba mảng: mảng động, mảng tĩnh và"
#property description "bộ đệm chỉ báo. Kết quả được hiển thị trong nhật ký Experts."
//--- cài đặt chỉ báo
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_plots 1
//--- biến toàn cục
double ExtDynamic[]; // mảng động
double ExtStatic[100]; // mảng tĩnh
bool ExtFlag=true; // cờ
double ExtBuff[]; // bộ đệm chỉ báo
//+------------------------------------------------------------------+
//| Hàm khởi tạo chỉ báo tùy chỉnh |
//+------------------------------------------------------------------+
int OnInit()
{
//--- cấp phát bộ nhớ cho mảng
ArrayResize(ExtDynamic,100);
//--- ánh xạ bộ đệm chỉ báo
SetIndexBuffer(0,ExtBuff);
PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0);
//---
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 int begin,
const double &price[])
{
//--- thực hiện phân tích một lần
if(ExtFlag)
{
//--- thử giải phóng bộ nhớ cho các mảng
//--- 1. Mảng động
Print("+============================+");
Print("1. Kiểm tra mảng động:");
Print("Kích thước trước khi giải phóng bộ nhớ = ",ArraySize(ExtDynamic));
Print("Đây có phải là mảng động không = ",ArrayIsDynamic(ExtDynamic) ? "Có" : "Không");
//--- thử giải phóng bộ nhớ mảng
ArrayFree(ExtDynamic);
Print("Kích thước sau khi giải phóng bộ nhớ = ",ArraySize(ExtDynamic));
//--- 2. Mảng tĩnh
Print("2. Kiểm tra mảng tĩnh:");
Print("Kích thước trước khi giải phóng bộ nhớ = ",ArraySize(ExtStatic));
Print("Đây có phải là mảng động không = ",ArrayIsDynamic(ExtStatic) ? "Có" : "Không");
//--- thử giải phóng bộ nhớ mảng
ArrayFree(ExtStatic);
Print("Kích thước sau khi giải phóng bộ nhớ = ",ArraySize(ExtStatic));
//--- 3. Bộ đệm chỉ báo
Print("3. Kiểm tra bộ đệm chỉ báo:");
Print("Kích thước trước khi giải phóng bộ nhớ = ",ArraySize(ExtBuff));
Print("Đây có phải là mảng động không = ",ArrayIsDynamic(ExtBuff) ? "Có" : "Không");
//--- thử giải phóng bộ nhớ mảng
ArrayFree(ExtBuff);
Print("Kích thước sau khi giải phóng bộ nhớ = ",ArraySize(ExtBuff));
//--- thay đổi giá trị cờ
ExtFlag=false;
}
//--- 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
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