Thuộc tính biểu tượng tùy chỉnh
Trong phần giới thiệu của chương này, chúng ta đã đề cập đến ký hiệu tùy chỉnh. Đây là các ký hiệu với báo giá được tạo trực tiếp trong terminal theo lệnh của người dùng hoặc bằng lập trình.
Ký hiệu tùy chỉnh có thể được sử dụng, ví dụ, để tạo một công cụ tổng hợp dựa trên công thức bao gồm các ký hiệu khác trong Market Watch
. Điều này có sẵn cho người dùng trực tiếp trong giao diện terminal.
Một chương trình MQL có thể triển khai các kịch bản phức tạp hơn trong MQL5, như hợp nhất các công cụ khác nhau cho các khoảng thời gian khác nhau, tạo chuỗi theo phân phối ngẫu nhiên đã cho, hoặc nhận dữ liệu (báo giá, thanh, hoặc tick) từ các nguồn bên ngoài.
Để có thể phân biệt một ký hiệu tiêu chuẩn với ký hiệu tùy chỉnh trong các thuật toán, MQL5 cung cấp thuộc tính SYMBOL_CUSTOM
, là một dấu hiệu logic cho biết một ký hiệu là tùy chỉnh.
Nếu ký hiệu có công thức, nó có thể được truy cập thông qua thuộc tính chuỗi SYMBOL_FORMULA
. Trong công thức, như bạn biết, bạn có thể sử dụng tên của các ký hiệu khác, cũng như các hàm toán học và toán tử. Dưới đây là một số ví dụ:
- Ký hiệu tổng hợp:
@ESU19/EURCAD
- Chênh lệch lịch:
Si-9.13 - Si-6.13
- Chỉ số Euro:
34.38805726 * pow(EURUSD,0.3155) * pow(EURGBP,0.3056) * pow(EURJPY,0.1891) * pow(EURCHF,0.1113) * pow(EURSEK,0.0785)
Việc chỉ định công thức rất tiện lợi cho người dùng, nhưng thường không được sử dụng từ các chương trình MQL vì chúng có thể tính toán công thức trực tiếp trong mã, với các hàm không chuẩn và với nhiều quyền kiểm soát hơn, đặc biệt là trên mỗi tick và không phải trên bộ đếm thời gian 1 lần mỗi 100ms.
Hãy kiểm tra việc làm việc với các thuộc tính trong kịch bản SymbolFilterCustom.mq5
: nó ghi lại tất cả các ký hiệu tùy chỉnh và công thức của chúng (nếu có).
input bool UseMarketWatch = false;
void OnStart()
{
SymbolFilter f; // đối tượng bộ lọc
string symbols[]; // mảng cho tên ký hiệu
string formulae[]; // mảng cho công thức
// áp dụng bộ lọc và điền mảng
f.let(SYMBOL_CUSTOM, true)
.select(UseMarketWatch, SYMBOL_FORMULA, symbols, formulae);
const int n = ArraySize(symbols);
PrintFormat("===== %s ký hiệu tùy chỉnh =====",
(UseMarketWatch ? "Market Watch" : "Tất cả có sẵn"));
PrintFormat("Tổng số ký hiệu: %d", n);
for(int i = 0; i < n; ++i)
{
Print(symbols[i], " ", formulae[i]);
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Dưới đây là kết quả với ký hiệu tùy chỉnh duy nhất được tìm thấy.
===== Tất cả ký hiệu tùy chỉnh có sẵn =====
Tổng số ký hiệu: 1
synthEURUSD SP500m/UK100
2
3