EA Programing => ปัญหาที่พบในการเขียน EA => Topic started by: tanachart on กรกฎาคม 25, 2015, 05:41:51 pm
-
คือความต้องการของผม คือ การที่เปิด BuyStop แล้ว ภายใน 16 bar ไม่เทรด ให้ทำการ Delete Pending Order นั้น ทิ้งครับ
หรือ อาจจะเขียนว่าให้ เปิด BuyStop แล้ว ภายใน 4 ชั่วโมง (หรือH4 )ไม่ทำการเทรด ให้ทำการ Delete Order
ตอนแรกผมเขียน
void ChkDelete(){
if(bars+16 == Bars){
if(CountOrder(OP_BUYSTOP) == 0){
DeleteOrder(OP_BUYSTOP);
}
if(CountOrder(OP_SELLSTOP) == 0){
DeleteOrder(OP_SELLSTOP);
}
}
}
ChkDelete();
if(bars != Bars){
if(Lips > Jaws && LipsSH < JawsSH && Sto > StoHigh && StoSH > StoHigh ){
if(CountOrder(OP_BUY)<MaxOrder){
//OpenBuy();
OpenBuystop();
}
}
if(Lips < Jaws && LipsSH > JawsSH && Sto < StoLow && StoSH < StoLow ){
if(CountOrder(OP_SELL)<MaxOrder){
//OpenSell();
OpenSellstop();
}
}
bars = Bars;
}
แล้วมัน Delete แค่ Barเดียว อะคับ
อยากกำหมดให้ได้หลายBar หรือ Delete Order ตอนครบเวลา H4 แบบนี้อะคับ ต้องเขียนว่ายังไงบ้างครับ ผม งง มากมายเลยอะคับ
ขอบคุณครับ (ผมมือใหม่)
-
ถ้าต้องการ Delete Order ตอนครบเวลา H4
ใช้ OrderSelect วน loop +OrderOpenTime() เรียกเวลาตอนเปิด Order ให้มาเปรียบเทียบกับเวลา ปัจจุบัน ใช้ TimeCurrent() แล้วนำเวลาตั้ง 2 ค่ามาหักลบกันถ้ามากกว่า 4 ชั่วโมงก็สั่งปิด order เลย
-
ขอรบกวนด้วยได้ไหมคับ Admin ว่าต้องเขียนแบบไหน
ผมนึกไม่ออกจริงๆ คับ ขอบคุณครับ
-
bars ต้องประกาศที่ global ด้วยนะ
void ChkDelete(){
if(bars+16 == Bars){
if(CountOrder(OP_BUYSTOP) > 0){
DeleteOrder(OP_BUYSTOP);
}
if(CountOrder(OP_SELLSTOP) > 0){
DeleteOrder(OP_SELLSTOP);
}
}
-
ประกาศแบบไหนครับ คือผมลองทำEA เอง โโยไม่ค่อยมีความรู้ด้านนี้เท่าไร เลยอยากให้กูรูเข้ามาช่วยอะคับ
Bar ตรงนั้น เหมือนกะว่าจะ+ไม่เกิน 1 อะคับ นอกนนั้น จะไม่เข้าเงื่อนไข ก็เลยไม่รู้จะทำยังไงให้ คำนวนการ Delete Order อะ ผมยังไม่รู้ว่าจะเขียงยังไง
เลยอยากรบกวนพี่ๆเข้ามาช่วยผมหน่อยอะครับ
ยังไง ถ้าได้เป็น Codeมาเลย ผมจะขอบพระคุณอยากยิ่งเลยครับ ... ขอบคุณมากครับ
-
int start()
{
for(int i=0 ;i<OrdersTotal();i++)
{
int a= OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(TimeDay(TimeCurrent())- TimeDay(OrderOpenTime()) > 14400)
{
if(OrderType()==OP_BUYSTOP)
{
a= OrderDelete(OrderTicket());
}
}
}
return (0);
}