Từng bước Tạo và Code lệnh một EA trên Mt4

Từng bước Tạo và Code lệnh một EA trên Mt4

Từng bước Tạo và Code lệnh một EA trên Mt4

haibgfx

Active Member
108
142
Chào các bạn, bài viết này mình sẽ hướng dẫn các bạn cách tạo và code lệnh cho một EA - robot trên MT4 mà trong một bài viết của bác Dương Huy đã hướng dẫn các bạn tạo EA tự động.

1. Bước thứ nhất:
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. Tôi đặt tên cho EA 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 thứ hai:
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 thứ ba:
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
 

Đính kèm

  • Example.mq4
    14.7 KB · Xem: 1,069
  • FxPro-MT4-Backtesting_Guide.pdf
    6.4 MB · Xem: 1,556

Giới thiệu sách Trading hay
Trading In The Zone - Thực hành Kiểm soát Cảm xúc bằng Tâm lý học Hành vi trong Đầu tư và Giao dịch Tài chính

Là quyển sách Top 1 toàn cầu về chủ đề đầu tư/trading, Trading In The Zone giúp thấu hiểu và quản trị cảm xúc cũng như giữ vững kỷ luật khi tham gia thị trường tài chính, nhằm nâng cao trình độ và hiệu quả đầu tư lên mức cao nhất có thể
Chỉnh sửa lần cuối bởi người điều hành:
Oánh dấu từ từ nghiên cứu. Học cái món này mà không có cơ bản khó thật.
 
Mql4 là ngôn ngữ lập trình bạn ah. Mình sử dụng nó để cụ thể hóa phương pháp giao dịch, chí ít thì là backtest trên lịch sử trước khi áp dụng.
Tùy từng trường hợp, bạn gặp vấn đề gì? cần hỗ trợ code thì nêu ra, mình sẽ
Quá hay, thế mà bác chủ topic không phát triển tiếp để mọi người học hỏi nhỉ

Mql4 là ngôn ngữ lập trình bạn ah. Mình sử dụng nó để cụ thể hóa phương pháp giao dịch, backtest trên lịch sử trước khi áp dụng.
Tùy từng trường hợp, bạn gặp vấn đề gì? cần hỗ trợ code thì nêu ra, mình sẽ giúp trong khả năng.
 
Mql4 là ngôn ngữ lập trình bạn ah. Mình sử dụng nó để cụ thể hóa phương pháp giao dịch, chí ít thì là backtest trên lịch sử trước khi áp dụng.
Tùy từng trường hợp, bạn gặp vấn đề gì? cần hỗ trợ code thì nêu ra, mình sẽ


Mql4 là ngôn ngữ lập trình bạn ah. Mình sử dụng nó để cụ thể hóa phương pháp giao dịch, backtest trên lịch sử trước khi áp dụng.
Tùy từng trường hợp, bạn gặp vấn đề gì? cần hỗ trợ code thì nêu ra, mình sẽ giúp trong khả năng.
Bác cho e hỏi : mình dùng hàm nào để EA để cố gắng và cố gắng cài stop loss và take profit mỗi khi ea bị lỗi ordersend không thể modify, khi market di chuyển quá nhanh dẫn đến lỗi ordersend ạ !
Cảm ơn bác trước
 
Bác cho e hỏi : mình dùng hàm nào để EA để cố gắng và cố gắng cài stop loss và take profit mỗi khi ea bị lỗi ordersend không thể modify, khi market di chuyển quá nhanh dẫn đến lỗi ordersend ạ !
Cảm ơn bác trước

bool error;
void OnTick()
{
if(error == true)
{
int a = OrderSend(...);
if( a <0 ) return; else error = false;
}
....
....

int b = OrderSend(...);
if( b <0 ) { error = true; return; }
....
....
}
 
em đang tìm code có thể tìm các nến kiểu hammer ở sát bolinger band trên hoăc inverted hammer ở band dưới mầu nến không quan trọng,có tóc hoặc đuôi rất ít.
Có đỉnh hoặc đáy zigzag ở gần nến đó khoảng 1 đến vài nến,bác nào có có thể share cho em với.Hoặc vạch hộ em vài code có hàm liên quan em thử mò với ạ.Mẫu nén kiểu file đính kèm ấy ạ.
 

