[Help] Mình Gặp Một BUG Cần Hỗ Trợ FIX

[Help] Mình Gặp Một BUG Cần Hỗ Trợ FIX

[Help] Mình Gặp Một BUG Cần Hỗ Trợ FIX

chienthienvu

Member
8
0
Chào mọi người,

Mình xin vào thẳng vấn đề. Mình có viết một vài EA nhỏ để kiểm tra chiến thật nhưng khi chạy backtest thì phát hiện ra một vấn đề đó là toàn bộ các lệnh được gửi đi là cùng một loại (All Sell or All Buy Orders).
Mình có chèn điều kiện để EA có thể tự phân định được đâu là Sell / Buy entry. Và khi kiểm tra report thì EA chỉ vào lệnh phía trên mà không check đến điều kiện dưới (nếu mình move cái điều kiện của Sell Entry lên phía trên đầu thì EA sẽ chỉ vào lệnh Sell và ngược lại)


Mong có PRO nào đi ngang thì giúp mình với:


//----------------Signal Definition----------------+
//---Signal to BUY----+
if((NewCandle()) && (pindinh == true) && (Close[1] < MA20 < MA50) && (MA50 < MA100))
{
signal = "Buy";
}
if((NewCandle()) && (pindinh == true) && (MA50 < MA20 < MA100) && (Close[1] < MA20))
{
signal = "Buy";
}
if((NewCandle()) && (pindinh == true) && (MA50< Close[1] < MA20) && (MA20 < MA100))
{
signal = "Buy";
}
if((NewCandle()) && (pindinh == true) && (MA50 < MA20 < MA100) && (MA20 < Close[1] < MA100))
{
signal = "Buy";
}
if((NewCandle()) && (pindinh == true) && (MA100 < MA50 < MA20))
{
signal = "Buy";
}
if((NewCandle()) && (pindinh == true) && (MA100 < MA20 < MA50))
{
signal = "Buy";
}
if((NewCandle()) && (pindinh == true) && (MA20 < MA50 < MA100))
{
signal = "Buy";
}
//-----------------+

//---Signal to SELL----+
if((pinday == true) && (MA100 < MA50 < MA20) && (MA20 < Close[1]) && (NewCandle()))
{
signal = "Sell";
}
if((pindinh == true) && (MA100 < MA20 < MA50) && (NewCandle()))
{
signal = "Sell";
}
if((pinday == true) && (MA100 < MA50 < MA20) && (MA20 < Close[1]) && (NewCandle()))
{
signal = "Sell";
}

//-----------------+



//------------------------------------------------+
 

Giới thiệu sách Trading hay
Bộ sách Giao Dịch Thực Chiến của Trader Chuyên Nghiệp

Bộ sách tổng hợp những phương pháp giao dịch hiệu quả cao của những Trader chuyên nghiệp
Mỗi trường hợp nên chèn lệnh Print() vào để biết tín hiệu xảy ra rơi vào trường hợp nào.Vd:
{
signal="Buy";
Print("BUY: MA20<MA50<MA100");
}
Xem kết quả thì biết lỗi chỗ nào thôi
 
đây là kỹ thuật debug đó các bác, cứ print từng bước ra là biết lỗi ở đâu
Khi viết EA đơn giản thì không sao nhưng khi viết dài thì các trường hợp có tín hiệu, vào lệnh, kết quả vào lệnh...đều phải Print ra hết với thêm __LINE__ vào để biết code đấy nó nằm ở đâu cho dễ tìm. Tuy tốn thêm thời gian code nhưng khi có bug đỡ nhọc :v :v
 
@ALL
chào mọi người, xin trân thành cám ơn mọi người đã góp ý. Mình sẽ debug theo gợi ý mọi người và up kết quả lên sớm nhất có thể.
 
Mình đã thử nhưng cũng không thành công. Dưới dây là code của EA này.


