Thông tin thị trường hiện tại (tick)
Trong phần Lấy tick cuối cùng của một ký hiệu, chúng ta đã thấy hàm SymbolInfoTick
, cung cấp thông tin đầy đủ về tick cuối cùng (sự kiện thay đổi giá) dưới dạng cấu trúc MqlTick
. Nếu cần, chương trình MQL có thể yêu cầu riêng lẻ các giá trị giá và khối lượng tương ứng với các trường của cấu trúc này. Tất cả chúng được biểu thị bằng các thuộc tính thuộc các loại khác nhau, là một phần của các liệt kê ENUM_SYMBOL_INFO_INTEGER
và ENUM_SYMBOL_INFO_DOUBLE
.
Định danh | Mô tả | Loại thuộc tính |
---|---|---|
SYMBOL_TIME | Thời gian báo giá cuối cùng | datetime |
SYMBOL_BID | Giá Bid; đề nghị bán tốt nhất | double |
SYMBOL_ASK | Giá Ask; đề nghị mua tốt nhất | double |
SYMBOL_LAST | Giá cuối cùng; giá của giao dịch cuối cùng | double |
SYMBOL_VOLUME | Khối lượng của giao dịch cuối cùng | long |
SYMBOL_TIME_MSC | Thời gian báo giá cuối cùng tính bằng mili giây kể từ 1970.01.01 | long |
SYMBOL_VOLUME_REAL | Khối lượng của giao dịch cuối cùng với độ chính xác cao hơn | double |
Lưu ý rằng mã cho hai thuộc tính liên quan đến khối lượng, SYMBOL_VOLUME
và SYMBOL_VOLUME_REAL
, là giống nhau trong cả hai liệt kê. Đây là trường hợp duy nhất mà các ID phần tử của các liệt kê khác nhau trùng lặp. Điều này là do chúng trả về cùng một thuộc tính tick, nhưng với độ chính xác biểu diễn khác nhau.
Không giống như cấu trúc, các thuộc tính không cung cấp một tương tự cho trường uint flags
, cho biết loại thay đổi nào trên thị trường đã gây ra việc tạo tick. Trường này chỉ có ý nghĩa trong một cấu trúc.
Hãy thử yêu cầu các thuộc tính tick riêng lẻ và so sánh chúng với kết quả của lệnh gọi SymbolInfoTick
. Trong một thị trường nhanh, có khả năng kết quả sẽ khác nhau. Một tick mới (hoặc thậm chí nhiều tick) có thể xuất hiện giữa các lần gọi hàm.
void OnStart()
{
PRTF(TimeToString(SymbolInfoInteger(_Symbol, SYMBOL_TIME), TIME_DATE | TIME_SECONDS));
PRTF(SymbolInfoDouble(_Symbol, SYMBOL_BID));
PRTF(SymbolInfoDouble(_Symbol, SYMBOL_ASK));
PRTF(SymbolInfoDouble(_Symbol, SYMBOL_LAST));
PRTF(SymbolInfoInteger(_Symbol, SYMBOL_VOLUME));
PRTF(SymbolInfoInteger(_Symbol, SYMBOL_TIME_MSC));
PRTF(SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_REAL));
MqlTick tick[1];
SymbolInfoTick(_Symbol, tick[0]);
ArrayPrint(tick);
}
2
3
4
5
6
7
8
9
10
11
12
13
14
Dễ dàng xác minh rằng trong một trường hợp cụ thể, thông tin đã trùng khớp.
TimeToString(SymbolInfoInteger(_Symbol,SYMBOL_TIME),TIME_DATE|TIME_SECONDS)
=2022.01.25 13:52:51 / ok
SymbolInfoDouble(_Symbol,SYMBOL_BID)=1838.44 / ok
SymbolInfoDouble(_Symbol,SYMBOL_ASK)=1838.49 / ok
SymbolInfoDouble(_Symbol,SYMBOL_LAST)=0.0 / ok
SymbolInfoInteger(_Symbol,SYMBOL_VOLUME)=0 / ok
SymbolInfoInteger(_Symbol,SYMBOL_TIME_MSC)=1643118771166 / ok
SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_REAL)=0.0 / ok
[time] [bid] [ask] [last] [volume] [time_msc] [flags] [volume_real]
[0] 2022.01.25 13:52:51 1838.44 1838.49 0.00 0 1643118771166 6 0.00
2
3
4
5
6
7
8
9
10