EA Programing => ปัญหาที่พบในการเขียน EA => Topic started by: phanom on สิงหาคม 14, 2009, 10:31:04 am
-
ตามรูป
ผมอยากจะให้ อีเอ มันอ่านค่า ZigZag
ใช้โค๊ด iCustom ยังไงให้มันอ่านค่า Peak ต่างๆ
หรือว่าต้องใช้ฟังชั่นอื่น ;D
-
ขอถามเพิ่มครับ peak ต่างๆๆ นี้คืออะไรครับ ผมเข้าใจว่าเป็นค่าสูงสุดต่ำสุด ที่ ZigZag กลับตัวใช่ไหมครับ หรือว่าเป็นค่า 1 2 3 4 5 ครับ งงนิดหน่อยคำว่าค่า peak
-
peak หมายถึง สูงสุด และ ต่ำสุด ตรงมุมแหลมๆ ของ ZigZag
ว่ามีค่าเท่าไหร่ ย้อนหลังกลับไป 5-6 ค่า น่ะครับ
จะได้เอามาให้ อีเอ มันคำนวณหาเทรน แนวรับ แนวต้าน
ขอบคุณล่วงหน้า ;D
-
peak หมายถึง สูงสุด และ ต่ำสุด ตรงมุมแหลมๆ ของ ZigZag
ว่ามีค่าเท่าไหร่ ย้อนหลังกลับไป 5-6 ค่า น่ะครับ
จะได้เอามาให้ อีเอ มันคำนวณหาเทรน แนวรับ แนวต้าน
ขอบคุณล่วงหน้า ;D
คุณพนมขอผม 5-6 ค่า ผมให้คุณพนม 10 ค่าเลยครับ ต้องอธิบายก่อนเนื่องจากค่า อินดิเคเตอร์ zigzag มันไม่ได้ส่งค่าออกมาให้ตลอดส่วนใหญ่แล้วค่าที่มันส่งออกมาคืน 0 ครับ ช่วงที่มันส่งค่า 0 ออกมาก็คือช่วงที่มันเลย peak ไปแล้ว แต่ตามหลักการอินดิเคอเตอร์ใน mt4 มันต้องใช้ index เก็บค่าตามกราฟตลอด จากหลักการนี้ทำให้เรารู้ว่า ค่า peak นั่นก็ถูกเก็บอยู่ใน index แต่เราไม่ทราบว่าเป็น index ที่เท่าไรใช่ไหมครับ ผมจึงใช้ while เพื่อ test ค่า zigzag ปัจจุบันก่อนว่าเป็น 0 ใช่ไหมถ้าใช่ ผมเลยใช่ for เพื่อใช้เป็นตัวชี้ index เพื่อหาค่า peak เมื่อเจอค่า peak ผมก็สังให้มันเก็บเอาไวในตัวแปรเพื่อที่จะ show ออกมาด้วยคำสั่ง print เมื่อ ea มันหาค่า peak ได้ 10 ค่าก็จบ loop หาค่า peak โดยการทำลายเงื่อนไขมัน จากนั่นก็ show ออกมาด้วยคำสั่ง print ด้านล่าง ผลลัพธ์ที่แสดงออกมาจะเริ่มจาก peak ตัวที่ใกล้ราคาปัจจุบันมากที่สุด ไปจบครบ 10 ในส่วนที่เก็บค่าสามารถใช้ loop เพื่อเขียนให้เก็บค่าได้แต่ผมใช้วิธีง่ายในการเก็บค่าเพราะอยากให้เห็นชัดๆๆตรงนี้อย่าว่ากันนะครับที่ผมเขียน code เหมือนเด็กไม่เป็นระเบียบ
int start()
{ double tem=0;
double val=iCustom(NULL, 0, "ZigZag",13,0,0);
Print("Var : ",val);
if(val==0)
{ double show[10];
int time=0;
while(tem==0)
{
for(int i=0 ;i<5000;i++)
{
tem=iCustom(NULL, 0, "ZigZag",13,0,i);
tem=tem;
if(tem >0)
{
if(time==10)
{show[10]=tem;time++; i=5000; }
if(time==9)
{show[9]=tem;time++;}
if(time==8)
{show[8]=tem;time++;}
if(time==7)
{show[7]=tem;time++;}
if(time==6)
{show[6]=tem;time++;}
if(time==5)
{show[5]=tem;time++;}
if(time==4)
{show[4]=tem;time++;}
if(time==3)
{show[3]=tem;time++;}
if(time==2)
{show[2]=tem;time++;}
if(time==1)
{show[1]=tem;time++;}
if(time==0)
{show[0]=tem;time++;}
}
}
}
}
for( int a=0;a<10;a++)
{
Print("PEAK ",a," :", show[a]);
}
return(0);
}
-
ขอบคุณครับ
เดี๋ยวเอาไปลองดูก่อน มีปัญหาไร เดี๋ยวกลับมาถามใหม่ ;D
-
ถามต่อหน่อยนะครับ
จากรูปในโพสแรกนี่ถ้าต้องการเข้าที่ตอนทะลุ2เลยไม่เอา 0 ได้มั๊ย
ประมาณ
0 => จุดที่จะเข้า
1 => 0
2 => 1
จะตั้งการอ่านค่ายังไง
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==0)&&(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");
}
return(0);
ได้มั๊ยครับ ผิดตรงไหนบอกที ไม่ค่อยเข้าใจการอ่านค่า หรือรูปที่เข้าจากที่เขียนเป็นแบบไหนรบกวนอธิบายทีครับ
-
ต้องการแค่ราคามากกว่า 2 ขี้นไปแล้วเปิด buy เลยใช่ไหม
-
ความหมานเหมือนในรูปครับ ไม่แน่ใจว่าเขียนถูกมั๊ย
-
ลองเอาไปดูครับเป็นตัวที่คุณเขียนไวอีกกระทู้หนึ่งผมเอาไปแก้ต้อ ลอง test ดูน่าจะทำงานได้ตามภาพแล้วนะครับ
-
ถามเพิ่มหน่อย มีวิธีให้โปรแกรมจำค่าที่ได้ตอนเปิดลองไว้จนกว่าจะขายมั๊ยครับ
แล้วพอขายก็ลบค่าทั้งหมดทิ้งเพื่อรับค่าใหม่ทั้งหมดไม่เอาค่าเดิมมาคิดเลย
-
ท่าน Adminและท่านผู้รู้ ครับ
กรณีที่เราต้องการตั้งค่าใน indicator เป็นค่าอื่น (ExtDepth=20)
แต่ค่าที่เราดึงมาโดยใช้คำสั่ง icustom ยังเป็นค่าเดิมคือ ExtDepth=12
พอมีวิธีที่จะเอาโค๊ดของ zigzag มาเป็นส่วนหนึ่งของอีเอได้ไหมครับ จะได้ตั้งค่าตัวแปรได้เองเลย ไม่ต้องการ compile indicator เพื่อปรับเปลี่ยนค่าตัวแปร
-
ใน icustom ตำแหน่งหลังชื่อ อินดี้เคเตอร์ มันให้เราส่งค่าผ่านไปได้ ลองเปลี่ยนตรงนี้ดูก่อนถ้าไม่ได้ ก็ต้องแก้ที่ตัวอินดี้ครับ ส่วน วิธีเอา code อินดี้มาใส่ ใน EA ตรงๆเลยน่าจะลำบากครับเพราะ บางฟังก์ชั่น ที่อินดี้ใช้ไม่สามารถเรียกใช้งานตอนเป้น EA ได้ครับ
-
ใน icustom ตำแหน่งหลังชื่อ อินดี้เคเตอร์ มันให้เราส่งค่าผ่านไปได้ ลองเปลี่ยนตรงนี้ดูก่อนถ้าไม่ได้ ก็ต้องแก้ที่ตัวอินดี้ครับ ส่วน วิธีเอา code อินดี้มาใส่ ใน EA ตรงๆเลยน่าจะลำบากครับเพราะ บางฟังก์ชั่น ที่อินดี้ใช้ไม่สามารถเรียกใช้งานตอนเป้น EA ได้ครับ
ขอบคุณมากเลยครับ