CopyRates
Lấy chuỗi lịch sử của cấu trúc MqlRates của biểu tượng-kỳ được chỉ định với số lượng xác định vào một ma trận hoặc vector. Các phần tử được đếm ngược từ hiện tại về quá khứ, điều này có nghĩa là vị trí bắt đầu bằng 0 là thanh hiện tại.
Dữ liệu được sao chép sao cho phần tử lâu đời nhất được đặt ở đầu ma trận/vector. Có ba tùy chọn hàm.
Truy cập theo vị trí ban đầu và số lượng phần tử yêu cầu
bool matrix::CopyRates(
string symbol, // tên biểu tượng
ENUM_TIMEFRAMES period, // kỳ
ulong rates_mask, // tổ hợp các cờ để chỉ định chuỗi được yêu cầu
ulong start, // chỉ số của thanh ban đầu để bắt đầu sao chép
ulong count // số lượng cần sao chép
);
2
3
4
5
6
7
Truy cập theo ngày bắt đầu và số lượng phần tử yêu cầu
bool matrix::CopyRates(
string symbol, // tên biểu tượng
ENUM_TIMEFRAMES period, // kỳ
ulong rates_mask, // tổ hợp các cờ để chỉ định chuỗi được yêu cầu
datetime from, // ngày bắt đầu
ulong count // số lượng cần sao chép
);
2
3
4
5
6
7
Truy cập theo ngày bắt đầu và ngày kết thúc của khoảng thời gian yêu cầu
bool matrix::CopyRates(
string symbol, // tên biểu tượng
ENUM_TIMEFRAMES period, // kỳ
ulong rates_mask, // tổ hợp các cờ để chỉ định chuỗi được yêu cầu
datetime from, // ngày bắt đầu
datetime to // ngày kết thúc
);
2
3
4
5
6
7
Phương thức Vector
Truy cập theo vị trí ban đầu và số lượng phần tử yêu cầu
bool vector::CopyRates(
string symbol, // tên biểu tượng
ENUM_TIMEFRAMES period, // kỳ
ulong rates_mask, // tổ hợp các cờ để chỉ định chuỗi được yêu cầu
ulong start, // chỉ số của thanh ban đầu để bắt đầu sao chép
ulong count // số lượng cần sao chép
);
2
3
4
5
6
7
Truy cập theo ngày bắt đầu và số lượng phần tử yêu cầu
bool vector::CopyRates(
string symbol, // tên biểu tượng
ENUM_TIMEFRAMES period, // kỳ
ulong rates_mask, // tổ hợp các cờ để chỉ định chuỗi được yêu cầu
datetime from, // ngày bắt đầu
ulong count // số lượng cần sao chép
);
2
3
4
5
6
7
Truy cập theo ngày bắt đầu và ngày kết thúc của khoảng thời gian yêu cầu
bool vector::CopyRates(
string symbol, // tên biểu tượng
ENUM_TIMEFRAMES period, // kỳ
ulong rates_mask, // tổ hợp các cờ để chỉ định chuỗi được yêu cầu
datetime from, // ngày bắt đầu
datetime to // ngày kết thúc
);
2
3
4
5
6
7
Tham số
symbol
[in] Biểu tượng.
period
[in] Kỳ.
rates_mask
[in] Tổ hợp các cờ liệt kê ENUM_COPY_RATES chỉ định loại chuỗi được yêu cầu. Khi sao chép vào vector, chỉ một giá trị từ liệt kê ENUM_COPY_RATES có thể được chỉ định, nếu không sẽ xảy ra lỗi.
start
[in] Chỉ số phần tử đầu tiên được sao chép.
count
[in] Số lượng phần tử được sao chép.
from
[in] Thời gian thanh tương ứng với phần tử đầu tiên.
to
[in] Thời gian thanh tương ứng với phần tử cuối cùng.
Giá trị trả về
Trả về true
nếu thành công, nếu không trả về false
trong trường hợp xảy ra lỗi.
Ghi chú
Nếu khoảng dữ liệu được yêu cầu hoàn toàn nằm ngoài dữ liệu có sẵn trên máy chủ, thì hàm trả về false
. Nếu dữ liệu ngoài TERMINAL_MAXBARS (số lượng thanh tối đa trên biểu đồ) được yêu cầu, hàm cũng trả về false
.
Khi yêu cầu dữ liệu từ EA hoặc script, tải xuống từ máy chủ được khởi tạo nếu terminal không có dữ liệu phù hợp cục bộ, hoặc quá trình xây dựng chuỗi thời gian cần thiết bắt đầu nếu dữ liệu có thể được xây dựng từ lịch sử cục bộ nhưng chưa sẵn sàng. Hàm trả về số lượng sẽ sẵn sàng khi hết thời gian chờ, tuy nhiên việc tải lịch sử vẫn tiếp tục, và hàm trả về nhiều dữ liệu hơn trong lần yêu cầu tương tự tiếp theo.
Khi yêu cầu dữ liệu theo ngày bắt đầu và số lượng mục yêu cầu, chỉ dữ liệu có ngày nhỏ hơn (trước) hoặc bằng ngày được chỉ định mới được trả về. Khoảng thời gian được đặt và xem xét đến từng giây. Nói cách khác, ngày mở của bất kỳ thanh nào mà giá trị được trả về (khối lượng, chênh lệch, Open, High, Low, Close hoặc Time) luôn bằng hoặc nhỏ hơn ngày được chỉ định.
Khi yêu cầu dữ liệu trong một khoảng ngày nhất định, chỉ dữ liệu nằm trong khoảng được yêu cầu mới được trả về. Khoảng thời gian được đặt và xem xét đến từng giây. Nói cách khác, thời gian mở của bất kỳ thanh nào mà giá trị được trả về (khối lượng, chênh lệch, giá trị bộ đệm chỉ báo, Open, High, Low, Close hoặc Time) luôn nằm trong khoảng được yêu cầu.
Ví dụ, nếu ngày hiện tại trong tuần là thứ Bảy, hàm trả về 0 khi cố gắng sao chép dữ liệu trên khung thời gian hàng tuần bằng cách đặt start_time=Last_Tuesday
và stop_time=Last_Friday
vì thời gian mở trên khung thời gian hàng tuần luôn rơi vào Chủ nhật, nhưng không có thanh hàng tuần nào nằm trong khoảng được chỉ định.
Nếu bạn cần lấy giá trị tương ứng với thanh chưa hoàn chỉnh hiện tại, thì bạn có thể sử dụng dạng gọi đầu tiên với start_pos
=0 và count
=1.
ENUM_COPY_RATES
Liệt kê ENUM_COPY_RATES chứa các cờ để chỉ định loại dữ liệu được truyền vào ma trận hoặc mảng. Tổ hợp cờ cho phép lấy nhiều chuỗi từ lịch sử trong một yêu cầu. Thứ tự các hàng trong ma trận sẽ tương ứng với thứ tự các giá trị trong liệt kê ENUM_COPY_RATES. Nói cách khác, hàng chứa dữ liệu High luôn cao hơn hàng chứa dữ liệu Low trong ma trận.
ID | Giá trị | Mô tả |
---|---|---|
COPY_RATES_OPEN | 1 | Chuỗi giá Open |
COPY_RATES_HIGH | 2 | Chuỗi giá High |
COPY_RATES_LOW | 4 | Chuỗi giá Low |
COPY_RATES_CLOSE | 8 | Chuỗi giá Close |
COPY_RATES_TIME | 16 | Chuỗi thời gian (thời gian mở thanh) |
Việc lấy thời gian dưới dạng float của vector và ma trận (vectord và matrixf) gây ra mất mát khoảng ~100 giây vì độ chính xác của float bị hạn chế nghiêm trọng và các số nguyên lớn hơn 1<<24 không thể được biểu diễn chính xác trong float. | ||
COPY_RATES_VOLUME_TICK | 32 | Khối lượng Tick |
COPY_RATES_VOLUME_REAL | 64 | Khối lượng Giao dịch |
COPY_RATES_SPREAD | 128 | Chênh lệch |
Tổ hợp | ||
COPY_RATES_OHLC | 15 | Chuỗi Open, High, Low và Close |
COPY_RATES_OHLCT | 31 | Chuỗi Open, High, Low, Close và Time |
Sắp xếp dữ liệu | ||
COPY_RATES_VERTICAL | 32768 | Chuỗi được sao chép vào ma trận theo trục dọc. Giá trị chuỗi nhận được sẽ được sắp xếp dọc trong ma trận, tức là dữ liệu lâu đời nhất sẽ ở hàng đầu tiên, trong khi dữ liệu gần đây nhất sẽ ở hàng cuối cùng của ma trận. Với sao chép mặc định, chuỗi được thêm vào ma trận theo trục ngang. Cờ này chỉ áp dụng khi sao chép vào ma trận. |
Ví dụ:
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//--- lấy báo giá vào ma trận
matrix matrix_rates;
if(matrix_rates.CopyRates(Symbol(), PERIOD_CURRENT, COPY_RATES_OHLCT, 1, 10))
Print("matrix rates: \n", matrix_rates);
else
Print("matrix_rates.CopyRates failed. Error ", GetLastError());
//--- kiểm tra
MqlRates mql_rates[];
if(CopyRates(Symbol(), PERIOD_CURRENT, 1, 10, mql_rates)>0)
{
Print("mql_rates array:");
ArrayPrint(mql_rates);
}
else
Print("CopyRates(Symbol(), PERIOD_CURRENT,1, 10, mql_rates). Error ", GetLastError());
//--- lấy báo giá vào vector = gọi không hợp lệ
vector vector_rates;
if(vector_rates.CopyRates(Symbol(), PERIOD_CURRENT, COPY_RATES_OHLC, 1, 15))
Print("vector_rates COPY_RATES_OHLC: \n", vector_rates);
else
Print("vector_rates.CopyRates COPY_RATES_OHLC failed. Error ", GetLastError());
//--- lấy giá đóng cửa vào vector
if(vector_rates.CopyRates(Symbol(), PERIOD_CURRENT, COPY_RATES_CLOSE, 1, 15))
Print("vector_rates COPY_RATES_CLOSE: \n", vector_rates);
else
Print("vector_rates.CopyRates failed. Error ", GetLastError());
};
/*
matrix rates:
[[0.99686,0.99638,0.99588,0.99441,0.99464,0.99594,0.99698,0.99758,0.99581,0.9952800000000001]
[0.99708,0.99643,0.99591,0.9955000000000001,0.99652,0.99795,0.99865,0.99764,0.99604,0.9957]
[0.9961100000000001,0.99491,0.99426,0.99441,0.99448,0.99494,0.9964499999999999,0.99472,0.9936,0.9922]
[0.99641,0.99588,0.99441,0.99464,0.99594,0.99697,0.99758,0.99581,0.9952800000000001,0.99259]
[1662436800,1662440400,1662444000,1662447600,1662451200,1662454800,1662458400,1662462000,1662465600,1662469200]]
mql_rates array:
[time] [open] [high] [low] [close] [tick_volume] [spread] [real_volume]
[0] 2022.09.06 04:00:00 0.99686 0.99708 0.99611 0.99641 4463 0 0
[1] 2022.09.06 05:00:00 0.99638 0.99643 0.99491 0.99588 4519 0 0
[2] 2022.09.06 06:00:00 0.99588 0.99591 0.99426 0.99441 3060 0 0
[3] 2022.09.06 07:00:00 0.99441 0.99550 0.99441 0.99464 3867 0 0
[4] 2022.09.06 08:00:00 0.99464 0.99652 0.99448 0.99594 5280 0 0
[5] 2022.09.06 09:00:00 0.99594 0.99795 0.99494 0.99697 7227 0 0
[6] 2022.09.06 10:00:00 0.99698 0.99865 0.99645 0.99758 10130 0 0
[7] 2022.09.06 11:00:00 0.99758 0.99764 0.99472 0.99581 7012 0 0
[8] 2022.09.06 12:00:00 0.99581 0.99604 0.99360 0.99528 6166 0 0
[9] 2022.09.06 13:00:00 0.99528 0.99570 0.99220 0.99259 6950 0 0
vector_rates.CopyRates COPY_RATES_OHLC failed. Error 4003
vector_rates COPY_RATES_CLOSE:
[0.9931,0.99293,0.99417,0.99504,0.9968399999999999,0.99641,0.99588,0.99441,0.99464,0.99594,0.99697,0.99758,0.99581,0.9952800000000001,0.99259]
*/
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
Xem thêm