EA Programing => ปัญหาที่พบในการเขียน EA => Topic started by: vicvic on พฤศจิกายน 22, 2012, 06:09:39 pm
-
int lot=0.01;
if (OrdersTotal()==1)
{
lot=lot+0.01;
if(OrderType()==OP_SELL)
{
OrderSend(Symbol(),OP_BUYSTOP,lot,Ask+20*Point,3,Ask,Ask+20*Point);
}
else
{
OrderSend(Symbol(),OP_SELLSTOP,lot,Bid-20*Point,3,Bid,Bid-20*Point);
}
}
คือพอออเด้อทั้งหมดเหลือ1 ออเ้ด้อให้เชคค่าแล้วเปิดออเด้อ แต่ทำไมไม่เปิด ช่วยดูหน่อยคับ
อีกอย่างคับ ถ้าผมใช้เงื่อนไข
if (OrderProfit()<20) หมายความว่าถ้าออเด้อที่เปิดอยู่ขณะนั้นมีกำไรน้อยกว่า20 ใช่ไหมคับ เขียนอย่างนี้ถูกไหมคับ
-
ไม่มีคำสั่ง OrderSelect() ก่อนเรียกใช้งาน OrderType ครับเลยได้ค่าที่ไม่ถูกต้อง
if (OrderProfit()<20) หมายความว่าถ้าออเด้อที่เปิดอยู่ขณะนั้นมีกำไรน้อยกว่า20 ใช่ไหมคับ เขียนอย่างนี้ถูกไหมคับ
ใช้ครับ แต่ต้องมีคำสั่ง OrderSelect ก่อนเรียกใช้งาน OrderProfit ด้วยครับ
-
ขอบคุณคับ Admin ถามอีกหน่อยคับ พอดีมือใหม่ อ่านหนังสือแล้วไม่่ค่อยเข้าใจคับ
OrderSelect(int index, int select, int pool=MODE_TRADES)
index=ตำแหน่งของออเด้อ มีวิธีนับตำแหน่งหรือใส่ค่ายังไงบ้างคับ
แล้วถ้าเราจะถามว่า
ถ้าOrder ที่พึ่งปิดไปมีกำไรหรือไม่ จะกำหนดตำแหน่งและตั้งเงื่อนไขยังไงคับ
-
ใช้ loop ในการวนครับ
for(int i=0;i<OrdersTotal();i++)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
แบบนี้คือมันจะเริ่มตรวจสอบตั้งแต่ Order แรกที่เปิดจนถึง Order สุดท้าย
}
แต่ถ้าต้องการ Order สุดท้ายที่เปิด Order เดียวก็ใช้แบบนี้เลยครับ
OrderSelect(OrdersTotal()-1,SELECT_BY_POS,MODE_TRADES);
-
ไม่มีคำสั่ง OrderSelect() ก่อนเรียกใช้งาน OrderType ครับเลยได้ค่าที่ไม่ถูกต้อง
if (OrderProfit()<20) หมายความว่าถ้าออเด้อที่เปิดอยู่ขณะนั้นมีกำไรน้อยกว่า20 ใช่ไหมคับ เขียนอย่างนี้ถูกไหมคับ
ใช้ครับ แต่ต้องมีคำสั่ง OrderSelect ก่อนเรียกใช้งาน OrderProfit ด้วยครับ
ขอถามต่อยอดหน่อยครับ สมมติว่าเราเปิด short มากกว่า 1 order พอใช้คำสั่ง orderprofit() > 10 เพื่อให้มันปิด order ค่า order ที่มันเอามาวัดว่า > 10 รึเปล่า ปกติจะเป็น order หลังสุดทุกที
สมมติว่าผมจะให้มันดูเฉพาะ order แต่ละตัวว่า profit > 10 ให้ปิด order ต้องเขียนเพิ่มอย่างไรครับ ต้องวิ่งวน loop for เพื่อหาตำแหน่งแล้วเอามาทำ orderselect รึเปล่าครับ ตอนนี้ผมเขียนไว้แค่นี้ครับ
if(s1count > 0 )
{
if(OrderMagicNumber()==MagicNumber1)
{
if(OrderProfit() > 15)
{
OrderClose(OrderTicket(),OrderLots(),Bid,10,Green);
s1count--;
}
}
}
-
ไม่มีคำสั่ง OrderSelect() ก่อนเรียกใช้งาน OrderType ครับเลยได้ค่าที่ไม่ถูกต้อง
if (OrderProfit()<20) หมายความว่าถ้าออเด้อที่เปิดอยู่ขณะนั้นมีกำไรน้อยกว่า20 ใช่ไหมคับ เขียนอย่างนี้ถูกไหมคับ
ใช้ครับ แต่ต้องมีคำสั่ง OrderSelect ก่อนเรียกใช้งาน OrderProfit ด้วยครับ
ขอถามต่อยอดหน่อยครับ สมมติว่าเราเปิด short มากกว่า 1 order พอใช้คำสั่ง orderprofit() > 10 เพื่อให้มันปิด order ค่า order ที่มันเอามาวัดว่า > 10 รึเปล่า ปกติจะเป็น order หลังสุดทุกที
สมมติว่าผมจะให้มันดูเฉพาะ order แต่ละตัวว่า profit > 10 ให้ปิด order ต้องเขียนเพิ่มอย่างไรครับ ต้องวิ่งวน loop for เพื่อหาตำแหน่งแล้วเอามาทำ orderselect รึเปล่าครับ ตอนนี้ผมเขียนไว้แค่นี้ครับ
if(s1count > 0 )
{
if(OrderMagicNumber()==MagicNumber1)
{
if(OrderProfit() > 15)
{
OrderClose(OrderTicket(),OrderLots(),Bid,10,Green);
s1count--;
}
}
}
เพิ่มโค้ดเป็นอย่างนี้จะถูกรึยังครับ?
for(int j=0;j<OrdersTotal();j++)
{
if(s1count > 0 )
{
OrderSelect(j,SELECT_BY_POS,MODE_TRADES);
if(OrderMagicNumber()==MagicNumber1)
{
if(PlusADX < CurBaseADX && OrderProfit() > 15)
{
OrderClose(OrderTicket(),OrderLots(),Bid,10,Green);
s1count--;
}
}
}
ไม่รู้ว่าทำแบบนี้จะได้ค่า orderprofit() ของแต่ละ order อย่างถูกต้องรึยังครับ
-
จะเรียกดู profit ของ order โดยใช้ Magic number เป็นตัวหรอกหรือว่าต้องการอะไรครับ
-
จะเรียกดู profit ของ order โดยใช้ Magic number เป็นตัวหรอกหรือว่าต้องการอะไรครับ
คือที่จริงผมอยากรู้ว่า order ที่เปิดค้างไว้แต่ละใบมี profit เท่าไหร่บ้างอยากเลยอยากให้มันโชว์ให้เห็นครับ แล้วพอ profit ได้ถึงระดับนึงแล้วจะสั่งให้มันปิด order ให้ครับ
ถ้าผมใช้แค่ code ที่เขียนแบบไม่วน loop for มันจะได้ค่า orderprofit ของตั๋วใบล่าสุดเท่านั้น พอใส่ loop เข้าไปก็ไม่แน่ใจอีกว่ามันถูกรึยังครับท่าน
ปล. หนังสือที่ท่าน admin เขียนนี่มีขายที่ไหนบ้างครับ? หนังสือชื่ออะไรเอ่ย? กะว่าจะเอามาอ่านเป็นความรู้หน่อยครับ ^^
-
double temp[100];
for(int j=0;j<OrdersTotal();j++)
{
OrderSelect(j,SELECT_BY_POS,MODE_TRADES);
temp[j] = OrdersTotal();
Print("Order : ",j+1," Profit is " ,OrderProfit() );
}
ส่วนหนังสือสั่งได้ที่นี้เลยครับ http://www.serv4fx.com/mtbook/orderbook.php ไม่ได้วางขายตามท้องตลาด ครับ
-
แล้วถ้า อีเอเราทำงานจนกระทั่งวันนี้มีกำไรแล้วจะหยุดแล้วค่อยไปเริ่มทำตามสูตรใหม่ในวันพรุ่งนี้ มีคำสั้งเงื่อนไขไหนให้ใช้บ้างอะคับ
อีกอย่างคับเผลอไปกดอะไรไม่รู้คับเวลาพิมพ์ไทยจะเป็นภาษาต่างดาวแต่ภาษาอังกฤษปกติ ลองเปลี่ยน font ใน option เป็น fixedsys thai ก็จะพิมพ์ไทยได้แต่ไม่ค่อยตรงเท่าไหร่ตัวหนังสือก็แปลกๆคับ ท่านใดพอรู้บ้างคับ ผมแก้ไม่ได้สักที
-
แล้วถ้า อีเอเราทำงานจนกระทั่งวันนี้มีกำไรแล้วจะหยุดแล้วค่อยไปเริ่มทำตามสูตรใหม่ในวันพรุ่งนี้ มีคำสั้งเงื่อนไขไหนให้ใช้บ้างอะคับ
อีกอย่างคับเผลอไปกดอะไรไม่รู้คับเวลาพิมพ์ไทยจะเป็นภาษาต่างดาวแต่ภาษาอังกฤษปกติ ลองเปลี่ยน font ใน option เป็น fixedsys thai ก็จะพิมพ์ไทยได้แต่ไม่ค่อยตรงเท่าไหร่ตัวหนังสือก็แปลกๆคับ ท่านใดพอรู้บ้างคับ ผมแก้ไม่ได้สักที
ฟังก์ชั่นให้หยุดอัตโนมัติไม่มีครับ ต้องเขียนให้ EA ไปอ่านข้อมูลที่ Orderhistory โดยการรวม Profit ของ order ที่ถูกปิดไปในวันนี้ครับ ถ้าหากผลรวมเป็นบวกก็หยุดการทำงานครับ หากไม่ใช่ก็ให้ทำงานต่อ ส่วนภาษาไทยใน Metadeitor ก็ได้เต็มที่แบบที่คุณเห็นครับโชว์รูปแบบอักษรแปลกๆเพราะมันไม่ได้รองรับภาษาไทย 100 % ครับ
-
ถ้าผลรวมเป็นบวกก็ให้หยุดการทำงาน
ใช้ฟังชั่นไหนหรอคับ หรือช่วยยกตัวอย่างหน่อยคับ
-
หยุดทำงานใช้คำสั่ง return (0); ครับ
อยากให้หยุดตรงไหนก็ไปวางไปตรงนั้น
-
ขอบคุณคับ คุณ D_Diamond
-
if ((Ask-Bid) > 0.0005 ) return(0);
ผมเขียนเงื่อนไขเชคเสปรดอย่างนี้ได้เปล่าคับ หรือเขียนแบบไหนได้บ้างคับ
อีกข้อคับ คือผมลองเขียนอีเอ buystop กับ sellstop ทั้งสองฝั่งกำไร 20 พอยค์ตัด ขาดทุน10 ตัด วนไปเรื่อยๆ ทำำไมเวลาเทส ใช้ m1 ก็ออกมาอย่าง ใช้ m15 m30 ก็ออกมาไม่เหมือนกัน ผมไม่ได้ใช้ indy อะไรเลย จริงๆแล้วราคาติ๊กมันเหมือนกันหมดไม่ใช้หรอคับ
-
๑. ได้ครับ เขียนแบบนั้นใช้ได้ที้ง ๔ และ ๕ หลัก แต่ใช้กับ ๒ และ ๓ หลัก อย่างเงินเยนหรือทองไม่ได้
๒. นอกจากอินดิเคเตอร์ ยังมี open high low close ด้วยครับ ถ้าไม่ได้ใช้เลย แล้วเทสแบบ everytick ผลควรเหมือนกันเป๊ะ ถ้าไม่เหมือนคือดาต้าไม่สมบูรณ์ครับ
-
if ((Ask-Bid) > Point *5 ) return(0); แบบนี้จะใช้ได้กับทุกค่าเงิน ทุกโบรเกอร์ไม่ว่าจะ 4 จุด หรือ 5 จุด แต่ถ้าเปลี่ยนเลข 5 เป้นตัวแปรจะทำให้ปรับค่าได้ตรง input อีกครับ
-
อยากจะขอ data หน่อยคับ eurusd1 และำ eurusd30 ใครมีช่วยup ให้หน่อยคับ ผมลองโหลดจากเวปนอก พอมาเทสแล้วมันได้ผลไม่เหมือนกันเลยงง งง คับพอมาเชค data ก็ไม่ตรงกัน วันเดียวกัน m1 กับ m30 ดันไม่เหมือนกัน จริงก็ควรจะมีไว้ปักมุดหลายสกุลเงินเลยนะคับ เพราะมันก็เป็นส่วนหนึ่งที่จำเป็นของคนเขียนอีเอแล้วเทส จะได้มีข้อมูลที่แน่นอนและเหมือนกันไม่ต้องไปหาโหลดจากที่อื่นแล้วทดลองกันผิดผิดถูกถูก ขอบคุณคับสำหรับทุกคำตอบ
-
เหมือนเค้าจะว่าไว้ว่า จะเล่นโบรกไหนก็ต้องใช้ data ของโบรกนั้นนะครับ
เพราะ data ของแต่ละโบรกก็ไม่เหมือนกัน ทั้งในส่วนของ spread, ask-bid, high-low
ผมว่า ปักหมุดเรื่อง " วิธีการโหลด data เพื่อทำ back test ของ EA " น่าจะดีกว่าครับ
ใครเป๊ะเรื่องนี้ รบกวนช่วยเขียนขั้นตอนให้ด้วยครับ
-
ผมใช้ของ fxclearing สเปรด 1จุด ใครพอมีบ้างคับ ช่วยโพสหน่อยคับ