EA Programing => ปัญหาที่พบในการเขียน EA => Topic started by: be on กุมภาพันธ์ 05, 2013, 03:10:57 pm
-
คือ ผมหัดเขียน ea แบบนี้ครับ
ถ้าแท่งที่แล้วปิดบวก แท่งปัจจุบันให้เปิด บาย
ถ้าแท่งที่แล้วปิดลบ แท่งปัจจุบันให้เปิด เซล
ไปเรื่อยๆ
แต่ปัญหาที่ผมพบคือ หลังจากเข้าเงื่อนไข ea กลับเปิดออเดอร์แท่งเดียวถี่ๆ
code ที่ผมเขียนเป็นแบบนี้ครับ
int start()
{
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);
}
return(0);
}
รบกวนช่วยดูหรือแก้ไขให้หน่อยครับ
ขอบคุณครับ :'( :'(
-
ก่อนจะบายจะเซลก็นับก่อนครับว่ามีออเดอร์เปิดอยู่กี่ออเดอร์ ถ้านับได้ 0 ค่อยเปิดออเดอร์
-
ก่อนจะบายจะเซลก็นับก่อนครับว่ามีออเดอร์เปิดอยู่กี่ออเดอร์ ถ้านับได้ 0 ค่อยเปิดออเดอร์
ยังไงหรอครับ ผมลองไปเรีื่อยดู มันก็เปิดออเดอร์ติดๆกันหลายออเดอร์ ภายในแท่งเดียวอยู่ดี
-
เอาง่ายๆก็แบบนี้ครับ
if ( OrdersTotal() == 0 )
OrderSend(Symbol(),OP_BUY,0.01,Ask,3,Ask-100*Point,Ask+100*Point,"My order",123,0,Green);
-
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 แท่งเทียนไปเรื่อยๆ ทุกแท่งครับ ลองดูครับ
-
ผมน้องใหม่จิงๆครับ ไม่มีประสบการเกี่ยวกับการเขียนโปรแกรมคอมมาก่อนเลย
อาศัยอ่านแล้วหัดเขียนเองเลยครับ
code ที่ท่าน hyperxeon แก้ให้
ใช้ได้แล้วครับ
ต้องขอขอบคุณท่าน D_Diamond และท่าน hyperxeon ที่เข้ามาตอบครับ