Open Forex4you Account

Server รัน EA 1000 / ปี

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

Author Topic: EA เปิด pending order ให้ไม่ครบ  (Read 20793 times)

be

  • Newbie
  • *
  • Posts: 32
EA เปิด pending order ให้ไม่ครบ
« on: เมษายน 07, 2013, 10:24:38 pm »
ผมได้ทดลองเขียน EA ประมาณนี้ครับ
เป็น EA pending buy กับ sell

int start()
{     


int total=OrdersTotal();
if(total==0)

   
   {
   
   OrderSend(Symbol(), OP_BUYSTOP...........................
   OrderSend(Symbol(), OP_SELLSTOP.........................
  }
 
    return (0);
 }

ปัญหาคือ

บางทีก็เปิดไ้ด้ครบทั้งสองออเดอร์ บางทีก็เปิดได้ออเดอร์เดียว
บางโบรกเกอร์ก็เปิดได้ทั้งสองออเดอร์ บางโบรกเกอร์ก็เปิดได้ออเดอร์เดียว

รบกวนช่วยดูให้ผมหน่อยครับ ว่าทำยังไงจะเปิดออเดอร์ได้ 2 ออเดอร์พร้อมกันแบบชัวๆ
รบกวนขอ code ตัวอย่างด้วยก็ดีครับ ผมเขียนไม่เก่ง ไม่ค่อยเข้าใจเท่าไหร่

หมายเหตุ ผมใช้โบรก exness 5 จุด ครับ

ขอบคุณครับ  ??? ??? ???


D_Diamond

  • Hero Member
  • *****
  • Posts: 673
    • Expert Forex Trading
Re: EA เปิด pending order ให้ไม่ครบ
« Reply #1 on: เมษายน 07, 2013, 10:30:16 pm »
โบรก exness 1 คำสั่งต้องรอ 2 วิเป็นอย่างน้อย
วิธีแก้คือเปิดทีละอันครับ  จำเป็นอะไรต้องพร้อมกันในเมื่อเป้น pending

be

  • Newbie
  • *
  • Posts: 32
Re: EA เปิด pending order ให้ไม่ครบ
« Reply #2 on: เมษายน 07, 2013, 10:51:44 pm »
โบรก exness 1 คำสั่งต้องรอ 2 วิเป็นอย่างน้อย
วิธีแก้คือเปิดทีละอันครับ  จำเป็นอะไรต้องพร้อมกันในเมื่อเป้น pending

ขอบคุณครับ

int start()
{     


int total=OrdersTotal();
if(total==0)

   
   {
   
   OrderSend(Symbol(), OP_BUYSTOP...........................
  }


{
 OrderSend(Symbol(), OP_SELLSTOP.........................
  }
 
    return (0);
 }

ผมลองเขียนแยกแบบนี้ดู ก็ยังไม่ได้อะครับ
 คือผมยัง งงๆ อยู่ว่าถ้าเปิดอันหนึ่งแล้ว พอไปเจอ if(total==0)
มันไม่เปิดต่ออะครับ

D_Diamond

  • Hero Member
  • *****
  • Posts: 673
    • Expert Forex Trading
Re: EA เปิด pending order ให้ไม่ครบ
« Reply #3 on: เมษายน 07, 2013, 10:57:38 pm »
พอเปิดไปแล้วมันก้ไม่ 0 แล้วสิครับ

be

  • Newbie
  • *
  • Posts: 32
Re: EA เปิด pending order ให้ไม่ครบ
« Reply #4 on: เมษายน 07, 2013, 11:17:02 pm »
พอเปิดไปแล้วมันก้ไม่ 0 แล้วสิครับ

 ??? ??? แล้วจะเขียนยังไงดีครับ ยังนึกไม่ออกอะครับ

ขอบคุณครับ

admin

  • Administrator
  • Hero Member
  • *****
  • Posts: 2386
Re: EA เปิด pending order ให้ไม่ครบ
« Reply #5 on: เมษายน 07, 2013, 11:52:15 pm »
วิธีแก้ที่ง่ายที่สุดใส่ Sleep() เข้าไปตัวเดียวจบครับ

int start()
{     


int total=OrdersTotal();
if(total==0)

   
   {
   
   OrderSend(Symbol(), OP_BUYSTOP...........................
    Sleep(5000); // ให้มันรอสัก 5 วินาทีน่าจะเปิดได้ sure ถ้าไม่ได้อีกใส่ให้มันนานกว่านั่นเข้าไปอีกครับ
   OrderSend(Symbol(), OP_SELLSTOP.........................
  }
 
    return (0);
 }

be

  • Newbie
  • *
  • Posts: 32
Re: EA เปิด pending order ให้ไม่ครบ
« Reply #6 on: เมษายน 07, 2013, 11:59:19 pm »
วิธีแก้ที่ง่ายที่สุดใส่ Sleep() เข้าไปตัวเดียวจบครับ

int start()
{     


int total=OrdersTotal();
if(total==0)

   
   {
   
   OrderSend(Symbol(), OP_BUYSTOP...........................
    Sleep(5000); // ให้มันรอสัก 5 วินาทีน่าจะเปิดได้ sure ถ้าไม่ได้อีกใส่ให้มันนานกว่านั่นเข้าไปอีกครับ
   OrderSend(Symbol(), OP_SELLSTOP.........................
  }
 
    return (0);
 }

ขอบคุณครับ

แต่ Sleep นี่ใช้ แบ็คเทสไม่ได้ใช่ป่าวครับ ผมอยากให้ แบ็คเทสได้ด้วยอะครับ

ผมลองเขียนแบบนี้ก็ยังไม่ได้อะครับ ไม่รู้ผิดตรงไหน มันเปิดบายอย่างเดียว ไม่ยอมเปิดเซล

int start()
{     


int total=OrdersTotal();
if(total==0)

   
   {
   
   OrderSend(Symbol(), OP_BUYSTOP...........................
   }
   
   {
  if(total==1)
  {   int pendingbuy;
 
  for(int j=0;j<total;j++)
        {
            OrderSelect(j,SELECT_BY_POS,MODE_TRADES);
             if(OrderType()==OP_BUYSTOP)
             { pendingbuy=pendingbuy+1;
           } 
 
 
  {
     
   if(pendingbuy==1)
   
   }
   
   OrderSend(Symbol(), OP_SELLSTOP.........................
  }
  }
 
 
  } 
  } 
  }
       
        return (0);
 }
   
   

admin

  • Administrator
  • Hero Member
  • *****
  • Posts: 2386
Re: EA เปิด pending order ให้ไม่ครบ
« Reply #7 on: เมษายน 08, 2013, 12:03:49 am »
Backtest มันเปิดได้ครบอยู่แล้วไม่ต้องไปสนใจ Sleep เลยครับ  Sleep นี้แก้ปัญหาเวลา Demo กับ Trade จริงเลย ไม่ต้องไปทำอะไรให้วุ่นวายหรอกครับ

be

  • Newbie
  • *
  • Posts: 32
Re: EA เปิด pending order ให้ไม่ครบ
« Reply #8 on: เมษายน 08, 2013, 12:09:48 am »
Backtest มันเปิดได้ครบอยู่แล้วไม่ต้องไปสนใจ Sleep เลยครับ  Sleep นี้แก้ปัญหาเวลา Demo กับ Trade จริงเลย ไม่ต้องไปทำอะไรให้วุ่นวายหรอกครับ


ขอบคุณครับ

ปัญหาตอนนี้ของผมคือ ผมแบ็คเทสกับโบรก exness แต่ผลปรากฏว่ามันเปิดได้ไม่ครบอะครับ บางครั้งก็ครบ บางครั้งก็ไม่ครบอะครับ ผม งงเลย

มันเหมือนกับว่าส่งคำสั่งไป 2 pending แล้วเปิดได้ pending เดียว
พอมาเจอ if(total==0) อีกทีก็เลยหยุดส่งคำสั่ง เพราะ total ไม่เท่ากับศูนย์แล้ว (ผมเดาเอาครับ)
« Last Edit: เมษายน 08, 2013, 12:23:34 am by be »

veronika

  • Newbie
  • *
  • Posts: 44
Re: EA เปิด pending order ให้ไม่ครบ
« Reply #9 on: เมษายน 08, 2013, 03:44:09 am »
นับ Limit สิครับ นับแยกไปเลย ^^

เอาของผมไปใช้ก็ได้ ^^
Quote
//+------------------------------------------------------------------+
//| Count Sell Limit Order                                                 |
//+------------------------------------------------------------------+
int CountSellLimit()
  {
   int sells=0;
//----
   if(OrdersTotal()==0) sells=0;
   else {
      for(int i=0;i<OrdersTotal();i++){
         if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA)
           {
            if(OrderType()==OP_SELLLIMIT)  sells++;
           }
      }
   } 
//----
   if(sells>0) return(sells);
  }
แล้วก็เอาไปใช้ประมาณนี้ครับ

Quote
int start()
{     
if(CountSellLimit()==0){
    OrderSend(Symbol(), OP_SELLSTOP.........................
}
if(CountBuyLimit()==0){
   OrderSend(Symbol(), OP_BUYSTOP...........................
 
  } 
    return (0);
 }

ก็ประมาณนี้ครับ ลองเอาไปประยุกต์ดูนะ  8)

D_Diamond

  • Hero Member
  • *****
  • Posts: 673
    • Expert Forex Trading
Re: EA เปิด pending order ให้ไม่ครบ
« Reply #10 on: เมษายน 08, 2013, 10:23:24 am »
ถ้าโค้ดเดิมมันเป็นแบบนี้

int start()
{     


int total=OrdersTotal();
if(total==0)

   
   {
   
   OrderSend(Symbol(), OP_BUYSTOP...........................
   OrderSend(Symbol(), OP_SELLSTOP.........................
  }
 
    return (0);
 }


ก็แค่แก้แบบนี้เองครับ

int start()
{     


int total=OrdersTotal();
if(total==0)

   
   {   
   OrderSend(Symbol(), OP_BUYSTOP...........................
  }

if(total==1)

   
   {
   
   OrderSend(Symbol(), OP_SELLSTOP.........................
  }

 
    return (0);
 }

be

  • Newbie
  • *
  • Posts: 32
Re: EA เปิด pending order ให้ไม่ครบ
« Reply #11 on: เมษายน 08, 2013, 10:52:50 am »
ขอบคุณทุกท่านครับ


ตอนนี้คิดว่าน่าจะได้ละครับ
ผมลองเขียนเป็นแบบนี้ครับ

////////////////////////////////////////////////////////////////////////
int start()
  {
   
   int buystop=0;
   int sellstop=0;
   int buy=0;
   int sell=0;
   
   
   
   for(int i=0;i<OrdersTotal();i++)
     {

       OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
       if(OrderType()==OP_BUYSTOP)
          buystop++;
       if(OrderType()==OP_SELLSTOP)
          sellstop++;
       if(OrderType()==OP_BUY)
          buy++;
        if(OrderType()==OP_SELL)
          sell++;     
     
       
     }



if(buystop==0 && buy==0)
{
     OrderSend(Symbol(), OP_BUYSTOP...........................
  }
 
if(sellstop==0 && sell==0)
  {
    OrderSend(Symbol(), OP_SELLSTOP.........................
  }
 
   return(0);
  }
« Last Edit: เมษายน 08, 2013, 10:55:44 am by be »