Các thuộc tính chính của đối tượng
Tất cả các đối tượng đều có một số thuộc tính chung. Các thuộc tính chính được liệt kê trong bảng sau. Chúng ta sẽ tìm hiểu các thuộc tính đặc biệt khác sau (xem các phần Quản lý trạng thái đối tượng, Thứ tự Z, và Hiển thị đối tượng trong ngữ cảnh khung thời gian).
Định danh | Mô tả | Kiểu |
---|---|---|
OBJPROP_NAME | Tên đối tượng | string |
OBJPROP_TYPE | Loại đối tượng (r/o) | ENUM_OBJECT |
OBJPROP_CREATETIME | Thời gian tạo đối tượng (r/o) | datetime |
OBJPROP_TEXT | Mô tả của đối tượng (văn bản trong đối tượng) | string |
OBJPROP_TOOLTIP | Văn bản gợi ý khi di chuột | string |
Thuộc tính OBJPROP_NAME
là định danh của đối tượng. Việc chỉnh sửa nó tương đương với việc xóa đối tượng cũ và tạo một đối tượng mới.
Đối với một số loại đối tượng có khả năng hiển thị văn bản (như nhãn hoặc nút), thuộc tính OBJPROP_TEXT
luôn được hiển thị trực tiếp trên biểu đồ, bên trong đối tượng. Đối với các đối tượng khác (ví dụ, đường thẳng), thuộc tính này chứa mô tả được hiển thị trên biểu đồ bên cạnh đối tượng và chỉ khi tùy chọn "Hiển thị mô tả đối tượng" được bật trong cài đặt biểu đồ. Trong cả hai trường hợp, OBJPROP_TEXT
được hiển thị trong gợi ý.
Thuộc tính OBJPROP_CREATETIME
chỉ tồn tại đến khi kết thúc phiên hiện tại và không được ghi vào tệp chr.
Bạn có thể thay đổi tên của một đối tượng bằng lập trình hoặc thủ công (trong hộp thoại thuộc tính của đối tượng), trong khi thời gian tạo của nó sẽ không thay đổi. Nhìn trước, chúng ta lưu ý rằng việc đổi tên bằng lập trình không gây ra bất kỳ sự kiện nào về các đối tượng trên biểu đồ. Như chúng ta sẽ tìm hiểu trong chương tiếp theo, việc đổi tên thủ công kích hoạt ba sự kiện:
- Xóa một đối tượng dưới tên cũ (
CHARTEVENT_OBJECT_DELETE
), - Tạo một đối tượng dưới tên mới (
CHARTEVENT_OBJECT_CREATE
) và - Sửa đổi một đối tượng mới (
CHARTEVENT_OBJECT_CHANGE
).
Nếu thuộc tính OBJPROP_TOOLTIP
không được thiết lập, một gợi ý sẽ được hiển thị cho đối tượng, tự động được tạo bởi terminal. Để tắt gợi ý, hãy đặt giá trị của nó thành \n
(xuống dòng).
Hãy điều chỉnh script ObjectFinder.mq5
từ phần Tìm kiếm đối tượng để ghi lại tất cả các thuộc tính trên của các đối tượng trên biểu đồ hiện tại. Chúng ta sẽ đặt tên script mới là ObjectListing.mq5
.
Ngay từ đầu hàm OnStart
, chúng ta sẽ tạo hoặc sửa đổi một đường thẳng đứng nằm trên thanh cuối cùng (tại thời điểm script được khởi chạy). Nếu có tùy chọn hiển thị mô tả đối tượng trong cài đặt biểu đồ, thì chúng ta sẽ thấy văn bản "Thanh mới nhất tại thời điểm này" dọc theo đường thẳng đứng bên phải.
void OnStart()
{
const string vline = ObjNamePrefix + "current";
ObjectCreate(0, vline, OBJ_VLINE, 0, iTime(NULL, 0, 0), 0);
ObjectSetString(0, vline, OBJPROP_TEXT, "Latest Bar At The Moment");
...
}
2
3
4
5
6
7
Tiếp theo, trong một vòng lặp qua các cửa sổ phụ, chúng ta sẽ truy vấn tất cả các đối tượng lên đến ObjectsTotal
và các thuộc tính chính của chúng.
int count = 0;
const long id = ChartID();
const int win = (int)ChartGetInteger(id, CHART_WINDOWS_TOTAL);
// vòng lặp qua các cửa sổ phụ
for(int k = 0; k < win; ++k)
{
PrintFormat(" Window %d", k);
const int n = ObjectsTotal(id, k);
// vòng lặp qua các đối tượng
for(int i = 0; i < n; ++i)
{
const string name = ObjectName(id, i, k);
const ENUM_OBJECT type =
(ENUM_OBJECT)ObjectGetInteger(id, name, OBJPROP_TYPE);
const datetime created =
(datetime)ObjectGetInteger(id, name, OBJPROP_CREATETIME);
const string description = ObjectGetString(id, name, OBJPROP_TEXT);
const string hint = ObjectGetString(id, name, OBJPROP_TOOLTIP);
PrintFormat(" %s %s %s %s %s", EnumToString(type), name,
TimeToString(created), description, hint);
++count;
}
}
PrintFormat("%d objects found", count);
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Chúng ta nhận được các mục sau trong nhật ký.
Window 0
OBJ_VLINE ObjShow-current 2021.12.21 20:20 Latest Bar At The Moment
OBJ_VLINE abc 2021.12.21 19:25
OBJ_VLINE xyz 1970.01.01 00:00
3 objects found
2
3
4
5
Giá trị OBJPROP_CREATETIME
bằng 0 (1970.01.01 00:00) nghĩa là đối tượng không được tạo trong phiên hiện tại, mà là trước đó.