Xóa biến toàn cục
Nếu cần thiết, một chương trình MQL có thể xóa một biến toàn cục hoặc một nhóm biến đã trở nên dư thừa. Danh sách các biến toàn cục tiêu tốn một số tài nguyên máy tính, và phong cách lập trình tốt khuyến nghị rằng các tài nguyên nên được giải phóng bất cứ khi nào có thể.
bool GlobalVariableDel(const string name)
Hàm này xóa biến toàn cục có tên name
. Nếu thành công, hàm trả về true
, nếu không thì trả về false
.
int GlobalVariablesDeleteAll(const string prefix = NULL, datetime limit = 0)
Hàm này xóa các biến toàn cục có tiền tố được chỉ định trong tên và có thời gian sử dụng cũ hơn giá trị tham số limit
.
Nếu tiền tố được chỉ định là NULL
(mặc định) hoặc một chuỗi rỗng, thì tất cả các biến toàn cục đáp ứng tiêu chí xóa theo ngày (nếu được đặt) sẽ nằm trong tiêu chí xóa.
Nếu tham số limit
là 0 (mặc định), thì các biến toàn cục với bất kỳ ngày nào, có tính đến tiền tố, sẽ bị xóa.
Nếu cả hai tham số đều được chỉ định, thì các biến toàn cục đáp ứng cả hai tiêu chí, tiền tố và thời gian, sẽ bị xóa.
Hãy cẩn thận: gọi GlobalVariablesDeleteAll
mà không có tham số sẽ xóa tất cả các biến.
Hàm trả về số lượng biến đã bị xóa.
Hãy xem xét script GlobalsDelete.mq5
, tận dụng hai tính năng mới.
void OnStart()
{
PRTF(GlobalVariableDel("#123%"));
PRTF(GlobalVariablesDeleteAll("#123%"));
...
2
3
4
5
Ban đầu, một nỗ lực được thực hiện để xóa các biến toàn cục không tồn tại bằng tên chính xác và tiền tố của chúng. Cả hai đều không ảnh hưởng đến các biến hiện có.
Việc gọi GlobalVariablesDeleteAll
với bộ lọc theo thời gian trong quá khứ (hơn 4 tuần trước) cũng cho kết quả bằng 0, vì terminal tự động xóa các biến cũ như vậy (những biến này không thể tồn tại).
PRTF(GlobalVariablesDeleteAll(NULL, D'2021.01.01'));
Sau đó, chúng ta tạo một biến có tên abracadabra
(nếu nó chưa tồn tại) và ngay lập tức xóa nó. Những lời gọi này sẽ thành công.
PRTF(GlobalVariableSet(abracadabra, 0));
PRTF(GlobalVariableDel(abracadabra));
2
Cuối cùng, hãy xóa các biến bắt đầu bằng tiền tố GlobalsRun
: chúng hẳn đã được tạo bởi các script thử nghiệm từ hai phần trước về tên tệp (tương ứng là GlobalsRunCount.mq5
và GlobalsRunCheck.mq5
).
PRTF(GlobalVariablesDeleteAll("GlobalsRun"));
PRTF(GlobalVariablesTotal());
}
2
3
Script sẽ xuất ra một tập hợp chuỗi như sau vào nhật ký (một số chỉ số phụ thuộc vào điều kiện bên ngoài và thời gian khởi động).
GlobalVariableDel(#123%)=false / GLOBALVARIABLE_NOT_FOUND(4501)
GlobalVariablesDeleteAll(#123%)=0 / ok
GlobalVariablesDeleteAll(NULL,D'2021.01.01')=0 / ok
GlobalVariableSet(abracadabra,0)=2021.08.30 14:02:32 / ok
GlobalVariableDel(abracadabra)=true / ok
GlobalVariablesDeleteAll(GlobalsRun)=2 / ok
GlobalVariablesTotal()=0 / ok
2
3
4
5
6
7
Cuối cùng, chúng ta đã in ra tổng số biến toàn cục còn lại (trong trường hợp này, chúng ta nhận được 0, tức là không còn biến nào). Con số này có thể khác đối với bạn nếu các biến toàn cục được tạo bởi các chương trình MQL khác hoặc bởi người dùng.