Kiểu dữ liệu tích hợp
Kiểu dữ liệu là một khái niệm cơ bản mà chúng ta thoải mái sử dụng trong cuộc sống hàng ngày mà thậm chí không cần nghĩ đến sự tồn tại của nó. Nó được ngụ ý dựa trên ý nghĩa của thông tin chúng ta trao đổi và trên các quy trình xử lý được chấp nhận cho nó. Ví dụ, kiểm soát tài sản hộ gia đình, chúng ta cộng và trừ các con số biểu thị doanh thu và chi phí của mình. Ở đây, 'con số' mô tả một kiểu, mà chúng ta nhận ra đầy đủ các giá trị có thể có và các phép toán số học trên chúng. Trong bối cảnh giao dịch, có một giá trị tương tự, số dư tài khoản hiện tại, trong MetaTrader 5; do đó, MQL5 cung cấp một cơ chế để tạo và thao tác các con số.
Không giống như số, thông tin văn bản, chẳng hạn như tên của một công cụ giao dịch, tuân thủ các quy tắc khác. Ở đây, chúng ta có thể xây dựng một từ gồm các chữ cái hoặc một câu gồm các từ, nhưng không thể tính tổng lũy tiến hoặc trung bình số học của nhiều dòng. Do đó, 'dòng' hoặc 'chuỗi' là một kiểu dữ liệu khác, không phải là kiểu số.
Cùng với mục đích và một tập hợp các hoạt động điển hình có ý nghĩa đối với từng loại, còn có một điều quan trọng khác khiến các loại khác nhau. Đó là kích thước của chúng. Ví dụ, số tuần không được vượt quá 52 trong một năm, trong khi số giây đã trôi qua kể từ đầu năm biểu thị một hình dạng thiên văn (astronomical shape?). Do đó, để lưu trữ và xử lý hiệu quả các giá trị khác nhau như vậy trong bộ nhớ máy tính, có thể phân tách các phân đoạn có kích thước khác nhau. Điều này dẫn chúng ta đến việc hiểu rằng, trên thực tế, khái niệm tổng quát về một 'con số' có thể ẩn chứa các loại khác nhau.
MQL5 cho phép sử dụng một số kiểu số khác nhau về cả kích thước ô nhớ được phân bổ cho chúng và một số tính năng bổ sung. Đặc biệt, một số số có thể có giá trị âm, chẳng hạn như lợi nhuận thả nổi theo pip, trong khi một số khác thì không, chẳng hạn như số tài khoản. Hơn nữa, một số giá trị không thể có phần thập phân và do đó, sẽ hiệu quả hơn về mặt chi phí khi biểu diễn chúng bằng loại 'số nguyên' chặt chẽ hơn, trái ngược với loại 'số có dấu thập phân' ngẫu nhiên. Ví dụ, số dư tài khoản hoặc giá của một công cụ giao dịch thường có giá trị có dấu thập phân. Đồng thời, số lệnh trong lịch sử hoặc, một lần nữa, số tài khoản luôn là một số nguyên.
MQL5 hỗ trợ một tập hợp các kiểu dữ liệu phổ biến tương tự như các kiểu có trong phần lớn các ngôn ngữ lập trình. Tập hợp này bao gồm các kiểu số nguyên (kích thước khác nhau), hai kiểu số thực (có dấu thập phân) có độ chính xác khác nhau, chuỗi và ký tự đơn, cũng như kiểu logic chỉ có hai giá trị có thể: true
và false
. Hơn nữa, MQL5 cung cấp các kiểu dữ liệu riêng, cụ thể hoạt động theo thời gian và màu sắc.
Để hoàn thiện hơn, chúng ta hãy lưu ý rằng MQL5 cho phép mở rộng tập hợp các kiểu, khai báo các kiểu được áp dụng trong mã, tức là cấu trúc, lớp và các thực thể khác đặc trưng của OOP; nhưng chúng ta sẽ xem xét chúng sau.
Vì kích thước của ô lưu trữ giá trị là một thuộc tính kiểu quan trọng nên chúng ta hãy tìm hiểu về phương pháp bộ nhớ.
Đơn vị nhỏ nhất của bộ nhớ máy tính là một byte. Nói cách khác, một byte là kích thước nhỏ nhất của một ô mà một chương trình có thể phân bổ cho một giá trị riêng biệt. Một byte bao gồm 8 bit, mỗi bit có thể ở hai trạng thái: Bật (1) hoặc tắt (0). Tất cả các máy tính hiện đại đều sử dụng các bit như vậy ở cấp độ thấp hơn vì biểu diễn thông tin nhị phân như vậy thuận tiện để đưa vào phần cứng (trong bộ nhớ truy cập ngẫu nhiên, trong bộ xử lý hoặc trong khi truyền dữ liệu bằng cáp mạng hoặc qua WiFi).
Việc xử lý các giá trị của các loại khác nhau được đảm bảo do các cách diễn giải khác nhau về trạng thái bit trong các ô nhớ. Trình biên dịch xử lý vấn đề này. Các lập trình viên thường không đi sâu đến mức bit; tuy nhiên, ngôn ngữ cung cấp các công cụ cho việc đó (xem Toán tử bitwise).
Có những từ dành riêng đặc biệt trong MQL5 để mô tả các kiểu dữ liệu. Chúng ta đã biết một số trong số chúng, chẳng hạn như void
,int
và string
. Danh sách đầy đủ các kiểu được đưa ra bên dưới, mỗi kiểu có tham chiếu nhanh và kích thước tính bằng byte.
Theo mục đích của chúng, chúng có thể được chia có điều kiện thành dữ liệu số và dữ liệu được mã hóa ký tự (được đánh dấu trong các cột có liên quan), cũng như các kiểu dữ liệu chuyên biệt khác, chẳng hạn như chuỗi, kiểu logic (hoặc boolean), ngày/giờ và màu sắc. Kiểu void
đứng riêng và biểu thị không có giá trị nào cả. Ngoài các kiểu vô hướng, MQL5 cung cấp các kiểu đối tượng cho các phép toán với số phức, ma trận và vectơ: phức, vectơ và ma trận. Các kiểu này được sử dụng để giải quyết nhiều vấn đề khác nhau trong đại số tuyến tính, mô hình toán học, học máy và các lĩnh vực khác. Chúng ta sẽ nghiên cứu chúng chi tiết trong Phần 4 của cuốn sách.
Kiểu | Kích thước (byte) | Số | Ký tự | Ghi chú |
---|---|---|---|---|
char | 1 | + | + | Ký tự một byte hoặc số nguyên có dấu |
uchar | 1 | + | + | Ký tự một byte hoặc số nguyên không dấu |
short | 2 | + | + | Ký tự hai byte hoặc số nguyên có dấu |
ushort | 2 | + | + | Ký tự hai byte hoặc số nguyên không dấu |
int | 4 | + | Số nguyên có dấu | |
uint | 4 | + | Số nguyên không dấu | |
long | 8 | + | Số nguyên có dấu dài | |
ulong | 8 | + | Số nguyên không dấu dài | |
float | 4 | + | Số dấu phẩy động có dấu | |
double | 8 | + | Số dấu phẩy động có dấu | |
enum | 4 | (int) | Phép liệt kê | |
datetime | 8 | (ulong) | Ngày và giờ | |
color | 4 | (uint) | Màu sắc | |
bool | 1 | (uchar) | Giá trị logic | |
string | 10+ variable | Chuỗi ký tự | ||
void | 0 | Void | ||
complex | 16 | + | Cấu trúc với hai trường kiểu kép | |
vector | chiều dài vectơ x kích thước kiểu | + | Mảng một chiều kiểu thực hoặc phức | |
matrix | hàng x cột x loại kích thước | + | Mảng hai chiều kiểu thực hoặc phức |
Tùy thuộc vào kích thước của nó, các phạm vi giá trị khác nhau có thể được lưu trữ trong kiểu số. Cùng với những điều trên, phạm vi có thể thay đổi đáng kể đối với các số nguyên và số dấu phẩy động có cùng kích thước, vì các biểu diễn bên trong khác nhau được sử dụng cho chúng. Tất cả những điều phức tạp này sẽ được xem xét trong các phần xử lý các kiểu cụ thể.
Một lập trình viên có thể tự do lựa chọn kiểu số dựa trên các giá trị dự kiến, cân nhắc về hiệu quả hoặc vì lý do kinh tế. Đặc biệt, kích thước kiểu nhỏ hơn cho phép chứa nhiều giá trị của kiểu này hơn trong bộ nhớ, trong khi số nguyên được xử lý nhanh hơn số dấu phẩy động.
Xin lưu ý rằng các kiểu số và kiểu ký tự được mã hóa một phần bị giao nhau. Điều này xảy ra vì một ký tự được lưu trữ trong bộ nhớ dưới dạng số nguyên, tức là mã trong bảng ký tự có liên quan: ANSI
cho các ký tự một byte hoặc Unicode
cho các ký tự hai byte. ANSI là một tiêu chuẩn được đặt theo tên của một viện (Viện Tiêu chuẩn Quốc gia Hoa Kỳ - American National Standards Institute), trong khi Unicode
, bạn đoán đúng rồi đấy, có nghĩa là Mã Phổ quát - Universal Code (Bộ Ký tự). Các ký tự Unicode được sử dụng trong MQL5 để tạo chuỗi (kiểu chuỗi). Các ký tự một byte thường được yêu cầu khi tích hợp các chương trình với các nguồn dữ liệu bên ngoài, chẳng hạn như các nguồn từ Internet.
Như đã đề cập ở trên, các kiểu số có thể được chia thành số nguyên và số dấu phẩy động. Hãy cùng xem xét chúng chi tiết hơn.