Đính kèm

  • hammer.png
    hammer.png
    12.8 KB · Xem: 4
Bác cho e hỏi : mình dùng hàm nào để EA để cố gắng và cố gắng cài stop loss và take profit mỗi khi ea bị lỗi ordersend không thể modify, khi market di chuyển quá nhanh dẫn đến lỗi ordersend ạ !o
Cảm ơn bác trước

Minh chua hieu y cua ban.
- tuc la ban dang co lenh khong dat Sl va Tp, ban muon cai Sl va Tp do thi truong chay nhanh.
- co tin hieu vao lenh, ea gui lenh Ordersend nhung do thi truong di chuyen qua nhanh len lenh Ordersend bi loi. Va ban muon kiem soat lenh loi (neu co) bang cach dat Sl va Tp cho lenh.
 
em đang tìm code có thể tìm các nến kiểu hammer ở sát bolinger band trên hoăc inverted hammer ở band dưới mầu nến không quan trọng,có tóc hoặc đuôi rất ít.
Có đỉnh hoặc đáy zigzag ở gần nến đó khoảng 1 đến vài nến,bác nào có có thể share cho em với.Hoặc vạch hộ em vài code có hàm liên quan em thử mò với ạ.Mẫu nén kiểu file đính kèm ấy ạ.

Chi bao zigzag, minh khong ranh lam ban.
Ve nen hammer va bollinger bands.
- ban su dung High, low, open, close, barsize, atr de code nha.
- bollinger bands: minh lay truong hop nen tai dinh,ban so sanh gia tri Close hoac High cua nen va Upper bands tuong doi voi khoang cach Upper bands va Midder bands de xac nhan vi tri nen so voi Upper bands.
 
Minh chua hieu y cua ban.
- tuc la ban dang co lenh khong dat Sl va Tp, ban muon cai Sl va Tp do thi truong chay nhanh.
- co tin hieu vao lenh, ea gui lenh Ordersend nhung do thi truong di chuyen qua nhanh len lenh Ordersend bi loi. Va ban muon kiem soat lenh loi (neu co) bang cach dat Sl va Tp cho lenh.
Mình ví dụ nhé :
Mình đặt buy eurusd giá 1.12300 và sau đó, SL = 1.12280 , TP= 1.12330 . Nhưng market đi quá nhanh dẫn đến lệnh buy 1.12300 này không có SL và TP. Mình không rành về ngôn ngữ Mq4 , thấy báo ordersend 130 error gì đó (mình chỉ đoán là zậy )
Cám ơn bác nhé
 
Mình ví dụ nhé :
Mình đặt buy eurusd giá 1.12300 và sau đó, SL = 1.12280 , TP= 1.12330 . Nhưng market đi quá nhanh dẫn đến lệnh buy 1.12300 này không có SL và TP. Mình không rành về ngôn ngữ Mq4 , thấy báo ordersend 130 error gì đó (mình chỉ đoán là zậy )
Cám ơn bác nhé

Loi error co the cac nguyen nhan:
- gia dat lenh khong khop (khi ban dat lenh bang tay. Ban co the su dung pending order). Ban su dung Ask hay Bid cho lenh thuc hien tuc thoi.
- khoang cach Sl va Tp qua nho so voi Spread.

Ban kiem tra bang cach tang khoang cach len. Hay su dung pending order.
 
Mình ví dụ nhé :
Mình đặt buy eurusd giá 1.12300 và sau đó, SL = 1.12280 , TP= 1.12330 . Nhưng market đi quá nhanh dẫn đến lệnh buy 1.12300 này không có SL và TP. Mình không rành về ngôn ngữ Mq4 , thấy báo ordersend 130 error gì đó (mình chỉ đoán là zậy )
Cám ơn bác nhé

nếu bác đã vào lệnh rồi thì dùng OrderModify chứ nhỉ?
Nếu tôi hiểu đúng ý thì bác tham khảo:
***
bool quanlylenh= OrderModify(...);
while (quanlylenh==false) quanlylenh= OrderModify(...);
***
đấy là trên lý thuyết thôi, chứ SL có 2 pips thì cũng gay cấn đấy :)

