Tổng quan về các hàm làm việc với toàn bộ thuộc tính biểu đồ
Các thuộc tính biểu đồ có thể đọc và chỉnh sửa thông qua các nhóm hàm ChartSet
và ChartGet
, mỗi nhóm chứa các thuộc tính của một loại nhất định: số thực (double
), số nguyên (long
, int
, datetime
, color
, bool
, enums), và chuỗi.
Tất cả các hàm nhận ID biểu đồ làm tham số đầu tiên. Giá trị 0 nghĩa là biểu đồ hiện tại, tức là tương đương với việc truyền kết quả của lời gọi ChartID()
. Tuy nhiên, điều này không có nghĩa là ID của biểu đồ hiện tại là 0.
Các hằng số mô tả tất cả các thuộc tính hình thành ba liệt kê ENUM_CHART_PROPERTY_INTEGER, ENUM_CHART_PROPERTY_DOUBLE, ENUM_CHART_PROPERTY_STRING, được sử dụng làm tham số hàm cho loại tương ứng. Bảng tổng hợp tất cả các thuộc tính có thể được tìm thấy trong tài liệu MQL5, trên trang về thuộc tính biểu đồ. Trong các phần tiếp theo của chương này, chúng ta sẽ dần dần bao quát hầu hết các thuộc tính, phân nhóm chúng theo mục đích. Ngoại lệ duy nhất là các thuộc tính quản lý sự kiện trên biểu đồ - chúng sẽ được mô tả trong phần liên quan của chương về sự kiện.
Các phần tử của cả ba liệt kê được gán giá trị sao cho chúng tạo thành một danh sách duy nhất không có giao nhau (lặp lại). Điều này cho phép xác định loại liệt kê bằng một giá trị cụ thể. Ví dụ, với một hằng số cho trước, chúng ta có thể thử chuyển đổi nó thành chuỗi với tên của một trong các enums cho đến khi thành công.
int value = ...;
ResetLastError(); // clear the error code if there was one
EnumToString((ENUM_CHART_PROPERTY_INTEGER)value); // resulting string is not important
if(_LastError == 0) // analyze if there is a new error
{
// success is an element of ENUM_CHART_PROPERTY_INTEGER
return ChartGetInteger(0, (ENUM_CHART_PROPERTY_INTEGER)value);
}
ResetLastError();
EnumToString((ENUM_CHART_PROPERTY_DOUBLE)value);
if(_LastError == 0)
{
// success is an ENUM_CHART_PROPERTY_DOUBLE element
return ChartGetDouble(0, (ENUM_CHART_PROPERTY_DOUBLE)value);
}
... // continue a similar check for ENUM_CHART_PROPERTY_STRING
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Sau này chúng ta sẽ sử dụng phương pháp này trong các script thử nghiệm.
Một số thuộc tính (ví dụ, số lượng thanh hiển thị) chỉ đọc và không thể thay đổi. Chúng sẽ được đánh dấu thêm "r/o" (chỉ đọc).
Các hàm đọc thuộc tính có dạng ngắn và dạng dài: dạng ngắn trực tiếp trả về giá trị được yêu cầu, còn dạng dài trả về thuộc tính boolean của thành công (true
) hoặc lỗi (false
), trong khi giá trị thực tế được đặt trong tham số cuối cùng được truyền bằng tham chiếu. Khi sử dụng dạng ngắn, việc kiểm tra mã lỗi trong biến _LastError
đặc biệt quan trọng, vì giá trị 0 (NULL) trả về trong trường hợp có vấn đề có thể tổng quát là đúng.
Khi truy cập một số thuộc tính, bạn phải chỉ định một tham số bổ sung window
, được sử dụng để chỉ định cửa sổ/cửa sổ phụ của biểu đồ. 0 nghĩa là cửa sổ chính. Các cửa sổ phụ được đánh số bắt đầu từ 1. Một số thuộc tính áp dụng cho toàn bộ biểu đồ và do đó có các biến thể hàm không có tham số window
.
Dưới đây là nguyên mẫu hàm để đọc và ghi các thuộc tính số nguyên. Lưu ý rằng loại giá trị trong chúng là long
.
bool ChartSetInteger(long chartId, ENUM_CHART_PROPERTY_INTEGER property, long value)
bool ChartSetInteger(long chartId, ENUM_CHART_PROPERTY_INTEGER property, int window, long value)
long ChartGetInteger(long chartId, ENUM_CHART_PROPERTY_INTEGER property, int window = 0)
bool ChartGetInteger(long chartId, ENUM_CHART_PROPERTY_INTEGER property, int window, long &value)
Các hàm cho thuộc tính số thực được mô tả tương tự. Không có thuộc tính số thực nào có thể ghi cho các cửa sổ phụ, vì vậy chỉ có một dạng của ChartSetDouble
, không có tham số window
.
bool ChartSetDouble(long chartId, ENUM_CHART_PROPERTY_DOUBLE property, double value)
double ChartGetDouble(long chartId, ENUM_CHART_PROPERTY_DOUBLE property, int window = 0)
bool ChartGetDouble(long chartId, ENUM_CHART_PROPERTY_DOUBLE property, int window, double &value)
Điều tương tự áp dụng cho các thuộc tính chuỗi, nhưng cần lưu ý thêm một sắc thái: độ dài chuỗi không thể vượt quá 2045 ký tự (các ký tự thừa sẽ bị cắt bỏ).
bool ChartSetString(long chartId, ENUM_CHART_PROPERTY_STRING property, string value)
string ChartGetString(long chartId, ENUM_CHART_PROPERTY_STRING property)
bool ChartGetString(long chartId, ENUM_CHART_PROPERTY_STRING property, string &value)
Khi đọc thuộc tính bằng dạng ngắn của ChartGetInteger/ChartGetDouble
, tham số window
là tùy chọn và mặc định là cửa sổ chính (window=0
).
Các hàm để đặt thuộc tính biểu đồ (ChartSetInteger
, ChartSetDouble
, ChartSetString
) là không đồng bộ và phục vụ để gửi lệnh thay đổi đến biểu đồ. Nếu các hàm này được thực thi thành công, lệnh được thêm vào hàng đợi chung của các sự kiện biểu đồ, và true
được trả về. Khi xảy ra lỗi, hàm trả về false
. Trong trường hợp này, bạn nên kiểm tra mã lỗi trong biến _LastError
.
Các thuộc tính biểu đồ được thay đổi sau đó, trong quá trình xử lý hàng đợi sự kiện của biểu đồ này, và thường có một chút độ trễ, vì vậy bạn không nên mong đợi cập nhật biểu đồ ngay lập tức sau khi áp dụng cài đặt mới. Để buộc cập nhật giao diện và thuộc tính của biểu đồ, sử dụng hàm ChartRedraw
. Nếu bạn muốn thay đổi nhiều thuộc tính biểu đồ cùng lúc, thì cần gọi các hàm tương ứng trong một khối mã và sau đó gọi một lần ChartRedraw
.
Nói chung, biểu đồ được cập nhật tự động bởi terminal để đáp ứng các sự kiện như sự xuất hiện của báo giá mới, thay đổi kích thước cửa sổ biểu đồ, thu phóng, cuộn, thêm chỉ báo, v.v.
Các hàm để lấy thuộc tính biểu đồ (ChartGetInteger
, ChartGetDouble
, ChartGetString
) là đồng bộ, tức là mã gọi đợi kết quả thực thi của chúng.