EA Programing => ปัญหาที่พบในการเขียน EA => Topic started by: Coke on มีนาคม 06, 2013, 11:47:18 pm

Title: อยากทราบโค้ด
Post by: Coke on มีนาคม 06, 2013, 11:47:18 pm
อยากทราบโค้ด เวลาindicatorเปลี่ยนสีให้บาย หรือเซล
Title: Re: อยากทราบโค้ด
Post by: admin on มีนาคม 07, 2013, 03:38:14 am
ต้องศึกษาเรื่อง icustom ครับเพื่อดูว่าแต่ละสีถูกเก็บไวที่ Buffer ตัวที่เท่าไรครับ
Title: Re: อยากทราบโค้ด
Post by: Coke on มีนาคม 07, 2013, 12:43:23 pm
คือถ้าผมได้ค่า Buffer แล้ว แต่ได้ Buffer มา 4 ตัว
ผมจะรู้ได้ไงครับว่า ตัวไหนให้ค่าสัญญาน บาย สัญญาน เซล

ผมมีอีกวิธีหนึ่งคือว่า ตอนที่รับค่าจาก Indi มาผมจะตั้งค่า Up แล้วทำ EA มา 4 ตัว
ใส่ค่า Buffer แต่ละตัวลงไป ถ้าผมไปรันแล้ว Buffer ตัวไหนทำงานแสดงว่า
เป็นสัญญาน Up จะได้หรือไม่ครับ  :D
Title: Re: อยากทราบโค้ด
Post by: admin on มีนาคม 07, 2013, 01:14:56 pm
ต้องใช้การสังเกตุครับ ว่าถ้าเป็นสีแรก ค่า buffer แสดงตัวไหนแสดงอะไรออกมามั้ง แล้วถ้าเป้นสีที่สองค่า buffer แสดงตัวไหนออกมามั้ง  จากนั่นสังเกตุความแตกต่างของทั้งสองกรณีแล้วนำความแตกต่างนี้หละครับไปสร้าเงป็นเงื่อนไขครับ
Title: Re: อยากทราบโค้ด
Post by: Coke on มีนาคม 07, 2013, 01:20:16 pm
ok ขอบคุณครับ
Title: Re: อยากทราบโค้ด
Post by: Coke on มีนาคม 07, 2013, 04:31:08 pm
ถามต่ออีกนิดหนึ่งครับ ให้ EA เทรดตาม Alerts มันจะได้รึเปล่าครับแล้วต้องทำยังไงครับ

แล้วถ้า Indicator บางตัวมันถอดค่า buffer ออกมาไม่ได้จะทำยังไงดีครับ
Title: Re: อยากทราบโค้ด
Post by: admin on มีนาคม 07, 2013, 04:58:30 pm
ถามต่ออีกนิดหนึ่งครับ ให้ EA เทรดตาม Alerts มันจะได้รึเปล่าครับแล้วต้องทำยังไงครับ

แล้วถ้า Indicator บางตัวมันถอดค่า buffer ออกมาไม่ได้จะทำยังไงดีครับ

ตอบ
ข้อ 1 ตรงที่มันมีการ alert ก็คือเงื่อนไขครับถ้าเรารู้ว่ามันมีเงื่อน ไข alert ตรงไหนเราก็ใส่ code เปิด order เข้าไปได้ครับ
ข้อ 2 indicator ส่วนใหญ่ต้องมีค่าออกมาครับหากไม่มีค่าออกมาจริงต้องเข้าไปแก้ที่ code เองครับ แต่ indicator 99% มีค่าออกมาแน่นอนครับ

ไม่ทราบว่ามีหนังสือคู่มือของทางเวบหรือเปล่าครับ เพราะวิธีการนำค่าสีออกมา กับตำแหน่งที่ alert นี้ในหนังสือมีตัวอย่างพอที่จะทำให้เข้าใจได้ง่ายขึ้นครับ
Title: Re: อยากทราบโค้ด
Post by: Coke on มีนาคม 07, 2013, 05:42:01 pm
Indicator ที่ผมจะทำมันเป็นนามสกุล ex4  ??? ผมต้องไปหาโปรแกรมถอดให้มันเป็น MQL4 ก่อนถึงจะเข้าไปดูหรือแก้ไขใช่ไหมครับ

ส่วนค่า Buffer ผมลองถอดมาแล้วได้ตามภาพ ที่แนบมาครับ ไม่รู้ว่ามันใช่ค่า indicator ที่เปลี่ยนสีหรือเปล่าครับ
แต่ส่วนตัวคิดว่าคงไม่น่าใช่เพราะว่าค่าเหมือนกันหมดเลย