Còn nếu chưa vào lệnh thì:
***
int lenh= OrderSend(...);
while (lenh<=0) lenh= OrderSend(...);
***
Nếu lập trình cẩn thận thì nên kiểm tra xem error là gì bằng cách getlasterror() , sau đó với mỗi lỗi thì có cách giải quyết riêng
chẳng hạn
int e = GetLastError();
if (e==130) rời SL
if (e==129) lấy giá mới
if (e==134) thôi không vào lệnh nữa ....
 
Loi error co the cac nguyen nhan:
- gia dat lenh khong khop (khi ban dat lenh bang tay. Ban co the su dung pending order). Ban su dung Ask hay Bid cho lenh thuc hien tuc thoi.
- khoang cach Sl va Tp qua nho so voi Spread.

Ban kiem tra bang cach tang khoang cach len. Hay su dung pending order.
Dù gì cũng cảm ơn bác ! Hi,tại mình trình bày khó hiểu quá .
Học lập trình mql4 này có khó không ạ ?
 
Chi bao zigzag, minh khong ranh lam ban.
Ve nen hammer va bollinger bands.
- ban su dung High, low, open, close, barsize, atr de code nha.
- bollinger bands: minh lay truong hop nen tai dinh,ban so sanh gia tri Close hoac High cua nen va Upper bands tuong doi voi khoang cach Upper bands va Midder bands de xac nhan vi tri nen so voi Upper bands.

cảm ơn bác,bác có các cái nào về tập hợp các hàm lệnh gì không.Em cũng mới thử mò cái này nên chưa rõ lắm
VD em muốn kiểm tra stochatic cắt lên xuống thì nó là các key nào khi mình viết code vậy?
 
cảm ơn bác,bác có các cái nào về tập hợp các hàm lệnh gì không.Em cũng mới thử mò cái này nên chưa rõ lắm
VD em muốn kiểm tra stochatic cắt lên xuống thì nó là các key nào khi mình viết code vậy?

- Bạn tham khảo tại trang chủ này: https://docs.mql4.com/
- Một mẹo nhỏ cho bạn tìm hàm tương ứng với các Indicators để áp dung trong code EA:
Giả sử bạn muốn code dùng Stochastic. Bạn vào Google gõ dòng từ key: iStoch mql4
Sau đó bạn vào link của trang chủ trên: https://docs.mql4.com/
Mẹo ở đây là: chữ "i" trước tên Indicator ( trong ví dụ mình lấy Stoch) và "mql4".
Capture.PNG
 
- Bạn tham khảo tại trang chủ này: https://docs.mql4.com/
- Một mẹo nhỏ cho bạn tìm hàm tương ứng với các Indicators để áp dung trong code EA:
Giả sử bạn muốn code dùng Stochastic. Bạn vào Google gõ dòng từ key: iStoch mql4
Sau đó bạn vào link của trang chủ trên: https://docs.mql4.com/
Mẹo ở đây là: chữ "i" trước tên Indicator ( trong ví dụ mình lấy Stoch) và "mql4".View attachment 47049

thank bác
 
Các bác cho em hỏi em có lệnh vào bằng script em muốn set chạy trailing stop và các mức trailing stop đối với lệnh đó thì làm thế nào ạ
 

BÌNH LUẬN MỚI NHẤT

  • DuongHuy trong Hệ thống giao dịch - Trading system 37,503 Xem / 18 Trả lời
  • Mạc An trong Phân tích Forex - Vàng - Hàng hóa 1,591 Xem / 94 Trả lời
  • DuongHuy trong Phân tích Forex - Vàng - Hàng hóa 371 Xem / 29 Trả lời
  • Quíc Óp trong Phân tích Forex - Vàng - Hàng hóa 379 Xem / 18 Trả lời
  • AdBlock Detected

    We get it, advertisements are annoying!

    Sure, ad-blocking software does a great job at blocking ads, but it also blocks useful features of our website. For the best site experience please disable your AdBlocker.

    Back
    Bên trên