Kiểm tra chỉ số
Bộ kiểm tra tích hợp trong MetaTrader 5 hỗ trợ hai loại chương trình MQL: Expert Advisors và Indicators. Các chỉ số luôn được kiểm tra trong cửa sổ trực quan. Nhưng điều này chỉ áp dụng khi kiểm tra một chỉ số độc lập. Nếu chỉ số được tạo và gọi từ một Expert Advisor theo cách lập trình, thì Expert Advisor này cùng với các chỉ số có thể được kiểm tra mà không cần trực quan hóa, tùy theo quyết định của người dùng. Chúng ta sẽ nghiên cứu công nghệ sử dụng các chỉ số từ mã MQL trong chương tiếp theo. Công nghệ tương tự sẽ được sử dụng để tích hợp với Expert Advisors.
Đồng thời, nhà phát triển chỉ số nên lưu ý rằng khi không có trực quan hóa, bộ kiểm tra sử dụng một phương pháp tính toán nhanh cho các chỉ số được gọi từ Expert Advisors. Dữ liệu không được tính toán tại mỗi tick, mà chỉ khi dữ liệu liên quan được yêu cầu từ các bộ đệm chỉ số (xem hàm CopyBuffer
).
Nếu chỉ số chưa được tính toán trên tick hiện tại, nó sẽ được tính toán một lần tại lần truy cập đầu tiên vào dữ liệu của nó. Nếu các yêu cầu khác được tạo ra trong cùng một tick, dữ liệu đã tính toán sẽ được trả về dưới dạng sẵn sàng. Nếu các bộ đệm chỉ số không được đọc trên tick hiện tại, nó sẽ không được tính toán. Việc tính toán chỉ số theo nhu cầu mang lại sự tăng tốc đáng kể trong việc kiểm tra và tối ưu hóa.
Nếu một chỉ số cụ thể yêu cầu các tính toán chính xác và không thể bỏ qua các tick, MQL5 có thể hướng dẫn bộ kiểm tra bật tính toán lại chỉ số trên mỗi tick. Điều này được thực hiện với chỉ thị sau:
#property tester_everytick_calculate
Từ everytick
trong chỉ thị đặc biệt đề cập đến việc tính toán của chỉ số và không ảnh hưởng đến chế độ tạo tick. Nói cách khác, các tick có nghĩa là thay đổi giá được tạo ra bởi bộ kiểm tra, dù là cho mỗi tick, cho giá OHLC M1, hay cho các lần mở thanh, và cài đặt này của bộ kiểm tra vẫn có hiệu lực.
Đối với các chỉ số mà chúng ta đã xem xét trong chương này, thuộc tính này không quan trọng. Cũng cần lưu ý rằng nó chỉ áp dụng cho các hoạt động trong bộ kiểm tra chiến lược. Trong terminal, các chỉ số luôn nhận sự kiện OnCalculate
trên mỗi tick đến (cung cấp khả năng bỏ qua các tick nếu tính toán của bạn trong OnCalculate
mất quá nhiều thời gian và không hoàn thành trước khi tick mới đến).
Về phía bộ kiểm tra, các chỉ số được tính toán trên mỗi tick dưới bất kỳ điều kiện nào sau đây:
- Trong chế độ trực quan
- Nếu có chỉ thị
tester_everytick_calculate
- Nếu chúng có lệnh gọi
EventChartCustom
hoặc các hàmOnChartEvent
hoặcOnTimer
Hãy thử kiểm tra chỉ số IndMultiSymbolMonitor.mq5
từ phần trước.
Chúng ta chọn ký hiệu chính và khung thời gian của biểu đồ EURUSD, H1. Phương pháp tạo tick là "dựa trên tick thực tế".
Sau khi bắt đầu kiểm tra, chúng ta sẽ thấy các mục sau trong nhật ký của cửa sổ chế độ trực quan:
2021.10.20 00:00:00 New bar(s) on: EURUSD USDCHF USDJPY , in-sync:false
2021.10.20 00:00:00 New bar(s) on: AUDUSD , in-sync:false
2021.10.20 00:00:00 New bar(s) on: GBPUSD , in-sync:false
2021.10.20 00:00:02 New bar(s) on: USDCAD , in-sync:false
2021.10.20 00:00:11 New bar(s) on: NZDUSD , in-sync:true
2021.10.20 01:00:04 New bar(s) on: EURUSD GBPUSD USDCHF USDJPY AUDUSD USDCAD NZDUSD , in-sync:true
2021.10.20 02:00:00 New bar(s) on: EURUSD USDJPY NZDUSD , in-sync:false
2021.10.20 02:00:00 New bar(s) on: USDCHF , in-sync:false
2021.10.20 02:00:01 New bar(s) on: AUDUSD , in-sync:false
2021.10.20 02:00:15 New bar(s) on: GBPUSD USDCAD , in-sync:true
2021.10.20 03:00:00 New bar(s) on: EURUSD AUDUSD NZDUSD , in-sync:false
2021.10.20 03:00:00 New bar(s) on: GBPUSD USDJPY USDCAD , in-sync:false
2021.10.20 03:00:12 New bar(s) on: USDCHF , in-sync:true
2
3
4
5
6
7
8
9
10
11
12
13
Như bạn có thể thấy, các thanh mới xuất hiện trên các ký hiệu khác nhau dần dần. Thông thường, một số sự kiện xảy ra trước khi cờ "in-sync" được đặt thành true
xuất hiện.
Bạn cũng có thể chạy kiểm tra cho các chỉ số khác trong chương này. Vui lòng lưu ý rằng nếu một chương trình MQL truy vấn lịch sử của các tick, hãy chọn phương pháp tạo "dựa trên tick thực tế" trong bộ kiểm tra.
Kiểm tra "theo giá mở" chỉ có thể được sử dụng cho các chỉ số và Expert Advisors được phát triển với sự hỗ trợ cho chế độ này, ví dụ, chúng chỉ tính toán bằng giá Open
hoặc phân tích các thanh đã hoàn thành bắt đầu từ thanh thứ nhất.
Chú ý! Khi kiểm tra các chỉ số trong bộ kiểm tra, sự kiện
OnDeinit
không hoạt động. Hơn nữa, các quá trình hoàn thiện khác không được thực hiện, ví dụ, các hàm hủy của các đối tượng toàn cục không được gọi.