หนังสือมีครับพึ่งได้สดๆ เลย ^ ^
Title: Re: อยากทราบโค้ด
Post by: D_Diamond on มีนาคม 07, 2013, 08:04:23 pm
ค่าของ buffer แต่บะสีเปิดดูใน data window เอาได้เลยครับง่ายๆ
Title: Re: อยากทราบโค้ด
Post by: Coke on มีนาคม 07, 2013, 08:15:43 pm
ท่าน D_Dimond ผมอยากปรึกษาติดต่อหลังไมค์ได้รึเปล่าครับเอาทางที่สะดวกก้ได้ครับ
Title: Re: อยากทราบโค้ด
Post by: Coke on มีนาคม 07, 2013, 09:49:04 pm
ผมลองเขียนออกมามันได้ประมาณนี้แต่มันไม่ทำงาน เช็คerorอะไรก็ไม่มี
หรือว่าค่า buffer ผิด ผมก็ดูตามท่าน D_Dimond บอก หรือผิดตรงไหน



extern double Lot=0.01;
int start()

{double up=iCustom(NULL,0,"Test_Number1",1,0);
 double down=iCustom(NULL,0,"Test_Number1",3,0);
 
 if(OrdersTotal()==0)
 {if(up>0)                                                                                                                           
 {OrderSend(Symbol(),OP_BUY,Lot,Ask,3,0,0,"Signal_Buy",0,0,DarkTurquoise);}
 if(down>0)                                                                                                                         
 {OrderSend(Symbol(),OP_SELL,Lot,Bid,3,0,0,"Singnal_Short",0,0,Red);}
}

 if(OrdersTotal()==1)
{if(up>0)                                                                                                                             
 {OrderSelect(0,SELECT_BY_POS,MODE_TRADES);
 if(OrderType()==OP_SELL)
 {OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK),3,DarkTurquoise);}       
 }
 if(down>0)                                                                                                                         
 {OrderSelect(0,SELECT_BY_POS,MODE_TRADES);
 if(OrderType()==OP_BUY)
 {OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),3,Red);}
}
}
return(0); } 
Title: Re: อยากทราบโค้ด
Post by: admin on มีนาคม 07, 2013, 10:48:12 pm
อินดี้อะไรครับลองโพสให้ผมดูหน่อยครับ
Title: Re: อยากทราบโค้ด
Post by: Coke on มีนาคม 07, 2013, 11:04:57 pm
ตามนี้เลยครับ แค่อยากให้มันเปิดออเดอร์ตามการเปลี่ยนสีเท่านั้นเองครับ ???
Title: Re: อยากทราบโค้ด
Post by: admin on มีนาคม 07, 2013, 11:26:21 pm
ค่า อินดิ้ต้องเป้นตามนี้ครับถึงจับค่าที่ถูกต้องได้ครับ

double up =iCustom(NULL,0,"supertrendprofit4",0,1);


double down =iCustom(NULL,0,"supertrendprofit4",2,1);

if(up < 10000) คือ BUY สีฟ้า

if(down < 10000) คือ Sell สีแดง
Title: Re: อยากทราบโค้ด
Post by: admin on มีนาคม 07, 2013, 11:29:49 pm
extern double Lot=0.01;
int start()

{double up =iCustom(NULL,0,"supertrendprofit4",0,1);


double down =iCustom(NULL,0,"supertrendprofit4",2,1);
 
 if(OrdersTotal()==0)
 {if(up<10000)                                                                                                                           
 {OrderSend(Symbol(),OP_BUY,Lot,Ask,3,0,0,"Signal_Buy",0,0,DarkTurquoise);}
 if(down<10000)                                                                                                                         
 {OrderSend(Symbol(),OP_SELL,Lot,Bid,3,0,0,"Singnal_Short",0,0,Red);}
}

 if(OrdersTotal()==1)
{if(up<10000)                                                                                                                             
 {OrderSelect(0,SELECT_BY_POS,MODE_TRADES);
 if(OrderType()==OP_SELL)
 {OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK),3,DarkTurquoise);}       
 }
 if(down<10000)                                                                                                                         
 {OrderSelect(0,SELECT_BY_POS,MODE_TRADES);
 if(OrderType()==OP_BUY)
 {OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),3,Red);}
}
}
return(0); }
Title: Re: อยากทราบโค้ด
Post by: Coke on มีนาคม 07, 2013, 11:50:08 pm
ขอบคุณ Admin มากครับ :D
เดียวผมขอลองดูก่อนนะครับ
แต่ตอนนี้น่าจะใช้ได้คู่เดียวใช่ไหมครับ ถ้าจะใช้หลายๆคู่ต้องเขียนเพิ่ม โค้ด ตามตัวอย่างในหนังสือใช่ไหมครับ
Title: Re: อยากทราบโค้ด
Post by: admin on มีนาคม 08, 2013, 02:20:58 am
ครับก็ใช้หลักการแจก Magic number ให้มันนั่นหละครับ
Title: Re: อยากทราบโค้ด
Post by: D_Diamond on มีนาคม 08, 2013, 11:25:55 am
ทำไมอินดิเคเตอร์ตัวที่เขียน กับตัวที่เอามาโพสมันคนละตัวกันละครับ

ตัวที่เอามาโพสนี่ผมลองโหลดมาชื่อ  supertrendprofit4  เป็นคล้ายๆเส้น MA มี 2 สี แดงกับฟ้า

ดูจาก data window มีบัฟเฟอร์ 3 ตัว

super trend profit จะไม่เท่ากับ 0 ถ้าเส้นเป็นสีฟ้า
value 2 ไม่มีค่า
value 3 จะไม่เท่ากับ 0 ถ้าเส้นเป็นสีแดง

