Mục lục nội dung

Bài 4 : Hướng dẫn chi tiết tạo code lệnh và tạo EA MT4

10/05/2022
Ở bài trước chúng ta biết cách code 1 EA, bài này chúng ta vào chi tiết hơn nhé
x

Mục lục nội dung
[xem]

1. Bước 1:


Các bạn mở trình soạn thảo MetaEditor của Mt4.

Trên cửa sổ trình soạn thảo MetaEditor. Bạn Click vào mục “New” phái trên góc bên trái.

Capture.PNG

Tại đây có các lựa chọn tương ứng các mục đích lập trình của bạn. Bạn chọn vào “Expert Advisor”. Chọn "Next" để tiếp tục.

Capture1.PNG

Tiếp theo bạn đặt tên cho EA mà mình xây dựng. Ví dụ tên mình đặt là Example. Lưu ý các tham số phần Parameters sẽ thêm vào khi lập trình, bạn không cần quan tâm ở đây. Chọn "Next" để tiếp tục.

Capture2.PNG

Chọn "Next" để tiếp tục.

Capture3.PNG

Chọn "Next" để tiếp tục.

Capture4.PNG

Chọn "Finish" lúc này chúng ta sẽ được một mẫu code chung.

Capture5.PNG

2. Bước 2:


Bây giờ công việc của chúng ta là tiến hành code các dòng lệnh với các thuật toán cho EA của mình vào trong mẫu code chung thu được ở trên.

Phương pháp giao dịch:

- Lệnh thực hiện dựa vào sự cắt nhau của Ema_8 và Ema_20.

- Kết hợp điều kiện yêu cầu của nến mà ở đó xảy ra sự giao cắt.

- Lệnh mua:

+ Ema_8 cắt từ dưới lên Ema_20.

+ Giá đóng cửa của nến xảy ra sự cắt nhau cao hơn giá mở cửa, và nằm phía trên 2/3 kích thước của nến.

+ Thân nến có kích thước tương đối.

- Lệnh bán:

+ Ema_8 cắt từ trên xuống Ema_20.

+ Giá đóng cửa của nến xảy ra sự cắt nhau thấp hơn giá mở cửa, và nằm phía dưới 1/3 kích thước của nến.

+ Thân nến có kích thước tương đối.


3. Bước 3:


Trong code mẫu tự động tạo ra bởi trình soạn thảo chúng ta có các thành phần:

- Hàm khởi tạo Expert OnInt().

- Hàm kết thúc Expert Ondeint().

- Hàm void OnTick().

Ta thay hàm void OnTick() bằng hàm int start().


//--- đầu tiên ta tiến hành khai báo các biến---

int ticket, ticket_1; // giá trị phục vụ kiểm tra khi tiến hành đặt lệnh

double ma8_1, ma8_2; // giá trị đường tủng bình ma

double ma20_1, ma20_2;

double BarHigh3, BarLow3, BarSize3, BarClose3, BarOpen3; // giá trị nến mới đóng cửa

double atr; // giá trị sử dụng tính toán SL va TP

bool buy_condition = false, sell_condition = false; // điều kiện đặt lệnh

bool n01 = false, n11 = false, n21 = false; // điều kiện đặt 01 lệnh trên 01 nến

bool n02 = false, n12 = false, n22 = false; //

double Lots = 0.01; // khối lượng của lệnh


//---khởi tạo giá trị cho các biến

ma8_1 = iMA(NULL, 0, 8, 0, MODE_SMA, PRICE_MEDIAN, 1);

ma8_2 = iMA(NULL, 0, 8, 0, MODE_SMA, PRICE_MEDIAN, 2);

ma20_1 = iMA(NULL, 0, 20, 0, MODE_SMA, PRICE_MEDIAN, 1);

ma20_2 = iMA(NULL, 0, 20, 0, MODE_SMA, PRICE_MEDIAN, 2);


BarHigh3 = iHigh (Symbol(), 0, 1);

BarLow3 = iLow (Symbol(), 0, 1);

BarClose3 = iClose ( Symbol(), 0, 1);

BarOpen3 = iOpen( Symbol(),0,1);

BarSize3 = BarHigh3 - BarLow3;


atr = iATR (Symbol(), 0, 40, 1);


