Đặc điểm chính của các chỉ báo
Chỉ báo thực hiện một thuật toán tính toán nhất định được áp dụng theo các thanh (bars) lên một chuỗi thời gian ban đầu hoặc nhiều chuỗi thời gian. Tất cả các chuỗi thời gian như vậy là các mảng riêng của terminal
(xem hàm ArrayIsSeries): terminal phân bổ bộ nhớ cho chúng và thêm các phần tử mới mỗi khi các thanh mới được hình thành. Đương nhiên, trong số các mảng này, các mảng chứa báo giá biểu tượng trên các khung thời gian khác nhau đóng vai trò nền tảng vì chúng được terminal tự động điền dữ liệu. Tuy nhiên, các chỉ báo được khởi chạy có thể mở rộng đáng kể tập hợp các chuỗi thời gian có sẵn để phân tích.
Chỉ báo thường lưu kết quả hoạt động của nó vào các mảng động, được đăng ký làm bộ đệm chỉ báo bằng một hàm đặc biệt (SetIndexBuffer) và cũng trở thành các mảng riêng của terminal. Ngoài việc phân bổ bộ nhớ cho chúng, terminal còn cung cấp quyền truy cập công khai vào các mảng này như các chuỗi thời gian mới, mà trên đó các chỉ báo khác có thể được tính toán.
Điểm vào của phần tính toán của chỉ báo là hàm OnCalculate
— một trình xử lý sự kiện cùng tên. Trong Tổng quan về các hàm xử lý sự kiện, chúng ta đã đề cập đến hàm này: chỉ cần sự hiện diện của nó trong mã nguồn là đủ để chương trình MQL được terminal nhận diện là một chỉ báo. Hàm OnCalculate
sẽ được mô tả chi tiết trong phần tiếp theo. Đặc biệt, đặc điểm chính của OnCalculate
là sự tồn tại của hai dạng khác nhau. Lập trình viên nên chọn tùy chọn ngay từ đầu khi thiết kế chỉ báo, vì điều này quyết định mục đích và các trường hợp sử dụng có thể có.
Hàm OnCalculate
không phải là đặc điểm phân biệt duy nhất của chỉ báo. Ngoài nó, một nhóm các chỉ thị tiền xử lý đặc biệt #property
được dành riêng cho các chỉ báo — chúng ta sẽ xem xét chúng từng bước trong một số phần liên quan của chương này. Trước đó, chúng ta đã thấy một số Thuộc tính chung của chương trình, và đương nhiên, các chỉ thị như vậy cũng áp dụng cho các chỉ báo.
Như người dùng MetaTrader 5 biết, mỗi chỉ báo có cách hiển thị các cấu trúc đồ họa (chuỗi thời gian) của nó: hoặc trong cửa sổ chính hiển thị giá biểu tượng hoặc trong một cửa sổ phụ riêng biệt. Một cửa sổ phụ như vậy được tạo ra ở phần dưới của cửa sổ khi một chỉ báo cụ thể (hoặc nhóm chỉ báo) được thêm vào biểu đồ nếu nó được thiết kế để hoạt động trong cửa sổ phụ. Ví dụ, chỉ báo Moving Average (MA) tiêu chuẩn được vẽ trên biểu đồ giá, trong khi Williams Percent Range (WPR) được vẽ trong một cửa sổ phụ riêng biệt.
Từ góc độ của nhà phát triển, điều này có nghĩa là bạn nên xác định ban đầu liệu chỉ báo sẽ được hiển thị trong cửa sổ chính hay trong cửa sổ phụ vì hai chế độ này không thể kết hợp. Hơn nữa, đặc điểm này, cũng như số lượng bộ đệm chỉ báo, chỉ có thể được thiết lập một lần bằng các chỉ thị #property
(xem Hai loại chỉ báo và Thiết lập số lượng bộ đệm và đồ họa), và sau đó sẽ không thể thay đổi chúng bằng cách gọi hàm API MQL5 vì các hàm như vậy không được cung cấp. Không giống như các thuộc tính bất biến này, hầu hết các thuộc tính khác của chỉ báo có thể được điều chỉnh động bằng các hàm đặc biệt. Do đó, khi nghiên cứu các khía cạnh kỹ thuật của lập trình chỉ báo, chúng ta sẽ có thể thiết lập mối quan hệ giữa các thuộc tính #property
và các hàm MQL5.
Ngoài ra, các chỉ báo thường thực hiện các trình xử lý OnInit
và OnDeinit
(xem Sự kiện tham chiếu của chỉ báo và Expert Advisors). OnInit
đặc biệt quan trọng để gán các mảng sẽ hoạt động như bộ đệm chỉ báo, tức là để tích lũy kết quả của các phép tính trung gian và cuối cùng, hiển thị cho người dùng và có sẵn cho các chương trình khác, chẳng hạn như Expert Advisors.
Chỉ báo là một trong những chương trình MQL tương tác có thể, nếu cần, làm việc với các sự kiện hẹn giờ (OnTimer) và các thay đổi biểu đồ (OnChartEvent) do người dùng hoặc các chương trình khác tạo ra. Những tính năng kỹ thuật này là tùy chọn cho các chỉ báo và dựa trên hàng đợi sự kiện biểu đồ. Chúng ta sẽ thảo luận riêng về chúng trong chương về biểu đồ.