Open Forex4you Account

Server รัน EA 1000 / ปี

สั่งชื้อคู่มือการโปรแรกม MQL4

Author Topic: ทำไม EA ไม่เป็นตามที่เขียนครับ  (Read 35060 times)

TvT

  • Full Member
  • ***
  • Posts: 133
ทำไม EA ไม่เป็นตามที่เขียนครับ
« on: พฤษภาคม 22, 2010, 08:24:46 am »
คือทดลองเขียน EA โดยตั้งใจให้เทรดตามรูปเวลาเบรกยอด zigzag ล่าสุดเบรกขึ้นลอง เบรกลงชอร์ต แต่ลองรันแล้วมันไม่ใช้ยอดล่าสุดมารัน ใครรู้วิธีแก้บอกที



int start()
{
//----
{
double zigzaghigh, zigzaglow, zigzaghighx, zigzaglowx, zigzaghighp;
double zigzaglowp, zigzaghigha, zigzaglowa, pc;
double ticket, total, order;
int h, l;

zigzaghighx=iCustom(NULL,0,"ZigZag",12,5,3,MODE_HI GH,h);
zigzaglowx=iCustom(NULL,0,"ZigZag",12,5,3,MODE_LOW ,l);
zigzaghighp=iCustom(NULL,0,"ZigZag",12,5,3,MODE_HI GH,h+1);
zigzaglowp=iCustom(NULL,0,"ZigZag",12,5,3,MODE_LOW ,l+1);
zigzaghigha=iCustom(NULL,0,"ZigZag",12,5,3,MODE_HI GH,h-1);
zigzaglowa=iCustom(NULL,0,"ZigZag",12,5,3,MODE_LOW ,l-1);
pc=iClose(NULL,0,1);
total=OrdersTotal();

//identify top//
while(h>1)
{
if((zigzaghighx > zigzaghighp) && (zigzaghighx > zigzaghigha))
zigzaghigh=zigzaghighx;
return(0);
}
//identify buttom//
while(l>1)
{
if((zigzaglowx < zigzaglowp) && (zigzaglowx < zigzaglowa))
zigzaglow=zigzaglowx;
return(0);
}

//buy&sell//
if((total<1)&&(pc>zigzaghigh))
{ticket=OrderSend(Symbol(),OP_BUY,1,Ask,1,0,0,"buy ",0,0,Green);
OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES);
Print("buy");
return(0);
}
if((total>0)&&(pc<zigzaglow))
{OrderClose(OrderTicket(),OrderLots(),Bid,1,Red);
Print("sale");
return(0);
}
return;
}

