int start() -> จะ Run ทุกครั้งเมื่อราคาขยับ
จาก Code ที่คุณเขียนมา ทุกครั้งที่ราคาขยับ มันจะสั่งให้เปิด Order ทุกครั้ง นั่นจึงเป็นสาเหตุว่าทำไม ใน 1 แท่งเทียนจึงมีหลาย Orders มาก
วิธีแก้ : ต้องตรวจสอบว่า แท่งเทียนเปลี่ยนไปหรือยัง โดยใช้ Bars ซึ่งเป็นค่าแสดงลำดับที่ของแท่งเทียน (แต่ไม่ต้องสนว่ามันแท่งที่เท่าไหร่)
int oldBars; // Set เป็น Global (ก่อนฟังก์ชั่น init())
// ในฟังก์ชั่น init()
int init()
{
oldBars = Bars - 1; // เพื่อให้ทำงานทันทีที่ EA เริ่ม Run
}
int start()
{
if(Bars > oldBars){ // แท่งเทียนเปลี่ยนหรือยัง ?
double openprice;
openprice=iOpen( NULL,0,1);
double closeprice;
closeprice=iClose( NULL,0,1);
if(closeprice>openprice)
{
OrderSend(Symbol(),OP_BUY,0.01,Ask,3,Ask-100*Point,Ask+100*Point,"My order",123,0,Green);
}
if(closeprice<openprice){
OrderSend(Symbol(),OP_SELL,0.01,Bid,3,Bid+100*Point,Bid-100*Point,"My order",321,0,Pink);
}
oldBars = Bars; // แทนค่าลำดับแท่งเทียนปัจจุบัน เพื่อไม่ให้เปิดเพิ่มอีกในแท่งเทียนนี้
}
return(0);
}
เมื่อแก้โค๊ดตามนี้แล้ว EA จะเปิดเพียง 1 ครั้ง ต่อ 1 แท่งเทียนไปเรื่อยๆ ทุกแท่งครับ ลองดูครับ