Yêu cầu riêng lẻ cho các mảng giá, khối lượng, chênh lệch giá và thời gian
Thay vì truy vấn tất cả các đặc điểm mã hóa dưới dạng mảng MqlRates
, bạn có thể chỉ đọc dữ liệu của một trường cụ thể (giá, khối lượng, chênh lệch giá hoặc thời gian) vào một mảng riêng biệt. Để thực hiện điều này, một số hàm được định nghĩa, hoạt động dựa trên các nguyên tắc chung đã được thảo luận trong phần Tổng quan về các hàm Copy để lấy mảng báo giá.
Sơ đồ sau kết hợp mô tả của tất cả các nguyên mẫu.
Sơ đồ nguyên mẫu của các hàm Copy
Script SeriesRates.mq5
sử dụng các hàm sao chép giá OHLC để so sánh chúng với kết quả của lời gọi hàm CopyRates
.
void OnStart()
{
const int N = 10;
MqlRates rates[];
// yêu cầu và hiển thị tất cả thông tin về N thanh từ mảng MqlRates
PRTF(CopyRates("EURUSD", PERIOD_D1, D'2021.10.01', N, rates));
ArrayPrint(rates);
// bây giờ yêu cầu các giá OHLC riêng lẻ
double open[], high[], low[], close[];
PRTF(CopyOpen("EURUSD", PERIOD_D1, D'2021.10.01', N, open));
PRTF(CopyHigh("EURUSD", PERIOD_D1, D'2021.10.01', N, high));
PRTF(CopyLow("EURUSD", PERIOD_D1, D'2021.10.01', N, low));
PRTF(CopyClose("EURUSD", PERIOD_D1, D'2021.10.01', N, close));
// so sánh các giá thu được bằng các phương pháp khác nhau
for(int i = 0; i < N; ++i)
{
if(rates[i].open != open[i]
|| rates[i].high != high[i]
|| rates[i].low != low[i]
|| rates[i].close != close[i])
{
// chúng ta không nên ở đây
Print("Data mismatch at ", i);
return;
}
}
Print("Copied OHLC arrays match MqlRates array"); // thành công: có sự khớp
}
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
32
Sau khi chạy script, chúng ta nhận được các mục sau trong nhật ký.
CopyRates(EURUSD,PERIOD_D1,D'2021.10.01',N,rates)=10 / ok
[time] [open] [high] [low] [close] [tick_volume] [spread] [real_volume]
[0] 2021.09.20 00:00:00 1.17272 1.17363 1.17004 1.17257 58444 0 0
[1] 2021.09.21 00:00:00 1.17248 1.17486 1.17149 1.17252 58514 0 0
[2] 2021.09.22 00:00:00 1.17240 1.17555 1.16843 1.16866 72571 0 0
[3] 2021.09.23 00:00:00 1.16860 1.17501 1.16835 1.17381 68536 0 0
[4] 2021.09.24 00:00:00 1.17379 1.17476 1.17007 1.17206 51401 0 0
[5] 2021.09.27 00:00:00 1.17255 1.17255 1.16848 1.16952 57807 0 0
[6] 2021.09.28 00:00:00 1.16940 1.17032 1.16682 1.16826 64793 0 0
[7] 2021.09.29 00:00:00 1.16825 1.16901 1.15894 1.15969 68964 0 0
[8] 2021.09.30 00:00:00 1.15963 1.16097 1.15626 1.15769 68517 0 0
[9] 2021.10.01 00:00:00 1.15740 1.16075 1.15630 1.15927 66777 0 0
CopyOpen(EURUSD,PERIOD_D1,D'2021.10.01',N,open)=10 / ok
CopyHigh(EURUSD,PERIOD_D1,D'2021.10.01',N,high)=10 / ok
CopyLow(EURUSD,PERIOD_D1,D'2021.10.01',N,low)=10 / ok
CopyClose(EURUSD,PERIOD_D1,D'2021.10.01',N,close)=10 / ok
Copied OHLC arrays match MqlRates array
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Hãy nhớ rằng khối lượng tick trong trường tick_volume
là một bộ đếm tick đơn giản cho một khoảng thời gian. Khối lượng giao dịch trong trường real_volume
bằng 0 đối với các công cụ không phải giao dịch sàn (cũng như đối với EURUSD trong trường hợp này).
Một ví dụ khác về việc sử dụng hàm CopyTime
đã được cung cấp trong script SeriesCopy.mq5
trong phần Tổng quan về các hàm Copy để lấy mảng báo giá.