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
Các bác cho e hỏi 3 điều :
1) Hàm Sleep() khi backtest sẽ không hoạt động đúng ko ạ , nếu vậy thì có cách nào kiểm tra hoạt động khi mình viết code không ?
2 ) Hàm giá tri tuyệt đối hàm nào ?
3 ) phần int Start() và Ontick () là giống nhau , mà tại sao khi mình copy toàn bộ code từ bên Start() qua bên Ontick () khi decomply thì cứ báo lỗi không cho ạ
Cám ơn các bác trước
 
Chào Bạn,
Hình như trong HD EA này chỉ có mở lệnh Buy mà kg có Sell thì phải; vì mình thấy chỉ có goi OrderSend cho OP_BUY. ...? Mong Bạn chỉ giúp.
Thanks và chúc thành công
 
Các bác cho e hỏi 3 điều :
1) Hàm Sleep() khi backtest sẽ không hoạt động đúng ko ạ , nếu vậy thì có cách nào kiểm tra hoạt động khi mình viết code không ?
2 ) Hàm giá tri tuyệt đối hàm nào ?
3 ) phần int Start() và Ontick () là giống nhau , mà tại sao khi mình copy toàn bộ code từ bên Start() qua bên Ontick () khi decomply thì cứ báo lỗi không cho ạ
Cám ơn các bác trước
1. Có hoạt động
2. MathAbs()
3. Hàm Start() được dùng cho mql4 phiên bản cũ còn phiên bản mới dùng OnStart() cho các Script - chỉ chạy một lần rồi nghỉ còn EA thì ko sử dụng mà phải dùng OnTick() tức là nó chỉ chạy hàm khi có một tick mới xuất hiện.Và nên chú ý là dùng void OnTick() ko phải int
 
Chỉnh sửa lần cuối:
1. Có hoạt động
2. MathAbs()
3. Hàm Start() được dùng cho mql4 phiên bản cũ còn phiên bản mới dùng OnStart() cho các Script - chỉ chạy một lần rồi nghỉ còn EA thì ko sử dụng mà phải dùng OnTick() tức là nó chỉ chạy hàm khi có một tick mới xuất hiện.Và nên chú ý là dùng void OnTick() ko phải int
Cám ơn bác TranChi nhiều!
 
Các bác cho e hỏi , e tạo 1 con ea đơn giản khi 2 đường ma cắt nhau và rsi nằm trên 50 thì buy và ngược lại .
Nhưng khi test thì ea lại vào lệnh khi 2 đường cắt nhau( rsi ko đủ dk) hoặc rsi lên 50 vào lệnh ( nhưng 2 đường ko cắt ) . E dùng && mà vẫn vậy trong khi viết indi thì ok . Có bác nào thông não hoặc giúp e ko? E cảm ơn
 
Các bác cho e hỏi , e tạo 1 con ea đơn giản khi 2 đường ma cắt nhau và rsi nằm trên 50 thì buy và ngược lại .
Nhưng khi test thì ea lại vào lệnh khi 2 đường cắt nhau( rsi ko đủ dk) hoặc rsi lên 50 vào lệnh ( nhưng 2 đường ko cắt ) . E dùng && mà vẫn vậy trong khi viết indi thì ok . Có bác nào thông não hoặc giúp e ko? E cảm ơn
về lý thuyết bạn nói là đúng, nếu EA không làm như ý bạn viết thì bạn tải lên một phần của EA (nếu sợ anh em lấy mất :))
đại khái là khó giúp nếu không nhìn thấy code.
 
về lý thuyết bạn nói là đúng, nếu EA không làm như ý bạn viết thì bạn tải lên một phần của EA (nếu sợ anh em lấy mất :))
đại khái là khó giúp nếu không nhìn thấy code.
Có gì đâu bác tại e ko có máy tính , moiix lần ngồi lại ra net , e đang học viết robot thôi, viết mấy cơ bản học dần dần chứ có gì đâu mà giấu .
If ( Ma1>Ma2 && R1 >50)
Oder... Buy
E ko dùng máy tính nên ko ngồi viết , viết tạm bằng dt . E onl đêm mà đêm chả mấy onl dc :( , bác có thể giúp viết hộ e 1 đoạn code dc ko e ngồi ngiên cứu cũng dc . Cảm ơn bác
 
Nếu muốn vào lệnh ở khung 15M cho cặp tiền tùy ý thì chỉnh code trên ntn vậy các bác?
 
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 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.
View attachment 27602

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.
View attachment 27603

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.
View attachment 27604

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

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

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

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á./.
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 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.
View attachment 27602

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.
View attachment 27603

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.
View attachment 27604

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

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

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

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á./.


Tình hình là mình đang code thông báo. Nhưng trạng thái thông báo khi đạt được rồi thì sẽ duy trì một khoảng thời gian nhất định, nên nó cứ hiện thông báo hoài sau mỗi lần giá nhảy. Có cách nào khắc phục không bạn. Thank
 
Các bác cho e hỏi , e tạo 1 con ea đơn giản khi 2 đường ma cắt nhau và rsi nằm trên 50 thì buy và ngược lại .
Nhưng khi test thì ea lại vào lệnh khi 2 đường cắt nhau( rsi ko đủ dk) hoặc rsi lên 50 vào lệnh ( nhưng 2 đường ko cắt ) . E dùng && mà vẫn vậy trong khi viết indi thì ok . Có bác nào thông não hoặc giúp e ko? E cảm ơn

chỉ cần gộp 2 điều kiện trên làm 1 sau đó nếu thoả điều kiện thì call đến hàm buy hoặc sell thôi mà, quá đơn giản. :)
 
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 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.
View attachment 27602

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.
View attachment 27603

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.
View attachment 27604

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

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

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

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á./.

View attachment 27606

Mình đã thử test lại nhưng nó không có kết quả, tất cả đêu hiện thị 0 %; anh có thể giúp em được không ak?
có phải là trong cốt chưa thiết lập khối lượng mua/bán cho lệnh đúng không ak.
em hơi ngu học vấn đề này, nhờ anh chỉ giúp ak
 

Đính kèm

  • Hinh anh tes loi.jpg
    Hinh anh tes loi.jpg
    347.1 KB · Xem: 9

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

  • ngoi_sao_co_doc trong Phân tích Forex - Vàng - Hàng hóa 24,402 Xem / 86 Trả lời
  • Mạc An trong Phân tích Forex - Vàng - Hàng hóa 397 Xem / 36 Trả lời
  • DuongHuy trong Phân tích Forex - Vàng - Hàng hóa 121 Xem / 18 Trả lời
  • DuongHuy trong Phân tích Forex - Vàng - Hàng hóa 600 Xem / 46 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