Các thuộc tính mô tả của ký hiệu
Nền tảng cung cấp một nhóm các thuộc tính văn bản cho các chương trình MQL mô tả các đặc điểm định tính quan trọng. Ví dụ, khi phát triển các chỉ báo hoặc chiến lược giao dịch dựa trên một rổ công cụ tài chính, có thể cần chọn các ký hiệu theo quốc gia xuất xứ, lĩnh vực kinh tế hoặc tên của tài sản cơ sở (nếu công cụ là một công cụ phái sinh).
Định danh | Mô tả |
---|---|
SYMBOL_BASIS | Tên của tài sản cơ sở cho công cụ phái sinh |
SYMBOL_CATEGORY | Tên của danh mục mà công cụ tài chính thuộc về |
SYMBOL_COUNTRY | Quốc gia mà công cụ tài chính được gán cho |
SYMBOL_SECTOR_NAME | Lĩnh vực kinh tế mà công cụ tài chính thuộc về |
SYMBOL_INDUSTRY_NAME | Ngành kinh tế hoặc loại ngành mà công cụ tài chính thuộc về |
SYMBOL_BANK | Nguồn báo giá hiện tại |
SYMBOL_DESCRIPTION | Chuỗi mô tả của ký hiệu |
SYMBOL_EXCHANGE | Tên của sàn giao dịch hoặc thị trường nơi ký hiệu được giao dịch |
SYMBOL_ISIN | Mã số định danh chứng khoán quốc tế duy nhất gồm 12 chữ số và chữ cái - ISIN (International Securities Identification Number) |
SYMBOL_PAGE | Địa chỉ trang internet chứa thông tin về ký hiệu |
SYMBOL_PATH | Đường dẫn trong cây ký hiệu |
Một trường hợp khác mà chương trình có thể áp dụng phân tích các thuộc tính này xảy ra khi tìm kiếm tỷ giá chuyển đổi từ một loại tiền tệ sang loại khác. Chúng ta đã biết cách tìm một ký hiệu với sự kết hợp đúng của đồng tiền cơ sở và đồng tiền định giá, nhưng khó khăn là có thể có nhiều ký hiệu như vậy. Việc đọc các thuộc tính như SYMBOL_SECTOR_NAME
(bạn cần tìm "Currency" hoặc từ đồng nghĩa; kiểm tra với thông số của nhà môi giới của bạn) hoặc SYMBOL_PATH
có thể giúp trong những trường hợp như vậy.
SYMBOL_PATH
chứa toàn bộ hệ thống thư mục trong danh mục ký hiệu chứa ký hiệu cụ thể: các tên thư mục được phân tách bằng dấu gạch chéo ngược (\
) giống như trong hệ thống tệp. Phần tử cuối cùng của đường dẫn là tên của chính ký hiệu.
Một số thuộc tính chuỗi có các đối tác số nguyên. Cụ thể, thay vì SYMBOL_SECTOR_NAME
, bạn có thể sử dụng thuộc tính SYMBOL_SECTOR
, trả về một thành viên liệt kê ENUM_SYMBOL_SECTOR với tất cả các lĩnh vực được hỗ trợ. Tương tự, đối với SYMBOL_INDUSTRY_NAME
, có một thuộc tính tương tự là SYMBOL_INDUSTRY
với loại liệt kê ENUM_SYMBOL_INDUSTRY.
Nếu cần, một chương trình MQL thậm chí có thể tìm màu nền được sử dụng khi hiển thị một ký hiệu trong Market Watch
bằng cách đọc thuộc tính SYMBOL_BACKGROUND_COLOR
. Điều này sẽ cho phép các chương trình tạo giao diện riêng trên biểu đồ bằng đối tượng đồ họa (hộp thoại, danh sách, v.v.), để làm cho nó thống nhất với các điều khiển terminal gốc.
Xem xét kịch bản ví dụ SymbolFilterDescription.mq5
, xuất ra bốn thuộc tính văn bản được xác định trước cho các ký hiệu Market Watch
. Thuộc tính đầu tiên là SYMBOL_DESCRIPTION
(không nhầm lẫn với tên của chính ký hiệu), và danh sách kết quả sẽ được sắp xếp theo nó. Ba thuộc tính còn lại chỉ để tham khảo: SYMBOL_SECTOR_NAME
, SYMBOL_COUNTRY
, SYMBOL_PATH
. Tất cả các giá trị được điền theo cách cụ thể cho từng nhà môi giới (có thể có sự khác biệt đối với cùng một mã).
Chúng ta chưa đề cập, nhưng lớp SymbolFilter
của chúng ta triển khai một phiên bản quá tải đặc biệt của phương thức equal
để so sánh chuỗi. Nó hỗ trợ tìm kiếm sự xuất hiện của một chuỗi con với một mẫu mà ký tự đại diện *
đại diện cho 0 hoặc nhiều ký tự bất kỳ. Ví dụ, *ian*
sẽ tìm tất cả các ký tự chứa chuỗi con "ian" (bất kỳ đâu), và *Index
sẽ chỉ tìm các chuỗi kết thúc bằng "Index".
Tính năng này giống như tìm kiếm chuỗi con trong hộp thoại Symbols
có sẵn cho người dùng. Tuy nhiên, không cần chỉ định ký tự đại diện, vì một chuỗi con luôn được tìm kiếm. Trong thuật toán có thể tìm thấy trong mã nguồn (SymbolFilter.mqh
), chúng ta để lại khả năng tìm kiếm hoặc khớp hoàn toàn (không có ký tự *
) hoặc một chuỗi con (có ít nhất một dấu sao).
So sánh có phân biệt chữ hoa chữ thường. Nếu cần, dễ dàng điều chỉnh mã để so sánh không phân biệt chữ hoa và chữ thường.
Với tính năng mới này, hãy định nghĩa một biến đầu vào cho chuỗi tìm kiếm trong mô tả của các ký hiệu. Nếu biến trống, tất cả các ký hiệu từ cửa sổ Market Watch
sẽ được hiển thị.
input string SearchPattern = "";
Tiếp theo, mọi thứ như thường lệ.
void OnStart()
{
SymbolFilter f; // đối tượng bộ lọc
string symbols[]; // mảng tên
string text[][4]; // mảng vector với dữ liệu
// các thuộc tính để đọc
ENUM_SYMBOL_INFO_STRING fields[] =
{
SYMBOL_DESCRIPTION,
SYMBOL_SECTOR_NAME,
SYMBOL_COUNTRY,
SYMBOL_PATH
};
if(SearchPattern != "")
{
f.let(SYMBOL_DESCRIPTION, SearchPattern);
}
// áp dụng bộ lọc và lấy các mảng được sắp xếp theo mô tả
f.select(true, fields, symbols, text, true);
const int n = ArraySize(symbols);
PrintFormat("===== Các trường văn bản cho các ký hiệu (%d) =====", n);
for(int i = 0; i < n; ++i)
{
Print(symbols[i] + ":");
ArrayPrint(text, 0, NULL, i, 1, 0);
}
}
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
28
29
30
31
Dưới đây là một phiên bản có thể có của danh sách (với các từ viết tắt).
===== Các trường văn bản cho các ký hiệu (16) =====
AUDUSD:
"Australian Dollar vs US Dollar" "Currency" "" "Forex\AUDUSD"
EURUSD:
"Euro vs US Dollar" "Currency" "" "Forex\EURUSD"
UK100:
"FTSE 100 Index" "Undefined" "" "Indexes\UK100"
XAUUSD:
"Gold vs US Dollar" "Commodities" "" "Metals\XAUUSD"
JAGG:
"JPMorgan U.S. Aggregate Bond ETF" "Financial"
"USA" "ETF\United States\NYSE\JPMorgan\JAGG"
NZDUSD:
"New Zealand Dollar vs US Dollar" "Currency" "" "Forex\NZDUSD"
GBPUSD:
"Pound Sterling vs US Dollar" "Currency" "" "Forex\GBPUSD"
SP500m:
"Standard & Poor's 500" "Undefined" "" "Indexes\SP500m"
FIHD:
"UBS AG FI Enhanced Global High Yield ETN" "Financial"
"USA" "ETF\United States\NYSE\UBS\FIHD"
...
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Nếu chúng ta nhập chuỗi tìm kiếm *ian*
vào biến đầu vào SearchPattern
, chúng ta nhận được kết quả sau.
===== Các trường văn bản cho các ký hiệu (3) =====
AUDUSD:
"Australian Dollar vs US Dollar" "Currency" "" "Forex\AUDUSD"
USDCAD:
"US Dollar vs Canadian Dollar" "Currency" "" "Forex\USDCAD"
USDRUB:
"US Dollar vs Russian Ruble" "Currency" "" "Forex\USDRUB"
2
3
4
5
6
7