Di chuyển đối tượng
Để di chuyển các đối tượng trong tọa độ thời gian/giá, bạn có thể sử dụng không chỉ các hàm ObjectSet
để thay đổi thuộc tính mà còn cả hàm đặc biệt ObjectMove
, hàm này thay đổi tọa độ của điểm neo được chỉ định của đối tượng.
bool ObjectMove(long chartId, const string name, int index, datetime time, double price)
Tham số chartId
đặt ID biểu đồ (0 là biểu đồ hiện tại). Tên của đối tượng được truyền trong tham số name
. Chỉ số điểm neo và tọa độ được chỉ định lần lượt trong các tham số index
, time
và price
.
Hàm sử dụng lệnh gọi không đồng bộ, tức là nó gửi một lệnh đến hàng đợi sự kiện của biểu đồ và không chờ đợi việc di chuyển thực sự.
Hàm trả về dấu hiệu liệu lệnh đã được đưa vào hàng đợi thành công hay không (trong trường hợp này, kết quả là true
). Vị trí thực tế của đối tượng nên được tìm hiểu bằng cách gọi các hàm ObjectGet
.
Trong chỉ báo ObjectHighLowFibo.mq5
, chúng ta sửa đổi hàm DrawFibo
để kích hoạt ObjectMove
. Thay vì hai lệnh gọi hàm ObjectSet
trong vòng lặp qua các điểm neo, giờ đây chúng ta có một lệnh gọi ObjectMove
:
bool DrawFibo(const string name, const datetime &t[], const double &p[],
const color clr)
{
...
for(int i = 0; i < ArraySize(t); ++i)
{
// trước đây:
// ObjectSetInteger(0, name, OBJPROP_TIME, i, t[i]);
// ObjectSetDouble(0, name, OBJPROP_PRICE, i, p[i]);
// giờ thành:
ObjectMove(0, name, i, t[i], p[i]);
}
...
}
2
3
4
5
6
7
8
9
10
11
12
13
14
Việc áp dụng hàm ObjectMove
có ý nghĩa khi cả hai tọa độ của điểm neo đều thay đổi. Trong một số trường hợp, chỉ một tọa độ có hiệu lực (ví dụ, trong các kênh độ lệch chuẩn và hồi quy tuyến tính tại các điểm neo, chỉ ngày/giờ bắt đầu và kết thúc là quan trọng, và các kênh tự động tính toán giá trị giá tại các điểm này). Trong những trường hợp như vậy, một lệnh gọi duy nhất của hàm ObjectSet
sẽ phù hợp hơn so với ObjectMove
.