//-------xác định điều kiện cho đặt lệnh---------

//-------thuat toan dieu kien cho lenh buy------

if( ma8_2 < ma20_2 && ma8_1 > ma20_1 )

{

if ( BarClose3 > BarLow3 + 0.7*BarSize3 )

{

if ( BarSize3 > 0.6*atr )

{

buy_condition = true;

}

}

}

//------- thuat toan dieu kien lenh sell------

if( ma8_2 > ma20_2 && ma8_1 < ma20_1 )

{

if ( BarClose3 < BarLow3 + 0.3*BarSize3 )

{

if ( BarSize3 > 0.6*atr )

{

sell_condition = true;

}

}

}


//------- điều kiện đặt 01 lệnh trên 01 nến cho mỗi cặp------

int total = OrdersTotal();

for ( int pos = 0; pos <= total; pos++ )

{

if ( OrderSelect( pos, SELECT_BY_POS ) == true )

{

//----------------------lenh thuc hien khac ngay-----------------------------------

if ( OrderSymbol() == "AUDUSD" && (TimeDay(TimeCurrent()) != TimeDay (OrderOpenTime())) )

{

if ( OrderType() == OP_BUY )

n01 = true;

if ( OrderType() == OP_SELL )

n11 = true;

}


if ( OrderSymbol() == "EURUSD" && (TimeDay(TimeCurrent()) != TimeDay (OrderOpenTime())) )

{

if ( OrderType() == OP_BUY )

n02 = true;

if ( OrderType() == OP_SELL )

n12 = true;

}


//--------------------lenh thuc hien cung ngay------------------------------------------

if ( OrderSymbol() == "AUDUSD" && (TimeDay(TimeCurrent()) == TimeDay (OrderOpenTime())) )

{

n21 = true;

}


if ( OrderSymbol() == "EURUSD" && (TimeDay(TimeCurrent()) == TimeDay (OrderOpenTime())) )

{

n22 = true;

}

}

}


//------- đặt lệnh buy và sell-------------------------------------------------

if ( ( buy_condition == true && Symbol() == "AUDUSD" && n11 == false && n21 == false) ||

( buy_condition == true && Symbol() == "EURUSD" && n12 == false && n22 == false) )

{

if ( BarClose3 - BarLow3 < atr*1.5 )

{

ticket = OrderSend(Symbol(),OP_BUY,Lots,Ask, 3, BarLow3 - 50*Point, Ask + (Ask - BarLow3 + 50*Point)*2.1,"My EA",1245,0,Green); // buy order place

}

else

{

ticket = OrderSend(Symbol(),OP_BUY,Lots,Ask, 3, Ask - atr*1.5, Ask + atr*1.5*2.1,"My EA",1245,0,Green); // buy order pl

}


if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))

{

Print("BUY order opened : ",OrderOpenPrice());

return (0);

}

}

else

{

Print("Error opening BUY order : ",GetLastError());

return(0);

}

}


Ta đã vừa code hoàn thành EA theo phương pháp giao dịch đơn giản là dựa vào sự cắt nhau của các đường trung bình giá kết hợp điều kiện giá đóng cửa của nến.

Các bạn chú ý, trong phần đặt lệnh "SendOrder" ta chia ra hai trường hợp dựa vào kích thước của nến so sánh với giá trị ATR. Tỉ lệ Reward/Risk là 2:1. EA giao dịch trên 2 cặp ngoại tệ là AUD/USD, EUR/USD.

Bây giờ công việc của ta sẽ là biên dịch để có được một EA giao dịch tự động.

Các bạn tải file EA và file hướng dẫn cách các bạn Backtest của Fxpro ở dưới để xem thêm nhé.

Capture3.PNG

 

1 bình luận, đánh giá về Bài 4 : Hướng dẫn chi tiết tạo code lệnh và tạo EA MT4

DHNguyến Duy Hoàng

Mình mày mò qua cái trang này mà lại làm được :)) Lại phải thức đêm back test rồi , hi vọng từ đây tạo ra được con EA ngon thì vác dollar sang cảm ơn các bạn nhé =))

Trả lời.
Thông tin người gửi
Bình luận sản phẩm
Nhấn vào đây để đánh giá
Thông tin người gửi
x
0.20655 sec| 812.516 kb