Đặc tính tia cho các đối tượng có đường thẳng
Trong số các đối tượng đồ họa, có một số loại mà các đường giữa các điểm neo có thể được hiển thị dưới dạng các đoạn (tức là chỉ giữa một cặp điểm) hoặc dưới dạng các đường thẳng vô tận kéo dài theo một hướng này hay hướng khác trên toàn bộ vùng hiển thị của cửa sổ. Các đối tượng như vậy bao gồm:
- Đường xu hướng
- Đường xu hướng theo góc
- Tất cả các loại kênh (kênh cách đều, độ lệch chuẩn, hồi quy, nĩa Andrews)
- Đường Gann
- Đường Fibonacci
- Kênh Fibonacci
- Mở rộng Fibonacci
Đối với chúng, bạn có thể bật riêng việc kéo dài đường sang trái hoặc phải bằng cách sử dụng thuộc tính OBJPROP_RAY_LEFT
và OBJPROP_RAY_RIGHT
tương ứng. Ngoài ra, đối với một đường thẳng đứng, bạn có thể chỉ định liệu nó nên được vẽ trên tất cả các cửa sổ phụ của biểu đồ hay chỉ trên cửa sổ hiện tại (nơi có điểm neo): thuộc tính OBJPROP_RAY
chịu trách nhiệm cho việc này. Tất cả các thuộc tính đều là kiểu boolean, nghĩa là chúng có thể được bật (true
) hoặc tắt (false
).
Định danh | Mô tả |
---|---|
OBJPROP_RAY_LEFT | Tia kéo dài sang trái |
OBJPROP_RAY_RIGHT | Tia kéo dài sang phải |
OBJPROP_RAY | Đường thẳng đứng mở rộng đến tất cả các cửa sổ biểu đồ |
Bạn có thể kiểm tra hoạt động của các tia bằng cách sử dụng script ObjectRays.mq5
. Nó tạo ra 3 kênh độ lệch chuẩn với các cài đặt tia khác nhau.
Một đối tượng cụ thể được tạo và cấu hình bởi hàm trợ giúp SetupChannel
. Thông qua các tham số của nó, độ dài kênh tính bằng thanh và chiều rộng kênh (độ lệch) được thiết lập, cũng như các tùy chọn để hiển thị tia sang trái và phải, và màu sắc.
#include "ObjectPrefix.mqh"
void SetupChannel(const int length, const double deviation = 1.0,
const bool right = false, const bool left = false,
const color clr = clrRed)
{
const string name = ObjNamePrefix + "Channel"
+ (right ? "R" : "") + (left ? "L" : "");
// NB: Điểm neo 0 phải có thời gian sớm hơn điểm neo 1,
// nếu không kênh sẽ bị thoái hóa
ObjectCreate(0, name, OBJ_STDDEVCHANNEL, 0, iTime(NULL, 0, length), 0);
ObjectSetInteger(0, name, OBJPROP_TIME, 1, iTime(NULL, 0, 0));
// độ lệch
ObjectSetDouble(0, name, OBJPROP_DEVIATION, deviation);
// màu sắc và mô tả
ObjectSetInteger(0, name, OBJPROP_COLOR, clr);
ObjectSetString(0, name, OBJPROP_TEXT, StringFormat("%2.1", deviation)
+ ((!right && !left) ? " NO RAYS" : "")
+ (right ? " RIGHT RAY" : "") + (left ? " LEFT RAY" : ""));
// thuộc tính của tia
ObjectSetInteger(0, name, OBJPROP_RAY_RIGHT, right);
ObjectSetInteger(0, name, OBJPROP_RAY_LEFT, left);
// làm sáng các đối tượng bằng cách tô sáng
// (ngoài ra, người dùng dễ xóa chúng hơn)
ObjectSetInteger(0, name, OBJPROP_SELECTABLE, true);
ObjectSetInteger(0, name, OBJPROP_SELECTED, true);
}
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
27
Trong hàm OnStart
, chúng ta gọi SetupChannel
cho 3 kênh khác nhau.
void OnStart()
{
SetupChannel(24, 1.0, true);
SetupChannel(48, 2.0, false, true, clrBlue);
SetupChannel(36, 3.0, false, false, clrGreen);
}
2
3
4
5
6
Kết quả là, chúng ta nhận được một biểu đồ có dạng như sau.
Kênh với các cài đặt thuộc tính OBJPROP_RAY_LEFT
và OBJPROP_RAY_RIGHT
khác nhau
Khi các tia được bật, có thể yêu cầu đối tượng ngoại suy giá trị thời gian và giá bằng các hàm mà chúng ta sẽ mô tả trong phần Lấy thời gian hoặc giá tại các điểm nhất định trên đường thẳng.