เงื่อนไขก็จะเป็นแบบนี้
if(up != 0)
if(down != 0)

ได้ไม่เหมือนท่านแอดมินแฮะ สงสัยอินดิเคเตอร์คนละตัวกัน

แต่ถ้าเขียนถูกแล้วมันไม่เทรด  ต้องดูก่อนว่า repaint หรือเปล่าครับ
อินดิเคเตอร์พวกเปลี่ยนสีนี่มักจะ repaint ดังนั้นจับบัฟเฟอร์ถูกแต่มักจะเขียนผิดมากกว่าถูก
Title: Re: อยากทราบโค้ด
Post by: Coke on มีนาคม 08, 2013, 02:19:50 pm
ขอบคุณมากๆ เลยครับทั้งสองท่านเลย
ตอนนี้ได้ละครับ EA ตัวแรกเลย ขอบคุณจากใจจริงๆ
ใช้ตามที่ Admin บอกนะครับ ก็เหลือปรับแต่งเล็กน้อยครับ
ก็จะศึกษาจากหนังสือเพิ่มนะครับ  ขอบคุณครับ

 :D :D :D
Title: Re: อยากทราบโค้ด
Post by: Coke on มีนาคม 08, 2013, 09:36:32 pm
1. ผมเขียนค่า Magic อย่างนี้ถูกไหมครับ

extern double Lot=0.01;
int start()
extern int Magic=123;     <--------- 2. แล้วถ้าจะไปใช้อีกสัก 5 ทามเฟรมผมแค่เปลี่ยน เป็น 124 125 126 127 128 ใช่ไหมครับ
                                                                                                                                          
{double up =iCustom(NULL,0,"supertrendprofit4",0,1);                                                                    
                                                                                                                                          
                                                                                                                                          
double down =iCustom(NULL,0,"supertrendprofit4",2,1);
 
 if(magic)==123)                <--------------------------------------------------- อันนี้เหมือนเดิมใช่ไหมครับ หรือว่าเปลี่ยนทามเฟรมต้องเปลี่ยนค่าด้วยครับ
 if(OrdersTotal()==0)
 {if(up<10000)                                                                                                                          
 {OrderSend(Symbol(),OP_BUY,Lot,Ask,3,0,0,"Signal_Buy",0,0,DarkTurquoise);}
 if(down<10000)                                                                                                                        
 {OrderSend(Symbol(),OP_SELL,Lot,Bid,3,0,0,"Singnal_Short",0,0,Red);}
}

 if(magic)==123)                 <--------------------------------------------------- อันนี้ก็เหมือนเดิมใช่ไหมครับ หรือว่าเปลี่ยนทามเฟรมต้องเปลี่ยนค่าด้วย
 if(OrdersTotal()==1)
{if(up<10000)                                                                                                                            
 {OrderSelect(0,SELECT_BY_POS,MODE_TRADES);
 if(OrderType()==OP_SELL)
 {OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK),3,DarkTurquoise);}      
 }
 if(down<10000)                                                                                                                        
 {OrderSelect(0,SELECT_BY_POS,MODE_TRADES);
 if(OrderType()==OP_BUY)
 {OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),3,Red);}
}
}
return(0); }

Title: Re: อยากทราบโค้ด
Post by: admin on มีนาคม 09, 2013, 01:03:41 am
if(magic ==123)   เงื่อนไขต้องแบบนี้

OrderSend(Symbol(),OP_BUY,Lot,Ask,3,0,0,"Signal_Buy",123,0,DarkTurquoise); ต้องระบุ magic ด้วยทุกที่ที่ส่งคำสั่งเปิด
Title: Re: อยากทราบโค้ด
Post by: Coke on มีนาคม 09, 2013, 08:09:11 am
ง่า!! ถ้าผมเปิดสัก 10 กราฟ ผมต้องมาแก้ 10 กราฟเลยใช่ไหมครับ
ไม่ให้มันเหมือนกัน  แล้วต้องมี EA เพิ่มมา 10 ตัวนะสิ  ???
Title: Re: อยากทราบโค้ด
Post by: admin on มีนาคม 09, 2013, 01:01:55 pm
ง่า!! ถ้าผมเปิดสัก 10 กราฟ ผมต้องมาแก้ 10 กราฟเลยใช่ไหมครับ
ไม่ให้มันเหมือนกัน  แล้วต้องมี EA เพิ่มมา 10 ตัวนะสิ  ???
จริงไม่ต้องหรอกครับให้ใช้ตัวแปร แทน ค่าของ Magic ครับ เวลาใช้งานจริงแก้แค่ input แก้ที่ input ทีเดียวครับ
Title: Re: อยากทราบโค้ด
Post by: D_Diamond on มีนาคม 09, 2013, 01:28:35 pm
 if(magic)==123)  มันต้องอยู่หลัง orderselect นะครับ  ไม่ใช่เขียนไว้ลอยๆแบบนั้น

แล้วก็ไม่ใช่เขียนแบบนี้  ต้องเขียนว่า if( OrderMagicNumber() == magic )