Sử dụng các chỉ báo có sẵn từ chương trình MQL
Trong chương trước, chúng ta đã tìm hiểu cách phát triển các chỉ báo tùy chỉnh. Người dùng có thể đặt chúng lên biểu đồ và thực hiện phân tích kỹ thuật thủ công với chúng. Nhưng đây không phải là cách duy nhất để sử dụng chỉ báo. MQL5 cho phép bạn tạo các phiên bản của chỉ báo và yêu cầu dữ liệu được tính toán của chúng một cách lập trình. Điều này có thể được thực hiện cả từ các chỉ báo khác, kết hợp nhiều chỉ báo đơn giản thành các chỉ báo phức tạp hơn, và từ các Expert Advisors thực hiện giao dịch tự động hoặc bán tự động dựa trên tín hiệu của chỉ báo.
Chỉ cần biết các tham số của chỉ báo, cũng như vị trí và ý nghĩa của dữ liệu được tính toán trong các bộ đệm công khai của nó, để tổ chức việc xây dựng các chuỗi thời gian mới được áp dụng này và truy cập vào chúng.
Trong chương này, chúng ta sẽ nghiên cứu các hàm để tạo và xóa chỉ báo, cũng như đọc các bộ đệm của chúng. Điều này áp dụng không chỉ cho các chỉ báo tùy chỉnh được viết bằng MQL5 mà còn cho một tập hợp lớn các chỉ báo có sẵn.
Các nguyên tắc chung của việc tương tác lập trình với chỉ báo bao gồm một số bước:
- Tạo
descriptor
của chỉ báo, đây là một số nhận dạng duy nhất do hệ thống cấp đáp ứng một lệnh gọi hàm nhất định (iCustom
hoặcIndicatorCreate
) và thông qua đó mã MQL báo cáo tên và các tham số của chỉ báo cần thiết. - Đọc dữ liệu từ các bộ đệm của chỉ báo được chỉ định bởi
descriptor
bằng hàmCopyBuffer
. - Giải phóng handle (
IndicatorRelease
) nếu chỉ báo không còn cần thiết nữa.
Việc tạo và giải phóng descriptor
thường được thực hiện trong quá trình khởi tạo và hủy khởi tạo chương trình, tương ứng, và các bộ đệm được đọc và phân tích lặp lại, khi cần, ví dụ, khi có tín hiệu tick đến.
Trong mọi trường hợp, trừ những trường hợp đặc biệt khi cần thay đổi động cài đặt chỉ báo trong quá trình thực thi chương trình, nên lấy các descriptor
của chỉ báo một lần trong OnInit
hoặc trong hàm tạo của lớp đối tượng toàn cục.
Tất cả các hàm tạo chỉ báo đều có ít nhất 2 tham số: ký hiệu (symbol) và khung thời gian (timeframe). Thay vì ký hiệu, bạn có thể truyền NULL
, điều này có nghĩa là công cụ hiện tại. Giá trị 0
tương ứng với khung thời gian hiện tại. Tùy chọn, bạn có thể sử dụng các biến có sẵn _Symbol
và _Period
. Nếu cần, bạn có thể đặt một ký hiệu và khung thời gian tùy ý không liên quan đến biểu đồ. Do đó, đặc biệt, có thể triển khai các chỉ báo đa tài sản và đa khung thời gian.
Bạn không thể truy cập dữ liệu của chỉ báo ngay sau khi tạo phiên bản của nó vì việc tính toán các bộ đệm cần một chút thời gian. Trước khi đọc dữ liệu, bạn nên kiểm tra sự sẵn sàng của chúng bằng hàm BarsCalculated
(nó cũng nhận một đối số descriptor
và trả về số lượng thanh được tính toán). Nếu không, sẽ nhận được lỗi thay vì dữ liệu. Mặc dù điều này không nghiêm trọng vì nó không làm chương trình dừng lại và bị gỡ bỏ, nhưng việc thiếu dữ liệu sẽ khiến chương trình trở nên vô dụng.
Tiếp theo trong chương này, để ngắn gọn, chúng ta sẽ gọi việc tạo các phiên bản của chỉ báo và lấy các descriptor
của chúng đơn giản là "tạo chỉ báo". Nó nên được phân biệt với thuật ngữ tương tự "tạo chỉ báo tùy chỉnh", mà chúng ta đã dùng để chỉ việc viết mã nguồn của chỉ báo trong chương trước.