//----
return(0);
}[
« Last Edit: พฤษภาคม 22, 2010, 08:30:21 am by TvT »

linconz

  • VIP
  • Sr. Member
  • *
  • Posts: 357
Re: ทำไม EA ไม่เป็นตามที่เขียนครับ
« Reply #1 on: พฤษภาคม 22, 2010, 10:54:31 am »
อ่านโค๊ดแล้วยังงงๆอยู่  งูๆปลาๆอยู่   อาการมันเป็นไงครับ  ค่า h เริ่มแรกมาจากไหนอะครับ
แล้ว zigzag คืนค่าอะไรออกมาบ้าง

TvT

  • Full Member
  • ***
  • Posts: 133
Re: ทำไม EA ไม่เป็นตามที่เขียนครับ
« Reply #2 on: พฤษภาคม 22, 2010, 12:06:26 pm »
ค่า h เริ่มแรกมาจากไหนอะครับ

ค่า h คือค่าที่ตั้งเป็นตัวแปรเพื่อหาตำแหน่งยอดครับ โดยมีเงื่อนไขว่า ตำแหน่ง h มีค่า zigzag สูงกว่าข้างซ้าย-ขวา ก็จะได้ตำแหน่งยอดล่าสุด l ก็ไว้หา buttom ของ zigzag ล่าสุดน่ะ

แล้ว zigzag คืนค่าอะไรออกมาบ้าง
คืนค่า zigzaghigh ครับคือพอได้ยอดล่าสุดแล้วจะเอามาเทียบกับราคาปิดถ้าเบรกก็นับเป็นสัญญาณซื้อน่ะครับ

ตอนนี้เข้าใจว่าปัญหาคือมันไม่ refresh ค่า h,l zigzaghigh ให้แต่หาค่ารอบเดียวแล้วเก็บไว้ใช้ตลอด ไม่รู้ถูกมั้ย

ไงๆก็ช่วยดูทีว่าภูกมั้ยนะครับ

linconz

  • VIP
  • Sr. Member
  • *
  • Posts: 357
Re: ทำไม EA ไม่เป็นตามที่เขียนครับ
« Reply #3 on: พฤษภาคม 22, 2010, 12:20:14 pm »
คือทดลองเขียน EA โดยตั้งใจให้เทรดตามรูปเวลาเบรกยอด zigzag ล่าสุดเบรกขึ้นลอง เบรกลงชอร์ต แต่ลองรันแล้วมันไม่ใช้ยอดล่าสุดมารัน ใครรู้วิธีแก้บอกที



int start()
{
//----
{
double zigzaghigh, zigzaglow, zigzaghighx, zigzaglowx, zigzaghighp;
double zigzaglowp, zigzaghigha, zigzaglowa, pc;
double ticket, total, order;
int h, l;

zigzaghighx=iCustom(NULL,0,"ZigZag",12,5,3,MODE_HI GH,h);
zigzaglowx=iCustom(NULL,0,"ZigZag",12,5,3,MODE_LOW ,l);
zigzaghighp=iCustom(NULL,0,"ZigZag",12,5,3,MODE_HI GH,h+1);
zigzaglowp=iCustom(NULL,0,"ZigZag",12,5,3,MODE_LOW ,l+1);
zigzaghigha=iCustom(NULL,0,"ZigZag",12,5,3,MODE_HI GH,h-1);
zigzaglowa=iCustom(NULL,0,"ZigZag",12,5,3,MODE_LOW ,l-1);
pc=iClose(NULL,0,1);
total=OrdersTotal();

//identify top//
while(h>1)
{
if((zigzaghighx > zigzaghighp) && (zigzaghighx > zigzaghigha))
zigzaghigh=zigzaghighx;
return(0);
}
//identify buttom//
while(l>1)
{
if((zigzaglowx < zigzaglowp) && (zigzaglowx < zigzaglowa))
zigzaglow=zigzaglowx;
return(0);
}

//buy&sell//
if((total<1)&&(pc>zigzaghigh))
{ticket=OrderSend(Symbol(),OP_BUY,1,Ask,1,0,0,"buy ",0,0,Green);
OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES);
Print("buy");
return(0);
}
if((total>0)&&(pc<zigzaglow))
{OrderClose(OrderTicket(),OrderLots(),Bid,1,Red);
Print("sale");
return(0);
}
return;
}

//----
return(0);
}[

ค่าสุดท้ายเป็น shift หรือป่าวครับ ลองเปลี่ยนเป็น 0,1,2 ดูครับ   0 = ปัจจุบัน   1= ถอยไป 1 แท่ง  2= ถอยไป 2 แท่ง

สิ่งที่คุณต้องการหาคือ ค่าที่คืนออกมา จาก zigzag  แล้วต้องเอาค่าเหล่านั้นมาประมวลผล หาจุดยอดหรือก้น เอาเอง แล้วเอาค่านั้นเก็บไว้ในตัวแปรเพื่อเปรียบเทียบกับราคา
แล้วค่า h ไม่มีการกำหนดเลย  indy มันไม่รู้ว่าจะไปเอาค่าที่แท่งเทียนไหนมาคืนให้คุณ

จริงๆผมเขียนให้ก็ได้น๊ะครับ แต่อยากให้ฝึก เผื่อวันหน้าวันหลังเก่งแล้ว จะได้เขียนอินดี้เทพๆ มาแบ่งปันเพื่อนๆบ้าง

ยังไงลองดูครับ ติดขัดตรงไหนก็ถามมาได้ครับ
« Last Edit: พฤษภาคม 22, 2010, 12:29:58 pm by linconz »

TvT

  • Full Member
  • ***
  • Posts: 133
Re: ทำไม EA ไม่เป็นตามที่เขียนครับ
« Reply #4 on: พฤษภาคม 22, 2010, 01:18:30 pm »
ค่าสุดท้ายเป็น shift หรือป่าวครับ ลองเปลี่ยนเป็น 0,1,2 ดูครับ   0 = ปัจจุบัน   1= ถอยไป 1 แท่ง  2= ถอยไป 2 แท่ง
ที่ให้เป็น h เพราะต้องการค่าแท่งที่มีค่า zigzag สูงสุด ที่ใส่ h เพราะคิดว่า h แทนเลขจำนวนเต็ม เลยเอาเปรียบเทียบที่ h-1 = แท่งหลังจากแท่งนั้น
h+1 = แท่งก่อนหน้า ก็เลยเอาค่า zigzag ตำแหน่งที่ h ออกมาน่ะครับก็คิดว่าน่าจะเป็นค่า top น่ะ

แล้วค่า h ไม่มีการกำหนดเลย 
ให้กำหนดเป็นอะไรครับ อันนี้แหละที่ไม่เข้าใจเพราะผมตั้งเงื่อนไขตามข้างบนอย่างนี้
h = เลขจำนวนเต็มอะไรก็ได้(ศึกษาจากอินดี้ของคนอื่นเขาใช้ตัวแปรแทนตัวเลขได้น่ะครับ)
เมื่อ ค่า zigzag ที่ h > 2 แท่งข้างๆ ก็น่าจะเป็นค่ายอด
ก็สั่งให้ zigzaghigh = ค่า zigzag ที่ h (ในที่นี้ตั้งว่า zigzaghighx ) แล้วส่งค่า zigzaghigh ออกมาเทียบกับราคาล่าสุด โดยเข้าใจว่ามันจะหาค่าล่าสุดตลอด

ที่ผมเข้าใจก็ราวๆนี้เลยเขียนแบบนี้แหละครับ


จริงๆผมเขียนให้ก็ได้น๊ะครับ
ไม่ต้องขนาดนั้นก็ได้แต่อธิบายทีว่าเข้าใจผิดตรงไหน หรือบอกตำแหน่งที่ต้องแก้-ใส่โค๊ดเพิ่มที


ปัญหาก็คือไม่รู็จะใช้ code อะไรแล้วเนี่ยแหละ ถ้าบอกวิธีแก้ก็จะดีมากเลย
ปล.บอร์ดไม่ค่อยมีคนเลย ขอบคุณที่ตอบนะครับ

admin

  • Administrator
  • Hero Member
  • *****
  • Posts: 2386
Re: ทำไม EA ไม่เป็นตามที่เขียนครับ
« Reply #5 on: พฤษภาคม 22, 2010, 01:44:43 pm »
ก่อนอื่น ต้องอธิบายเรื่องค่าของ zigzag ก่อนนะครับ  ค่า zigzag ที่ได้จาก icustom มันไม่ได้ส่งค่าออกมาต่อเนื่องทุก แท่งนะครับ ตัวอย่างเช่น แท่งปัจจุบัน zigzag แทงขึ้น แทงก่อนหน้าที่ zigzag จะแทงขึ้น ค่าที่ออกจาก icustom จะเป็น 0 นะครับ ลองดูตัวอย่างที่ผมเขียนเพื่อแสดงค่า zigzag จาก http://www.thaiforexea.com/index.php/topic,20.0.html ครับ   จาก code
int h, l;
zigzaghighx=iCustom(NULL,0,"ZigZag",12,5,3,MODE_HI GH,h);
zigzaglowx=iCustom(NULL,0,"ZigZag",12,5,3,MODE_LOW ,l);
zigzaghighp=iCustom(NULL,0,"ZigZag",12,5,3,MODE_HI GH,h+1);
zigzaglowp=iCustom(NULL,0,"ZigZag",12,5,3,MODE_LOW ,l+1);
zigzaghigha=iCustom(NULL,0,"ZigZag",12,5,3,MODE_HI GH,h-1);
zigzaglowa=iCustom(NULL,0,"ZigZag",12,5,3,MODE_LOW ,l-1);

ตำแหน่งสีแดง ต้องเป็นตัวเลขครับ แต่จาก code ที่ให้มา ค่า h ,l ในที่นี้ต้องเป็นตัวเลขที่ระบุตำแหน่งของ ค่า zigzag แต่ใน code ยังไม่มีการระบุค่าให้ h หรือ l เลยนะครับ ใน icutom ตำแหน่งสีแดงทีผม แสดงให้ดูใน code ต้องเริ่มจาก 0 ครับคือค่าของกราฟในแท่งปัจจุบัน  ถ้าเป็น 1 ก้คือค่าของอินดิเคเตอร์ในกราฟแท่งก่อนหน้านี้ครับ  เท่าที่ผมดู code คุณคราวๆๆ คุณต้องการให้ EA มันรู้ว่า ค่า zigzag ปัจจุบันมีค่ามากว่ากรือน้อยกว่า ยอดหรือก้นของ ค่า zigzag ก่อนหน้านี้ใช่หรือไม่ ครับ

TvT

  • Full Member
  • ***
  • Posts: 133
Re: ทำไม EA ไม่เป็นตามที่เขียนครับ
« Reply #6 on: พฤษภาคม 22, 2010, 01:49:31 pm »
ก่อนอื่น ต้องอธิบายเรื่องค่าของ zigzag ก่อนนะครับ  ค่า zigzag ที่ได้จาก icustom มันไม่ได้ส่งค่าออกมาต่อเนื่องทุก แท่งนะครับ ตัวอย่างเช่น แท่งปัจจุบัน zigzag แทงขึ้น แทงก่อนหน้าที่ zigzag จะแทงขึ้น ค่าที่ออกจาก icustom จะเป็น 0 นะครับ ลองดูตัวอย่างที่ผมเขียนเพื่อแสดงค่า zigzag จาก http://www.thaiforexea.com/index.php/topic,20.0.html ครับ   จาก code
int h, l;
zigzaghighx=iCustom(NULL,0,"ZigZag",12,5,3,MODE_HI GH,h);
zigzaglowx=iCustom(NULL,0,"ZigZag",12,5,3,MODE_LOW ,l);
zigzaghighp=iCustom(NULL,0,"ZigZag",12,5,3,MODE_HI GH,h+1);
zigzaglowp=iCustom(NULL,0,"ZigZag",12,5,3,MODE_LOW ,l+1);
zigzaghigha=iCustom(NULL,0,"ZigZag",12,5,3,MODE_HI GH,h-1);
zigzaglowa=iCustom(NULL,0,"ZigZag",12,5,3,MODE_LOW ,l-1);

ตำแหน่งสีแดง ต้องเป็นตัวเลขครับ แต่จาก code ที่ให้มา ค่า h ,l ในที่นี้ต้องเป็นตัวเลขที่ระบุตำแหน่งของ ค่า zigzag แต่ใน code ยังไม่มีการระบุค่าให้ h หรือ l เลยนะครับ ใน icutom ตำแหน่งสีแดงทีผม แสดงให้ดูใน code ต้องเริ่มจาก 0 ครับคือค่าของกราฟในแท่งปัจจุบัน  ถ้าเป็น 1 ก้คือค่าของอินดิเคเตอร์ในกราฟแท่งก่อนหน้านี้ครับ  เท่าที่ผมดู code คุณคราวๆๆ คุณต้องการให้ EA มันรู้ว่า ค่า zigzag ปัจจุบันมีค่ามากว่ากรือน้อยกว่า ยอดหรือก้นของ ค่า zigzag ก่อนหน้านี้ใช่หรือไม่ ครับ

ไม่ใช่จ้าต้องการเอาราคาปิดแท่งสุดท้ายเทียบกับยอดและก้นของ zgizag ล่าสุดจ้า คือบอก code และวิธีเขียนที่ต้องใช้เลยก็ดีนะครับ
« Last Edit: พฤษภาคม 22, 2010, 02:09:45 pm by TvT »

admin

  • Administrator
  • Hero Member
  • *****
  • Posts: 2386
Re: ทำไม EA ไม่เป็นตามที่เขียนครับ
« Reply #7 on: พฤษภาคม 22, 2010, 02:14:01 pm »
ถ้าจะหาค่าของ zigzag สูงกับต่ำใช้แค่นี้น่าจะได้แล้วครับ


extern double high ;
extern double low ;

int start()
  {   
       int amount=0;
       int temp[3];
       double tem;
                       for(int i=0 ;i<5000;i++)
                           {
                               tem=iCustom(NULL, 0, "ZigZag",13,0,i);
                               if(tem>0)
                               {
                                  temp[amount]=tem;
                                  amount++;
                                  if(amount>1)
                                  {
                                   i=5001;
                                  }
                               }                   
                                                     
                            }
                     
                      if(temp[0]>temp[1])
                      {
                        high=temp[0];
                        low=temp[1];
                     
                      }
                     
                          if(temp[0]<temp[1])
                      {
                        high=temp[1];
                        low=temp[0];
                     
                      }
     
 
   return(0);
  }

TvT

  • Full Member
  • ***
  • Posts: 133
Re: ทำไม EA ไม่เป็นตามที่เขียนครับ
« Reply #8 on: พฤษภาคม 22, 2010, 03:01:55 pm »
ขอบคุณ Admin มากๆครับ
ขอถามเพิ่มหน่อยถ้าอย่างนั้นเราจะเปรียบเทียบ ได้ไหมครับว่า ยอดล่าสุดเป็น high หรือ low
ของเดิมคิดราวๆ ว่าถ้ายอดสุดท้ายเป็น top ชอร์ตอย่างเดียว
ยอดสุดท้ายเป็น buttom ลองอย่างเดียว เราจะต้องใช้ code อะไรเพื่อบอกว่ายอดสุดท้ายเป็น top/buttom ครับ

ปล.ขอโทษด้วยที่ต้องถามบ่อย เรื่อง EA นี่ค่อนข้าวใหม่นะครับ แต่ถ้าเป็น technical analysis ก็มั่นใจพอควร ยินดีช่วยตอบคำถามนะครับ ที่เลือกค่า zigzag เพราะ BEST technical indicator = price , ตอนนี้อยากนำ code ไปเขียน Eliott wave correction trading น่ะครับ ที่มีอยู่ตอนนี้ดูไม่ค่อยตรงเลย
ปล.2 ตอนนี้เอา EA ฝากมาตัวนึง เท่าที่ดูนี่เป็น EA ที่แทบไม่มีโอกาสพลาดเลยโดยใช้ทฤษฎี power wave ของ DAR WONG น่ะ
« Last Edit: พฤษภาคม 22, 2010, 03:24:33 pm by TvT »

admin

  • Administrator
  • Hero Member
  • *****
  • Posts: 2386
Re: ทำไม EA ไม่เป็นตามที่เขียนครับ
« Reply #9 on: พฤษภาคม 22, 2010, 03:24:42 pm »
เพิ่มไปแบบนี้ครับตัวสีแดง


extern double high ;
extern double low ;
extern int direct=0;
int start()
  {   
       int amount=0;
       int temp[3];
       double tem;
                       for(int i=0 ;i<5000;i++)
                           {
                               tem=iCustom(NULL, 0, "ZigZag",13,0,i);
                               if(tem>0)
                               {
                                  temp[amount]=tem;
                                  amount++;
                                  if(amount>1)
                                  {
                                   i=5001;
                                  }
                               }                   
                                                     
                            }
                     
                      if(temp[0]>temp[1])
                      {
                        high=temp[0];
                        low=temp[1];
                        direct=1;
                     
                      }
                     
                          if(temp[0]<temp[1])
                      {
                        high=temp[1];
                        low=temp[0];
                        direct=2;
                     
                      }
     
 
   return(0);
  }

ที่นี้นะครับ  direct =1 ค่าล่าสุดจะเป็น bottom  ถ้าเป็น 2 ยอดล่าสุดจะเป็น top  ค่า ของ zigzag อยู่ใน high low  นะครับเอาไปใช้เปรียบเทียบต่อได้เลย

linconz

  • VIP
  • Sr. Member
  • *
  • Posts: 357
Re: ทำไม EA ไม่เป็นตามที่เขียนครับ
« Reply #10 on: พฤษภาคม 23, 2010, 01:12:19 am »

h = เลขจำนวนเต็มอะไรก็ได้(ศึกษาจากอินดี้ของคนอื่นเขาใช้ตัวแปรแทนตัวเลขได้น่ะครับ)


ถูกต้องครับกำหนดเป็น ตัวแปรก็ได้แต่ตัวแปรต้องมีการแทนค่า เช่น มันอาจจะอยู่ใน loop ของ for ก็ได้
ไม่งั้นมันเอาค่าออกมาให้คุณไม่ถูกครับ

ลองทดสอบกับอินดี้ตัวอื่นดูครับ ลองแทนค่าที่เป็นตัวเลขและตัวอักษรดูครับ

linconz

  • VIP
  • Sr. Member
  • *
  • Posts: 357
Re: ทำไม EA ไม่เป็นตามที่เขียนครับ
« Reply #11 on: พฤษภาคม 23, 2010, 01:18:59 am »
ถามคุณ TvT อีกนิด   ว่า เป็นไงบ้างครับผลของ brake zigzag win:lose เท่าไหร่ครับ ได้ลองจับสถิติดูบ้างมั๊ย

TvT

  • Full Member
  • ***
  • Posts: 133
Re: ทำไม EA ไม่เป็นตามที่เขียนครับ
« Reply #12 on: พฤษภาคม 23, 2010, 10:00:50 am »
ใจเย็นครับ พอดีช่วงนี้งานหลักก็ยุ่ง จะค่อยๆทำน่ะครับเสร็จแล้วมาบอกครับ

ไอเดียนี้เอามาจาก chaloke.com น่ะครับ ค่อนข้างเป็นตามทฤษฎีพื้นฐานของการเทรดทีเดียว

ใครว่างลองไปเอาระบบ PNT 1.2 variable&fear factor มาดูนะครับมั่นใจว่าทำได้น่าจะรวยทีเดียว

อย่างที่บอกครับ EA รู้ไม่มากอยากรู้ถามเรื่อง technical จะช่วยตอบให้

TvT

  • Full Member
  • ***
  • Posts: 133
Re: ทำไม EA ไม่เป็นตามที่เขียนครับ
« Reply #13 on: พฤษภาคม 23, 2010, 07:26:29 pm »
ลองแล้วครับ ทำไมซื้อแต่ไม่ยอมขายครับ งง

รบกวนด้วยนะครับ

int start()


{
double ticket, total, pc;

int direct=0;


pc=iClose(NULL,0,1);   
total=OrdersTotal();
       
//----

 
         int amount=0;
         int temp[3];
         double tem;
         

                        for(int i=5 ;i<5000;i++)
                           {
                               tem=iCustom(NULL, 0, "ZigZag",13,0,i);
                               if(tem>0)
                               {
                                  temp[amount]=tem;
                                  amount++;
                                  if(amount>1)
                                  {
                                   i=5001;
                                  }
                               }                   
                                                     
                            }
                     
            if((temp[0]<temp[1])&&(total<1)&&(pc>temp[1]))
                      {
                         ticket=OrderSend(Symbol(),OP_BUY,1,Ask,1,0,0,"buy",0,0,Green);
                         OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES);
                         Print("buy");
                       }
            if((temp[0]>temp[1])&&(pc<temp[1]))
                      {
                        OrderClose(OrderTicket(),OrderLots(),Bid,1,Red);
                        Print("sale");
                        return(0);
                      }
                     
 return(0);
 
 } 

admin

  • Administrator
  • Hero Member
  • *****
  • Posts: 2386
Re: ทำไม EA ไม่เป็นตามที่เขียนครับ
« Reply #14 on: พฤษภาคม 23, 2010, 07:48:49 pm »
มันข้ามขั้นตอนไปครับ       
                          if(temp[0]>temp[1])
                      {
                        high=temp[0];
                        low=temp[1];
                        direct=1;
                     
                      }
                     
                          if(temp[0]<temp[1])
                      {
                        high=temp[1];
                        low=temp[0];
                        direct=2;
                     
                      }

ต้องใช้ตัวแปร high กับ low ในนี้เอาไปเปรียบเทียบครับ  เพราะค่าใน temp ไม่แน่นอนครับ บางครังมันเก็บค่าสูงบางตรั้งเก็บค่าต่ำ ตามการขึ้นลงของ zigzag ครับ