Bật và tắt bộ đếm thời gian: EventSetTimer/EventKillTimer
MQL5 cho phép bạn bật hoặc tắt bộ đếm thời gian tiêu chuẩn để thực hiện bất kỳ hành động nào theo lịch trình. Có hai hàm phục vụ cho mục đích này: EventSetTimer
và EventKillTimer
.
bool EventSetTimer(int seconds)
Hàm này chỉ thị cho terminal của khách hàng rằng đối với Expert Advisor hoặc chỉ báo này, cần tạo ra các sự kiện từ bộ đếm thời gian với tần suất được chỉ định, được thiết lập bằng giây (tham số seconds
).
Hàm trả về dấu hiệu thành công (true
) hoặc lỗi (false
). Mã lỗi có thể được lấy từ _LastError
.
Để xử lý các sự kiện bộ đếm thời gian, một Expert Advisor hoặc chỉ báo phải có hàm OnTimer trong mã của nó. Sự kiện bộ đếm thời gian đầu tiên sẽ không xảy ra ngay sau khi gọi EventSetTimer
, mà sau khoảng thời gian seconds
giây.
Đối với mỗi Expert Advisor hoặc chỉ báo gọi hàm EventSetTimer
, nó sẽ tạo ra một bộ đếm thời gian riêng, dành riêng cho chương trình đó. Chương trình sẽ chỉ nhận sự kiện từ bộ đếm thời gian này. Các bộ đếm thời gian trong các chương trình khác nhau hoạt động độc lập.
Mỗi chương trình MQL tương tác được đặt trên biểu đồ có một hàng đợi sự kiện riêng, nơi các sự kiện nhận được cho nó được thêm vào. Nếu đã có một sự kiện OnTimer
trong hàng đợi hoặc nó đang trong trạng thái xử lý, thì sự kiện OnTimer
mới sẽ không được xếp vào hàng đợi.
Nếu bộ đếm thời gian không còn cần thiết nữa, nó nên được tắt bằng hàm EventKillTimer
.
void EventKillTimer(void)
Hàm này dừng bộ đếm thời gian đã được bật trước đó bởi hàm EventSetTimer
(hoặc bởi EventSetMillisecondTimer, mà chúng ta sẽ thảo luận tiếp theo). Hàm này cũng có thể được gọi từ trình xử lý OnTimer
. Do đó, đặc biệt, có thể thực hiện một hành động đơn lẻ bị trì hoãn.
Việc gọi
EventKillTimer
trong các chỉ báo không xóa hàng đợi, vì vậy sau đó bạn vẫn có thể nhận được sự kiệnOnTimer
còn sót lại cuối cùng.
Khi chương trình MQL kết thúc, bộ đếm thời gian sẽ bị hủy buộc nếu nó đã được tạo nhưng chưa được tắt bởi hàm EventKillTimer
.
Mỗi chương trình chỉ có thể thiết lập một bộ đếm thời gian. Do đó, nếu bạn muốn gọi các phần khác nhau của thuật toán với các khoảng thời gian khác nhau, bạn nên bật một bộ đếm thời gian với chu kỳ là bội số chung nhỏ nhất của các chu kỳ cần thiết (trong trường hợp giới hạn, với chu kỳ tối thiểu là 1 giây), và trong trình xử lý OnTimer
tự theo dõi các chu kỳ lớn hơn. Chúng ta sẽ xem xét một ví dụ về cách tiếp cận này trong phần tiếp theo.
MQL5 cũng cho phép tạo các bộ đếm thời gian với chu kỳ dưới 1 giây: có một hàm cho việc này, EventSetMillisecondTimer.