Chuỗi thời gian
Chuỗi thời gian là các mảng dữ liệu mà chỉ số của các phần tử tương ứng với các mẫu thời gian được sắp xếp. Do đặc thù ứng dụng của terminal, hầu hết thông tin mà một nhà giao dịch cần đều được cung cấp dưới dạng chuỗi thời gian. Chúng bao gồm, đặc biệt, các mảng báo giá, tick, giá trị của các chỉ báo kỹ thuật, và những thứ khác. Phần lớn các chương trình MQL cũng làm việc với dữ liệu này, và do đó một nhóm hàm trong API MQL5 đã được phân bổ cho chúng, mà chúng ta sẽ xem xét trong phần này.
Cách truy cập mảng trong MQL5 cho phép nhà phát triển thiết lập một trong hai hướng đánh chỉ số:
- Bình thường (tiến) — đánh số các phần tử đi từ đầu mảng đến cuối (từ các giá trị cũ đến mới)
- Ngược (chuỗi thời gian) — đánh số đi từ cuối mảng đến đầu (từ các giá trị mới đến cũ)
Chúng ta đã đề cập đến vấn đề này trong phần Hướng đánh chỉ số mảng như trong chuỗi thời gian.
Việc thay đổi chế độ đánh chỉ số được thực hiện bằng hàm ArraySetAsSeries
và không ảnh hưởng đến cách bố trí vật lý của mảng trong bộ nhớ. Chỉ cách truy cập các phần tử theo số thay đổi: trong đánh chỉ số bình thường, chúng ta lấy phần tử thứ i là array[i]
, trong khi ở chế độ chuỗi thời gian, công thức tương đương là array[N - i - 1]
, trong đó N là kích thước của mảng (được gọi là "tương đương" vì nhà phát triển ứng dụng không cần thực hiện phép tính lại như vậy ở mọi nơi, nó được terminal thực hiện tự động nếu chế độ đánh chỉ số chuỗi thời gian được thiết lập cho mảng). Điều này được minh họa bằng bảng sau (cho một mảng ký tự gồm 10 phần tử).
Phần tử mảng | A | B | C | D | E | F | G | H | I | J |
---|---|---|---|---|---|---|---|---|---|---|
Chỉ số thông thường | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
Chỉ số như chuỗi thời gian | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
Hãy nhớ rằng việc đánh chỉ số mảng luôn bắt đầu từ số không.
Khi nói đến mảng báo giá và dữ liệu khác được cập nhật liên tục, các phần tử mới được thêm vào cuối mảng về mặt vật lý. Tuy nhiên, từ quan điểm giao dịch, dữ liệu gần đây nhất nên được xem xét và lấy làm điểm khởi đầu khi phân tích lịch sử. Đó là lý do tại sao việc luôn có thanh hiện tại (cuối cùng) dưới chỉ số 0 và đếm các thanh trước đó từ nó về quá khứ là tiện lợi. Do đó, chúng ta có đánh chỉ số chuỗi thời gian.
Theo mặc định, các mảng được đánh chỉ số từ trái sang phải. Nếu tưởng tượng rằng một mảng như vậy được hiển thị trên biểu đồ MetaTrader 5 tiêu chuẩn, thì về mặt trực quan, phần tử có chỉ số 0 sẽ ở vị trí cực trái và phần tử cuối cùng ở vị trí cực phải. Trong chuỗi thời gian với đánh chỉ số ngược, phần tử thứ 0 tương ứng với vị trí cực phải, và phần tử cuối cùng tương ứng với vị trí cực trái. Vì chuỗi thời gian lưu trữ lịch sử dữ liệu giá của các công cụ tài chính liên quan đến thời gian, dữ liệu gần đây nhất trong chúng luôn ở bên phải của các dữ liệu cũ.
Phần tử có chỉ số không trong mảng chuỗi thời gian chứa thông tin về báo giá mới nhất của ký hiệu. Thanh số không thường chưa hoàn chỉnh vì nó tiếp tục được hình thành.
Một đặc điểm khác của chuỗi thời gian báo giá là chu kỳ của nó, tức là khoảng thời gian giữa các giá trị liền kề. Chu kỳ này còn được gọi là "khung thời gian" và có thể được diễn đạt chính xác hơn. Khung thời gian là khoảng thời gian mà một thanh báo giá được hình thành, và thời điểm bắt đầu và kết thúc của nó được căn chỉnh trong thời gian tuyệt đối với cùng một bước. Ví dụ, trong khung thời gian "1 giờ" (H1), các thanh bắt đầu chính xác vào phút 0 của mỗi giờ trong ngày. Điểm bắt đầu của mỗi chu kỳ như vậy được bao gồm trong thanh hiện tại, và điểm kết thúc thuộc về thanh tiếp theo.
Chương Ký hiệu và khung thời gian cung cấp danh sách đầy đủ các khung thời gian tiêu chuẩn.
Trong khuôn khổ khái niệm chuỗi thời gian, thông thường, các bộ đệm của chỉ báo kỹ thuật cũng hoạt động, nhưng chúng ta sẽ nghiên cứu các đặc điểm của chúng sau.
Nếu cần, trong bất kỳ chương trình MQL nào, bạn có thể yêu cầu giá trị của chuỗi thời gian cho bất kỳ ký hiệu và khung thời gian nào, cũng như giá trị của các chỉ báo được tính toán cho bất kỳ ký hiệu và khung thời gian nào. Dữ liệu này được lấy bằng cách sử dụng hàm Copy, trong đó có một số hàm đọc mảng giá của các loại khác nhau riêng biệt (ví dụ, Open
, High
, Low
, Close
) hoặc mảng cấu trúc MqlRates
chứa tất cả các đặc điểm của mỗi thanh.
Thanh và Tick
Ngoài các thanh với báo giá, MetaTrader 5 cung cấp cho người dùng và chương trình MQL khả năng phân tích tick, là những thay đổi giá cơ bản, dựa trên đó các thanh được xây dựng. Mỗi tick chứa thời gian chính xác đến mili giây, nhiều loại giá (
Bid
,Ask
,Last
), và các cờ mô tả bản chất của sự thay đổi, cũng như khối lượng giao dịch của giao dịch. Chúng ta sẽ nghiên cứu cấu trúc tương ứngMqlTick
sau một chút, trong chương Làm việc với mảng tick thực.Tùy thuộc vào loại công cụ giao dịch, các thanh có thể được xây dựng dựa trên giá
Bid
hoặcLast
. Đặc biệt, giáLast
có sẵn cho các công cụ giao dịch trên sàn, cũng phát sóng giá Độ sâu Thị trường. Đối với các công cụ không giao dịch trên sàn như Forex hoặc CFD, giáBid
được sử dụng.Các khoảng thời gian không có thay đổi giá không tạo ra thanh. Đây là cách giá được trình bày trong MetaTrader 5. Ví dụ, nếu khung thời gian là 1 ngày (D1), thì một vài thanh cho cuối tuần thường vắng mặt, và thứ Hai ngay lập tức theo sau thứ Sáu.
Một thanh báo giá xuất hiện nếu ít nhất một tick đã xảy ra trong khoảng thời gian tương ứng. Đồng thời, thời gian mở thanh luôn được căn chỉnh chính xác với ranh giới chu kỳ, ngay cả khi tick đầu tiên đến muộn hơn (như thường xảy ra). Ví dụ, thanh M1 đầu tiên của ngày có thể được hình thành lúc 00:05 nếu không có tick nào trong 4 phút sau nửa đêm, và sau đó thay đổi giá xảy ra lúc 00:05:15 (tức là vào giây thứ 15 của phút thứ năm). Do đó, một tick được bao gồm trong một thanh cụ thể dựa trên tỷ lệ dấu thời gian sau: T_open <= T_tick < T_open + P, trong đó T_open là thời gian mở thanh, T_tick là thời gian tick, T_open + P là thời gian mở của thanh tiềm năng tiếp theo sau chu kỳ P (thanh "tiềm năng" được gọi như vậy vì sự hiện diện của nó phụ thuộc vào các tick khác).