Hoc MQL4 [PDF]

  • 0 0 0
  • Gefällt Ihnen dieses papier und der download? Sie können Ihre eigene PDF-Datei in wenigen Minuten kostenlos online veröffentlichen! Anmelden
Datei wird geladen, bitte warten...
Zitiervorschau

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

Thời gian hoạt động

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



Cho phép liên tục sử dụng nhiều chương trình 1 lúc

Không

Không



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

1 lần

Indicator Dài

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:

1. 2. 3. 4.

Các khối lớn nhất trong MQL4 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 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 Special  function start(): Hàm đặc biệt khởi động chương trình 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; int In = In_2;

// Declaration of the type of variable In // 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 ) { Block 1 of operators composing body 1 }else { Block 2 of operators composing body 2 }

// Header of the operator and condition // If the condition is true, then.. //..the operators composing body 1 are executed // If the condition is false.. // ..then the operators.. // ..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..

composing body 2 }

// ..of body 2 are executed

  Bài 15. Ví dụ 1 hàm If Else thực thi lệnh có điều kiện trong MQL4

Ví dụ 1 hướng dẩn cách sử dụng hàm if else đơn giản //--------------------------------------------------------------------------------------// onelevel.mq4 // The code should be used for educational purpose only. //--------------------------------------------------------------------------------------int start()

// Special function 'start'

{ double Level,

// Alert level

Price;

// Current price

Level=1.2753;

// Set the level

Price=Bid;

// Request price

//--------------------------------------------------------------------------------------if (Price>Level)

// Operator 'if' with a condition

{ Alert("The price has exceeded the preset level");// Message to the trader } //--------------------------------------------------------------------------------------return;

// Exit start()

} //---------------------------------------------------------------------------------------

  Xuất hiện thông báo khi giá (Bid) lớn hơn Level=1.2753 Kết quả hiển thị ra màn hình:  The price has exceeded the preset level   ---------------------Lưu đồ thể hiện cấu trúc câu lệnh if

Bài 16. Ví dụ 2 hàm if else trong MQL4

Ví dụ 2 //----------------------------------------------------------------------// twolevel.mq4 // The code should be used for educational purpose onlyl. //----------------------------------------------------------------------int start()

// Special function 'start'

{ double Level_1,

// Alert level 1

Level_2,

// Alert level 2

Price;

// Current price

Level_1=1.2850;

// Set level 1

Level_2=1.2800;

// Set level 2

Price=Bid;

// Request price

//----------------------------------------------------------------------if (Price > Level_1)

// Check level 1

{ Alert("The price is above level 1");

// Message to the trader

} //----------------------------------------------------------------------if (Price < Level_2)

// Check level 2

{ Alert("The price is below level 2");

// Message to the trader

} //-----------------------------------------------------------------------

return;

// Exit start()

} //-----------------------------------------------------------------------

Kết quả - Khi giá Bid lớn hơn Level_1 xuất hiện thông báo The price is above level 1 - Khi giá Bid nhỏ hơn Level_2 xuất hiện thông báo The price is below level 2  

Lưu đồ cấu trúc lệnh if else  

  Ghi chú: Câu lệnh trên sẽ tự thoát nếu giá nằm ngoài 2 khoảng điều kiện Level 1 & Level 2. Bởi vậy chúng ta cần hàm if else chứ không phải chỉ hàm if thông thường

Bài 17. Ví dụ 3 hàm if else trong MQL4

Ví dụ 3 hàm if else //--------------------------------------------------------------------------------// compoundcondition.mq4 // The code should be used for educational purpose only. //--------------------------------------------------------------------------------int start()

// Special function 'start'

{ double Level_1,

// Alert level 1

Level_2,

// Alert level 2

Price;

// Current price

Level_1=1.2850;

// Set level 1

Level_2=1.2800;

// Set level 2

Price=Bid;

// Request price

//-------------------------------------------------------------------------------if (Price>Level_1 || PriceB && (BB+3)) )

// Example of a complex condition

  && Điều kiện đồng thời (và) || Điền kiện hoặc (hoặc điều kiện này hoặc điều kiện kia) != Điều kiện khác. N!=K (Điều kiện N khác K) >  Điều kiện so sánh F > B+3. So sánh giá trị F với giá trị (B+3) chứ không phải so sánh F với B Muốn điều kiện nào thực hiện trước thì để giữa 2 ngoặc đơn ()

Bài 18. Câu lệnh while vòng lặp có điều kiện trong MQL4

Cấu trúc lệnh while while ( Condition ) // Header of the cycle operator { // Opening brace Block of operators // The body of a cycle operator may consist.. that compose the cycle body } // Closing brace ----

Giải thích: 1. Điều kiện: Condition giữa 2 ngoặc đơn ở tại while () 2. Thực thi khối lệnh: vòng lặp sẽ tiếp tục thực thi mãi mãi đến khi điều kiện sai thì thoát khỏi.

Lưu đồ cấu trúc lệnh như sau

Bài 19. Ví dụ 1 – vòng lặp while hiện chuỗi Fibonaci ra màn hình

Bạn copy ví dụ và chạy thử trong MetaEditor //-----------------------------------------------------------------// fibonacci.mq4 // The code should be used for educational purpose only. //-----------------------------------------------------------------int start()

// Special function start()

{ //-----------------------------------------------------------------int i;

// Formal parameter, counter

double A,B,C,

// Numbers in the sequence

Delta,

// Real difference between coefficients

D;

// Preset accuracy

//-----------------------------------------------------------------A=1;

// Initial value

B=1;

// Initial value

C=2;

// Initial value

D=0.0000000001;

// Set accuracy

Delta=1000.0;

// Initial value

//-----------------------------------------------------------------while(Delta > D) {

// Cycle operator header // Opening brace of the cycle body

i++;

// Counter

A=B;

// Next value

B=C;

// Next value

C=A + B;

// Next value

Delta=MathAbs(C/B - B/A);

// Search difference between coefficients

}

// Closing brace of the cycle body

//-----------------------------------------------------------------Alert("C=",C," Fibonacci number=",C/B," i=",i);//Display on the screen return;

// Exit start()

} //------------------------------------------------------------------

Giải thích 1. Thoát lệnh: Vòng lặp sẽ thoát khi điều kiện không còn đúng 2. Điều kiện: Delta > 0.0000000001 3. Biến i: đếm số lần lệnh while đã thực thi   ----

Lưu đồ lệnh while