void OnTick()
{
//---Signal To Buy/Sell---+
string signal ="";

//---MA 20-50-100 Definitions---+
double MA20 = iMA (NULL,0,20,0,MODE_SMA,PRICE_CLOSE,1);
double MA50 = iMA (NULL,0,50,0,MODE_SMA,PRICE_CLOSE,1);
double MA100 = iMA (NULL,0,100,0,MODE_SMA,PRICE_CLOSE,1);


//--- Pinbar Definitions---+
bool pindinh = false;
bool pinday = false;
double rautren;
double bodypinbar;
double rauduoi;
double xbody;



//--------------------------- Pinbar Down------------------------------------------+
if( Open[1]>Close[1])
{
rautren = High[1] - Open[1]; bodypinbar = Open[1] - Close[1]; rauduoi = Close[1] - Low[1];
xbody = bodypinbar*2 ;
}
if ( rautren > xbody && bodypinbar > rauduoi && pindinh == false ){ pindinh = true;}

if( Open[1]<Close[1])
{
rautren = High[1] - Close[1]; bodypinbar = Close[1] - Open[1]; rauduoi = Open[1] - Low[1];
xbody = bodypinbar*3 ;
}
if ( rautren > xbody && bodypinbar > rauduoi && pindinh == false ){ pindinh = true;}
//---------------------------------------------------------------------------------+

//--------------------------- Pinbar Up---------------------------------------------+
if( Open[1]>Close[1])
{
rautren = High[1] - Open[1]; bodypinbar = Open[1] - Close[1]; rauduoi = Close[1] - Low[1];
xbody = bodypinbar*3 ;
}
if ( rauduoi > xbody && bodypinbar > rautren && pinday == false ){ pinday = true;}
if( Open[1]<Close[1])
{
rautren = High[1] - Close[1]; bodypinbar = Close[1] - Open[1]; rauduoi = Open[1] - Low[1];
xbody = bodypinbar*2 ;
}
if ( rauduoi > xbody && bodypinbar > rautren && pinday == false ){ pinday = true;}
//---------------------------------------------------------------------------------+

//----------------Signal Definition----------------+
//---Signal to BUY----+
if(NewCandle() && pindinh == true && Close[1] < MA20 && MA20 < MA50 && MA50 < MA100)
{
signal = "Buy";
Print("BUY1");
}
if(NewCandle() && pindinh == true && MA50 < MA20 && MA20 < MA100 && Close[1] < MA20)
{
signal = "Buy";
Print("BUY2");
}
if(NewCandle() && pindinh == true && MA50< Close[1] && Close[1] < MA20 && MA20 < MA100)
{
signal = "Buy";
Print("BUY3");
}
if(NewCandle() && pindinh == true && MA50 < MA20 && MA20 < MA100 && MA20 < Close[1] && Close[1] < MA100)
{
signal = "Buy";
Print("BUY4");
}
if(NewCandle() && pindinh == true && MA100 < MA50 && MA50 < MA20)
{
signal = "Buy";
Print("BUY5");
}
if(NewCandle() && pindinh == true && MA100 < MA20 && MA20 < MA50)
{
signal = "Buy";
Print("BUY6");
}
if(NewCandle() && pindinh == true && MA20 < MA50 && MA50 < MA100)
{
signal = "Buy";
Print("BUY7");
}
//-----------------+

//---Signal to SELL----+
if((pinday == true) && (MA100 < MA50) && (MA50 < MA20) && (MA20 < Close[1]) && (NewCandle()))
{
signal = "Sell";
Print("SELL1");
}
if((pindinh == true) && (MA100 < MA20) && (MA20 < MA50) && (NewCandle()))
{
signal = "Sell";
Print("SELL2");
}
if((pinday == true) && (MA100 < MA50) && (MA50 < MA20) && (MA20 < Close[1]) && (NewCandle()))
{
signal = "Sell";
Print("SELL3");
}

//-----------------+



//------------------------------------------------+



if(signal=="Sell" && OrdersTotal()==0)
{
int SellTicket = OrderSend(_Symbol,OP_SELL,0.1,Bid,0,Bid+600*_Point,Bid-4000*_Point,NULL,0,0,Red);
}
CheckSellEventStopLoss1();

if(signal == "Buy" && OrdersTotal()==0)
{
int BuyTicket = OrderSend(_Symbol,OP_BUY,0.1,Ask,0,Ask-600*_Point,Ask+4000*_Point,NULL,0,0,Green);
}

CheckBuyEventStopLoss1();


}
//+------------------------------------------------------------------+
bool NewCandle()
{
static datetime NewBar=0; bool re=false;
if(Time[0]!=NewBar)
{
NewBar=Time[0]; re=true;
}
return re;
}
//+------------------------------------------------------------------+
 
Chưa xem kỹ nhưng tôi thấy sai ngay ở hàm NewCandle rồi. Nếu dùng như này thì nên thêm một biến nữa new_candle = NewCandle(), gọi cái này 1 lần thôi, vì gọi các lần sau luôn là false
 
Vậy mình sẽ edit lại như này thì có dc ko ???

if(NewCandle())
{
if(pindinh == true && Close[1] < MA20 && MA20 < MA50 && MA50 < MA100)
{
signal = "Buy";
Print("BUY1");
}
if(condition2)
{
............
}
if(condition3)
{
............
}
}
 

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

  • Mạc An trong Phân tích Forex - Vàng - Hàng hóa 1,523 Xem / 79 Trả lời
  • TraderViet News trong Chuyện bên lề 161 Xem / 1 Trả lời
  • DuongHuy trong Phân tích Forex - Vàng - Hàng hóa 425 Xem / 24 Trả lời
  • ngoi_sao_co_doc trong Phân tích Forex - Vàng - Hàng hóa 24,118 Xem / 83 Trả lời
  • Quíc Óp trong Phân tích Forex - Vàng - Hàng hóa 313 Xem / 3 Trả lời
  • Berkeley trong Phân tích Forex - Vàng - Hàng hóa 120 Xem / 2 Trả lời
  • LuTienSinh trong Phân tích Forex - Vàng - Hàng hóa 182 Xem / 3 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