Sử dụng ngôn ngữ lập trình MQL4 | Đại học Bách Khoa Hà Nội
Sử dụng ngôn ngữ lập trình MQL4 | Đại học Bách Khoa Hà Nội. Tài liệu gồm 27 trang giúp bạn tham khảo, củng cố kiến thức và ôn tập đạt kết quả cao trong kỳ thi sắp tới. Mời bạn đọc đón xem!
Preview text:
Bài 1. Giới thiệu ngôn ngữ lập trình MQL4, ứng dụng trong giao dịch MT4
Ngày nay, máy tính đã trở thành không thể thiếu cho tất cả mọi người. Sự phát triển nhanh chóng của Internet và
hiệu suất của máy tính hiện đại đã mở ra triển vọng mới trong nhiều lĩnh vực hoạt động của con người.
Mười năm trước, thị trường tài chính chỉ dành cho các ngân hàng và cho một cộng đồng hạn chế của các chuyên gia tài
chính trên thế giới. Ngày nay, bất cứ ai cũng có thể tham gia vào thế giới của các trader chuyên nghiệp và bắt đầu kinh
doanh độc lập bất cứ lúc nào.
Hàng trăm ngàn trader trên toàn thế giới đã đánh giá cao MetaTrader 4 Client Terminal trên giá trị & và việc sử dụng
ngôn ngữ lập trình nhúng của nó. MQL4 đưa các trader lên 1 cấp độ mới về kinh doanh
Để giao dịch tự động Bây giờ, một trader có thể thực hiện ý tưởng của mình như là một chương trình ứng dụng - viết một
chỉ số tùy chỉnh, một kịch bản để thực hiện các hoạt động duy nhất, hoặc tạo ra một cố vấn chuyên gia - một hệ thống
giao dịch tự động (kinh doanh robot) mà không cần sự can thiệp của con người. Thực tế này đã được chứng minh bởi
các giải thi đấu giao dịch tự động vô địch hàng năm, trong đó hàng trăm hệ thống giao dịch tự động thi đấu liên tục trong 3 tháng đến 1 năm.
Phát triển các ứng dụng cho MetaTrader 4 Client Terminal đòi hỏi kiến thức về MQL4. Ngôn ngữ lập trình MQL4 ( Ngôn
ngữ MetaQuotes 4) là một ngôn ngữ thế hệ thứ tư. MQL4 là ngôn ngữ lập trình đầu tiên trên thị trường tài chính.
Tài liệu về ngôn ngữ có sẵn trên trang web của công ty, ngoài ra rất nhiều thông tin do cộng đồng MQL4 phát triển. Bạn
có thể liên hệ với các trader khác, hãy đọc bài viết & các mã nguồn chương trình MQL4 của họ.
Với giáo trình này chúng tôi sẽ từng bước giúp bạn thiết kế riêng các EA (chuyên gia cố vấn - Robot), Script (các kịch
bản) và Indicators (các chỉ số) theo các ý tưởng & chiến lược giao dịch của bạn. Bài 2. Ghi chú trong MQL4
Ghi chú là phần rất quan trọng trong lập trình.
Đối với các lập trình viên chuyên nghiệp thì phần ghi chú là không thể thiếu. Do code 1 phần mềm lớn thường chứa rất
nhiều các đoạn code nhỏ. Mổi đoạn, mổi hàm thực hiện 1 nhiệm vụ. Ghi chú giúp gợi nhớ về nội dung code, ngoài ra rất
hữu ích trong việc gỡ lỗi (debug) khi chạy chương trình.
Ghi chú theo hàng có dạng //
Ghi chú nhiều hàng: Mở đầu ghi chú /* và kết thức ghi chú */
Bài 3. Các biến và hằng trong MQL4
Biến số (số biến đổi) và hằng số (số không đổi) là 2 thành phần không thể thiếu trong bất cứ ngôn ngữ lập trình nào. Trong hình trên thì A, B là biến số
Kết thúc câu lệnh dấu chấm phẩy ;
Bài 4. Các kiểu dữ liệu trong MQL4
1. int (kiểu số nguyên) 2. Kiểu thập phân
3. Kiểu logic: chỉ có 1 giá trị True(đúng hoặc 1) & false (sai hoặc 0) lưu ý không phân biệt chữ Hoa / thường
bool aa = True; // Boolean variable аа has the value of true
bool B17 = TRUE; // Boolean variable B17 has the value of true
bool Hamma = 1; // Boolean variable Hamma has the value of true
bool Asd = False; // Boolean variable Asd has the value of false
bool Nol = FALSE; // Boolean variable Nol has the value of false
bool Prim = 0; // Boolean variable Prim has the value of false
4. Kiểu chuỗi ký tự: khai bao trong ngoặc kép " " kết thúc câu lệnh luôn là dấu chấm phẩy ;
5. Kiểu màu: dưới dạng RGB hoặc tên 6. Kiểu thời gian:
Bài 5. Tìm hiểu cấu trúc câu lệnh trong MQL4
Đây là ví dụ 1 câu lệnh trong MQL4 Y = 5; // cho giá trị Y = 5 X = Y - 2; // Giá trị X = 3
Day_Next= TimeDayOfWeek(Mas_Big[n][0]+60); // 1 câu lệnh 1 dòng
Go_My_Function_ind(); // 1 câu lệnh 1 dòng
a=3; b = a * x + n; i++; // Nhiều câu lệnh 1 dòng
Print(" Day= ",TimeDay(Mas_Big[s][0]), // các dòng sau vẩn trong lệnh print
" Hour=",TimeHour(Mas_Big[s][0]),
" Minute=",TimeMinute(Mas_Big[s][0]),
" Mas_Big[s][0]= ",Mas_Big[s][0],
" Mas_Big[s][1]= ",Mas_Big[s][1]);
Tăng giá trị cho biến X
X = X + 1; // Example of a counter
Bài 6. Định nghĩa hàm trong MQL5
Hàm đầy đủ như sau
//-----------------------------------------------------------------------
int Gipo(int a, int b) // User-defined function {
int c2 = a*a + b*b; // Sum of the squares of catheti
int c = MathSqrt(c2); // Hypotenuse
return(c); // Function exit operator }
//----------------------------------------------------------------------- Giải thích
//----------------------------------------------------------------------- int Gipo(int a, int b)
// int: khai báo hàm kiểu số nguyên
// Gipo là tên hàm phân biệt chữ HOA và chữ thường
// a,b là 2 biến của hàm Gipo kiểu số nguyên
// kết thúc tên hàm không có dấu chấm phẩy {
int c2 = a*a + b*b; // c2 là tổng bình phương a & b int c = MathSqrt(c2); // Căn bậc 2 của c2
// kết thúc 1 dòng lệnh luôn có chấm phẩy
return(c); // trả về kết quả của hàm }
//-----------------------------------------------------------------------
Bài 7. Các loại chương trình trong ngôn ngữ MQL4
Trước khi bắt đầu lập trình bạn phải biết được là mình sẽ viết code MQL4 theo hướng nào EA (Robot), Script
(Kịch bản) hay Indicator (Công cụ)
Expert Advisor (EA) - Robot là 1 chương trình chạy trên máy tính cá nhân chủ yếu liên quan đến kiểm soát các giao dich của trader
Script (kịch bản) là chương trình chỉ thực hiện các lệnh nào đó 1 lần
Indicator (Công cụ chỉ báo) Ứng dụng chủ yếu trong phân tích kỹ thuật để thể hiện tình trạng của thị trường theo thời
gian thực và theo những yêu cầu cụ thể của người lập trình. Đặc điểm EA Script Indicator Thời gian hoạt động Dài 1 lần Dài Thực hiện giao dịch Cho phép Cho phép Không Hiển thì các dòng Không Không Có
Cho phép liên tục sử dụng nhiều chương trình 1 lúc Không Không Có
Cho phép thực hiện các câu lệnh gọi nội bộ trong chương trình Không Không Không
Bài 8. Metaeditor – Trình biên soạn code MQL4 MetaEditor
MetaEditor là 1 trình biên soạn ngôn ngữ MQL4 nhằm thực hiện việc chỉnh sửa, viết, biên tập code MQL4. Với giao diện
thân thiện người dùng, chúng ta hoàn toàn có thể viết các chương trình giao dịch chuyên nghiệp như các chuyên gia trên
thế giới. MetaEditor thực hiện 2 nhiệm vụ sau: • File hệ thống
MetaEditor lưu trữ mã nguồn của MQL4 (Robot, Script, Indicator) vào ổ cứng sau đó thực thi chúng
• Tạo và sử dụng các chương trình
Rất dễ để tạo các chương trình trong các công cụ xây dựng sẵn của MQL4. Bạn có thể thay đổi Script, Indicator, hoặc
Robot (EA). Code được tạo ra sẽ tự động lưu trữ trong máy tính.
Bài 9. Sử dụng Metaeditor cơ bản
Sử dụng chương trình cơ bản Tạo mới file
Click OK để tiếp tục. Chương trình & code sẽ xuất hiện như sau
//+------------------------------------------------------------------+ //| create.mq4 | //| John Smith | //| www.company.com |
//+------------------------------------------------------------------+
#property copyright "John Smith"
#property link "www.company.com"
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+ int init() { //---- //---- return(0); }
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); }
//+------------------------------------------------------------------+ //| expert start function |
//+------------------------------------------------------------------+ int start() { //---- //---- return(0); }
//+------------------------------------------------------------------+
Phải bấm biên dịch
để xuất ra file chạy chương trình (file *.ex4). Thông tin file sẽ xuất hiện ở cửa sổ Navigator
Một đoạn code ví dụ. Bạn hãy copy và chạy thử trong MetaEditor4
//-------------------------------------------------------------------- // create.mq4
// To be used as an example in MQL4 book.
//--------------------------------------------------------------------
int Count=0; // Global variable
//--------------------------------------------------------------------
int init() // Spec. funct. init() {
Alert ("Funct. init() triggered at start"); // Alert return; // Exit init() }
//--------------------------------------------------------------------
int start() // Spec. funct. start() {
double Price = Bid; // Local variable Count++; // Ticks counter
Alert("New tick ",Count," Price = ",Price);// Alert return; // Exit start() }
//--------------------------------------------------------------------
int deinit() // Spec. funct. deinit() {
Alert ("Funct. deinit() triggered at exit"); // Alert return; // Exit deinit() }
//--------------------------------------------------------------------
Bài 10. Cấu trúc chương trình MQL4
Cấu trúc của chương trình MQL4 gồm các thành phần:
Các khối lớn nhất trong MQL4 1.
Head part: phần đầu chương trình chủ yếu chứa các thông tin tổng quát về chương trình 2.
Special function init(): Hàm đặc biệt khởi động chương trình. Sẽ học chi tiết các phần sau 3.
Special function start(): Hàm đặc biệt khởi động chương trình 4.
Special function deinit(): Hàm đặc biệt khởi động chương trình 5.
User-defined functions: Hàm do người dùng tự định nghĩa
Vị trí chuẩn của các hàm
Các hàm vẩn có thể thay đổi vị trí với nhau
Trong MQL4 không cho phép cấu trúc hàm lồng trong hàm. Khi biên dịch sẽ xảy ra lỗi
Bài 11. Một ví dụ cấu trúc EA (Robot) trong MQL4
Bạn copy & chạy thử trong MetaEditor
//-------------------------------------------------------------------- // simple.mq4
// To be used as an example in MQL4 book.
//--------------------------------------------------------------------
int Count=0; // Global variable
//--------------------------------------------------------------------
int init() // Spec. funct. init() {
Alert ("Function init() triggered at start"); // Alert return; // Exit init() }
//--------------------------------------------------------------------
int start() // Spec. funct. start() {
double Price = Bid; // Local variable Count++; // Tick counter
Alert("New tick ",Count," Price = ",Price);// Alert return; // Exit start() }
//--------------------------------------------------------------------
int deinit() // Spec. funct. deinit() {
Alert ("Function deinit() triggered at deinitialization"); // Alert return; // Exit deinit() }
//-------------------------------------------------------------------- Giải thích
1. Phần đầu: chỉ bao gồm 1 dòng lệnh
int Count=0; // Biến Count toàn cục, giá trị là 0
2. Phần thân: gồm 2 câu lệnh
int init() // Spec. funct. init() {
Alert ("Function init() triggered at start");
// Xuất thông báo chương trình bắt đầu Function init() triggered at start return; // Exit init() }
3. Thực thi trên máy tính cá nhân:
int start() // Special funct. start() {
double Price = Bid; // Price là biến số, kiểu số thập phân Count++;
// Tăng biến số Count lên 1 đơn vị
// Chuỗi ký tự để trong dấu ngoặc kép
// New tick là ký tự để xuất ra màn hình, không phải là biến
// Price = là ký tự để xuất ra màn hình, không phải là biến
// Mổi lần khi MT4 có 1 bar mới thì sẽ xuất hiện thông báo về giá Bid của bar đó
Alert("New tick ",Count," Price = ",Price);// Xuất thông báo return; // Exit start() } 4. Phần deinit():
int deinit() // Special funct. deinit() {
Alert ("Function deinit() triggered at exit");
// Xuất dòng : Function deinit() triggered at exit ra màn hình return; // Exit deinit() }
Kết quả hiển thị ra màn hình
Bài 12. Ví dụ cấu trúc EA đúng và sai. Cấu trúc đúng
//-------------------------------------------------------------------- // possible.mq4
// To be used as an example in MQL4 book.
//--------------------------------------------------------------------
int Count=0; // Global variable
//--------------------------------------------------------------------
int start() // Special funct. start() {
double Price = Bid; // Local variable Count++;
Alert("New tick ",Count," Price = ",Price);// Alert return; // exit start() }
//--------------------------------------------------------------------
int init() // Special funct. init() {
Alert ("Function init() triggered at start");// Alert return; // Exit init() }
//--------------------------------------------------------------------
int deinit() // Special funct. deinit() {
Alert ("Function deinit() triggered at exit");// Alert return; // Exit deinit() }
//-------------------------------------------------------------------- Cấu trúc sai
//-------------------------------------------------------------------- // incorrect.mq4
// To be used as an example in MQL4 book.
//--------------------------------------------------------------------
int start() // Special funct. start() {
double Price = Bid; // Local variable Count++;
Alert ("New tick ",Count," Price = ",Price);// Alert return; // Exit start() }
//--------------------------------------------------------------------
int Count=0; // Global variable
//--------------------------------------------------------------------
int init() // Special funct. init() {
Alert ("Function init() triggered at start");// Alert return; // Exit init() }
//--------------------------------------------------------------------
int deinit() // Special funct. deinit() {
Alert ("Function deinit() triggered at exit");// Alert return; // Exit deinit() }
//--------------------------------------------------------------------
Do chưa khai báo biến Count mà đã thực thi câu lệnh Count++. Các biến mới không phải biến mặc định của MQL4 phải
khai báo ở trên cùng của chương trình.
int Count=0; // Global variable
Kết quả chương trình thông báo lỗi :
Bài 13. Khai báo biến và gán giá trị cho biến
Ví dụ khai báo biến
int In = 3; // The constant value is assigned to variable In
double Do = 2.0; // The constant value is assigned to variable Do
bool Bo = true; // The constant value is assigned to variable Bo
color Co = 0x008000; // The constant value is assigned to variable Co
string St = "sss"; // The constant value is assigned to variable St
datetime Da= D'01.01.2004';// The constant value is assigned to variable Da
Biến chỉ khai báo 1 lần, sẽ báo lỗi nếu khai báo 2 lần cho 1 biến
int In; // Declaration of the type of variable In
int In = In_2; // The repeated declaration (In) is not allowed
In = 7; // The constant value is assigned to variable In
Do = 23.5; // The constant value is assigned to variable Do
Bo = 0; // The constant value is assigned to variable Bo
Giá trị của biến có thể là 1 hàm do người dùng định nghĩa
In = My_Function(); // My_Function() là hàm do người dùng định nghĩa
Do = Gipo(Do1,Do1); // Gipo là hàm do người dùng định nghĩa
Bo = IsConnected(); // The value of standard function is assigned to variable Bo
St = ObjectName(0); // The value of standard function is assigned to variable St
Da = TimeCurrent(); // The value of standard function is assigned to variable Da
Bài 14. Hàm If Else trong MQL4
Cấu trúc lệnh có điều kiện if... else
if ( Condition ) // Header of the operator and condition {
Block 1 of operators // If the condition is true, then..
composing body 1 //..the operators composing body 1 are executed
}else // If the condition is false.. {
Block 2 of operators // ..then the operators..
composing body 2 // ..of body 2 are executed }
1. Thực hiện khối lệnh 1 (Block 1) theo điều kiện (Condition)
if ( Condition ) // Header of the operator and condition {
Block 1 of operators // If the condition is true, then..
composing body 1 //..the operators composing body 1 are executed
}else // If the condition is false.. {
Block 2 of operators // ..then the operators..
composing body 2 // ..of body 2 are executed }
2. Thực hiện khối lệnh 2: Nếu điều kiện (Condition) không đúng thực hiện khối lệnh còn lại (Block 2):
// If the condition is false.. {
Block 2 of operators // ..then the operators..