Quản lý thời gian trong tester: bộ đếm thời gian, Sleep, GMT
Khi phát triển Expert Advisors, cần lưu ý rằng tester có một số đặc thù trong việc mô phỏng sự trôi qua của thời gian dựa trên các tick được tạo ra và hoạt động của các hàm liên quan đến thời gian.
Khi kiểm tra, thời gian cục bộ được trả về bởi hàm TimeLocal
luôn bằng với thời gian máy chủ theo TimeTradeServer
. Đổi lại, thời gian máy chủ luôn bằng với GMT TimeGMT
. Do đó, tất cả các hàm này, khi được kiểm tra, đều cho cùng một thời gian. Đây là một đặc điểm kỹ thuật của nền tảng, xảy ra vì quyết định không lưu trữ thông tin về thời gian máy chủ cục bộ, mà luôn lấy từ máy chủ, nơi có thể không có kết nối tại một thời điểm cụ thể.
Đặc điểm này tạo ra khó khăn trong việc triển khai các chiến lược liên quan đến thời gian toàn cầu, đặc biệt là liên quan đến việc phát hành tin tức. Trong những trường hợp như vậy, cần chỉ định múi giờ của báo giá trong cài đặt của Expert Advisor đang được kiểm tra hoặc phát minh ra các phương pháp để tự động phát hiện múi giờ (xem phần Giờ tiết kiệm ánh sáng ban ngày).
Bây giờ chúng ta hãy chuyển sang các hàm khác để làm việc với thời gian.
Như chúng ta biết, có thể xử lý các sự kiện bộ đếm thời gian trong MQL5. Trình xử lý OnTimer
được gọi bất kể chế độ kiểm tra. Điều này có nghĩa là nếu kiểm tra được khởi chạy ở chế độ "Chỉ giá mở" trên kỳ H4, và một bộ đếm thời gian được đặt bên trong Expert Advisor với cuộc gọi đến mỗi giây, thì trình xử lý OnTick
sẽ được gọi một lần khi mở mỗi thanh H4 và sau đó, trong thanh, trình xử lý OnTimer
sẽ được gọi 14.400 lần (3600 giây * 4 giờ). Mức độ tăng thời gian kiểm tra Expert Advisor trong trường hợp này phụ thuộc vào thuật toán của nó.
Một hàm khác ảnh hưởng đến dòng thời gian trong chương trình là hàm Sleep
. Nó cho phép tạm dừng việc thực thi của Expert Advisor trong một khoảng thời gian. Điều này có thể cần thiết khi yêu cầu bất kỳ dữ liệu nào chưa sẵn sàng tại thời điểm yêu cầu, và cần đợi cho đến khi nó sẵn sàng.
Điều quan trọng cần hiểu là Sleep
chỉ ảnh hưởng đến chương trình gọi nó và không làm chậm quá trình kiểm tra. Trên thực tế, khi gọi Sleep
, các tick được tạo ra sẽ được "phát" trong khoảng thời gian trễ được chỉ định, do đó các lệnh chờ, mức dừng, v.v. có thể được kích hoạt. Sau khi gọi Sleep
, thời gian được mô phỏng trong tester tăng lên theo khoảng thời gian được chỉ định trong tham số hàm.
Sau này, trong phần về kiểm tra Expert Advisors đa tiền tệ, chúng ta sẽ cho thấy cách bạn có thể sử dụng bộ đếm thời gian và hàm Sleep
để đồng bộ các thanh.