MQL Wizard và bản thảo chương trình
Ở đây chúng ta sẽ xem xét chương trình MQL đơn giản nhất mà thực ra không làm gì cả. Nó nhằm mục đích giới thiệu quy trình viết mã nguồn trong trình soạn thảo, biên dịch và khởi chạy mã nguồn trong thiết bị đầu cuối. Thực hiện các bước dưới đây một cách độc lập, bạn sẽ đảm bảo rằng lập trình có sẵn cho người dùng thông thường và bắt đầu thích ứng với môi trường phát triển tích hợp của các chương trình MQL5. Nó sẽ luôn cần thiết để hợp nhất tài liệu được đề cập.
Các chương trình MQL5 đơn giản nhất là các tập lệnh (scripts
). Do đó, đây là một tập lệnh mà chúng ta sẽ thử và tạo. Với mục đích này, hãy khởi động MQL5 Wizard (File -> New
). Trong bước đầu tiên, chúng ta sẽ chọn Script
trong danh sách các loại và nhấn Next :
Ở bước thứ hai, chúng ta sẽ giới thiệu tên tập lệnh trong trường Name, sau khi thêm nó vào sau thư mục mặc định được đề cập ở trên và một dấu gạch chéo ngược: "Scripts\"
. Ví dụ, hãy đặt tên cho tập lệnh là "Hello" (tức là trường Tên sẽ chứa dòng: "Scripts\Hello"
) và không thay đổi bất kỳ điều gì khác, hãy nhấn Finish
.
Kết quả là, Wizard sẽ tạo một tệp có tên Hello.mq5
và mở tệp đó để chỉnh sửa. Tệp này nằm trong thư mục MQL5/Scripts
(vị trí chuẩn cho các tập lệnh) vì chúng ta đã sử dụng thư mục mặc định; tuy nhiên, chúng ta có thể thêm bất kỳ thư mục con nào hoặc thậm chí là một hệ thống phân cấp thư mục con. Ví dụ, nếu chúng ta viết "Scripts\Exercise\Hello
" trong trường Name tại Wizard Step 1, thì thư mục con Exercise
sẽ được tạo tự động trong thư mục Scripts
và tệp Hello.mq5
sẽ nằm trong thư mục con đó.
Tất cả các ví dụ từ trang web nàysẽ nằm trong các thư mục MQL5Book
bên trong các danh mục được phân bổ cho các chương trình MQL có các loại liên quan. Điều này là cần thiết để tạo điều kiện cài đặt các ví dụ vào bản sao làm việc của thiết bị đầu cuối và loại trừ mọi xung đột tên với các chương trình MQL khác mà bạn đã cài đặt. Ví dụ, tệp Hello.mq5
được cung cấp như một phần của trang web nàynằm trong MQL5\Scripts\MQL5Book\p1\
, trong đó p1 có nghĩa là Phần 1 mà ví dụ này liên quan đến.
Mẫu kết quả của tập lệnh Hello.mq5 chứa nội dung văn bản sau:
//+------------------------------------------------------------------+
//| Hello.mq5 |
//| Copyright 2021, MetaQuotes Ltd. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Ltd."
#property link "https://www.mql5.com"
#property version "1.00"
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
}
//+------------------------------------------------------------------+
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Đây chính là đoạn mã được hiển thị trong các ảnh chụp màn hình trước của MetaEditor và MetaTrader 5.
Tất cả các chuỗi bắt đầu bằng "//
" đều là các chú thích và không ảnh hưởng đến mục đích của chương trình. Chúng không được trình biên dịch xử lý cũng như không được thiết bị đầu cuối thực thi. Chúng chỉ được sử dụng để trao đổi thông tin giải thích giữa các nhà phát triển hoặc để nhấn mạnh trực quan các phần mã nhằm tăng khả năng đọc văn bản. Ví dụ, trong mẫu này, tệp bắt đầu bằng một khối chứa chú thích, trong đó tên tập lệnh và bản quyền của tác giả được mong đợi sẽ được chỉ định. Khối chú thích thứ hai là tiêu đề cho chức năng chính của tập lệnh — được đề cập chi tiết hơn bên dưới. Cuối cùng, chuỗi chú thích cuối cùng nhấn mạnh trực quan phần kết thúc của tệp.
Ba chuỗi bắt đầu bằng một chỉ thị đặc biệt, #property
, cung cấp cho trình biên dịch một số thuộc tính mà nó xây dựng vào chương trình theo cách đặc biệt. Trong trường hợp của chúng ta, chúng không quan trọng cho đến nay và thậm chí có thể bị xóa. Các thư mục cụ thể có sẵn cho từng loại chương trình MQL — chúng ta sẽ biết về chúng ngay khi chúng ta tiến hành tìm hiểu các loại chương trình cụ thể.
Phần chính của tập lệnh, nơi chúng ta sẽ mô tả bản chất của các hành động chương trình, được biểu diễn bằng hàm OnStart
. Ở đây chúng ta phải tìm hiểu các khái niệm về 'code block - khối mã' và 'function - hàm'.