Open Forex4you Account

Server รัน EA 1000 / ปี

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

Author Topic: รบกวนถามเรื่องเกี่ยวกับการเปิด pending order ครับ  (Read 10622 times)

mildassassin

  • Jr. Member
  • **
  • Posts: 59
ผมอยากจะรบกวนช่วยตอบปัญหาให้ผมหน่อยน่ะครับ
คือว่า ผมจะให้ ea ทำการเปิด pending order ทั้ง buy และ sell ตามค่าของ high และ low ของกราฟแท่งก่อนหน้าน่ะครับ
คือ ผมจะให้ทำการเปิด pending order buy ที่ค่า high ของกราฟแท่งก่อนหน้า
และจะให้เปิด pending order sell ที่ค่า low ของกราฟแท่งก่อนหน้ืาน่ะครับ

ผมลองทำแบบนี้ดูแล้วลอง backtest ดูน่ะครับ ปรากฎว่ามันเปิดออเดอร์ไม่หยุดเลยน่ะครับ
ผมเลยงงว่ามันผิดตรงไหนน่ะครับ

   if (lastday != iTime(NULL, PERIOD_D1, 0))
   {    
    OrderSend(Symbol(), OP_SELLSTOP, 0.01, lowbar, 1, lowbar + (300 * Point), lowbar - (50 * Point), "ea", MagicNumber, 0, Red);
    OrderSend(Symbol(), OP_BUYSTOP, 0.01, highbar, 1, highbar - (300 * Point), highbar + (50 * Point), "ea", MagicNumber, 0, Green);
    lastday = iTime(NULL, PERIOD_D1, 0);
   }

ถามต่ออีกข้อนึงนะครับ

ถ้าสมมติว่า มีกราฟแท่งใหม่ปรากฎขึ้นมา ผมอยากให้ลบ pending order ที่เปิดค้างเอาไว้จากกราฟก่อนหน้านี้
สมมติว่า วันที่ 2 เอาค่า high กับ low จากวันที่ 1 มาเปิด เรียบร้อยแล้ว และก็ผ่านวันที่ 2 ไป
กราฟของวันที่ 3 ก็ปรากฎขึ้น จะให้ลบค่า pending order ที่ค้างจากวันที่ 2 และเอาค่าของ high กับ low ของวันที่ 2 มาเปิด pending order แทน (งงมั๊ยครับเนี่ย)

รบกวนผู้รู้ช่วยตอบให้ทีนะครับ
ขอบคุณครับ
« Last Edit: ธันวาคม 03, 2010, 11:41:23 pm by mildassassin »

admin

  • Administrator
  • Hero Member
  • *****
  • Posts: 2386
แก้ตรงนี้ก่อนค่อยไปดูที่อื่นครับ (lastday != iTime(NULL, PERIOD_D1, 0))
iTime มันเป็นค่าชนิด datetime ซึงคุณกำหนด 0 แบบนี้หมายถึงเวลาของกราฟในวันปัจจุบันครับหากกราฟในวันนี้ไม่จบเวลาก็เปลี่ยนไปเรื่อยมันจะทำให้ เงื่อนไขเป็นจริงตลอดเลยชื้อตลอดครับ

mildassassin

  • Jr. Member
  • **
  • Posts: 59
งั้นขอถามต่อนะครับ
พอดีผมไปเจอกระทู้นึงที่ถามเกี่ยวกับการเปิด pending order ทั้ง buy และ sell พร้อมกันน่ะครับ

http://www.thaiforexea.com/index.php/topic,845.0.html

หลังจากที่เจอแล้วผมลองเอาไปแก้ไขใช้ดูปรากฎว่าใช้ได้ครับ
แต่ ถ้าผมไม่ต้องการให้มันลบออเดอร์ที่กราฟไม่ได้ไปวิ่งชนน่ะครับ
และจะให้มันเปิดแค่ ด้านละ 1 order (buy 1 order และ sell 1 order) ต่อ 1 วัน
ผมต้องไปแก้ไขตรงไหนครับ (ขออนุญาตนำตัวอย่างจากกระทู้ที่ผมแจ้งไว้ด้านบนมาแสดงตรงนี้นะครับ)

extern double Lot=0.1;
extern int Magic=12356;

int start()
{     int total=OrdersTotal();
if(total==0)
{
    OrderSend(Symbol(),OP_SELLSTOP,Lot,Bid-Point*10,3,0,0,"EA",Magic,0,Red);
    Sleep(1000);
    OrderSend(Symbol(),OP_BUYSTOP,Lot,Ask+Point*10,3,0 ,0 ,"EA",Magic,0,Green);
  }
       
      if(total==2)
      {   int buy ,sell;
     
        for(int i=0;i<total;i++)
        {
            OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
             if(OrderType()==OP_BUY)
             { buy=buy+1;
             }
             
              if(OrderType()==OP_SELL)
             {
              sell=sell+1;
             }
             
           
     
         }
         if(buy==1 || sell==1)
         {
              for( i=0;i<total;i++)
        {
            OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
             if(OrderType()==OP_BUYSTOP)
             { OrderDelete( OrderTicket());
             }
             
              if(OrderType()==OP_SELLSTOP)
             {
            OrderDelete( OrderTicket());
             }
             
           
     
         }
         
         }
     
     
     
     
      }
       
       
       
       
        return (0);
 }

ขอบคุณครับ

admin

  • Administrator
  • Hero Member
  • *****
  • Posts: 2386
extern double Lot=0.1;
extern int Magic=12356;

int start()
{     int total=OrdersTotal();
if(total==0)
{
    OrderSend(Symbol(),OP_SELLSTOP,Lot,Bid-Point*10,3,0,0,"EA",Magic,0,Red);
    Sleep(1000);
    OrderSend(Symbol(),OP_BUYSTOP,Lot,Ask+Point*10,3,0 ,0 ,"EA",Magic,0,Green);
  }
       
      if(total==2)
      {   int buy ,sell;
     
        for(int i=0;i<total;i++)
        {
            OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
             if(OrderType()==OP_BUY)
             { buy=buy+1;
             }
             
              if(OrderType()==OP_SELL)
             {
              sell=sell+1;
             }
             
           
     
         }
         
     
     
     
     
      }
       
       
       
       
        return (0);
 }

tanapai

  • Jr. Member
  • **
  • Posts: 50
  • เล่นจริงเจ็บจริง รู้ให้จริง ๆ ไม่รู้ก็ถาม อิ ๆ
    • เทรด forex ไม่ต้องนั่งหน้าคอม ด้วยการ copy คนเก่ง ๆ คลิก
extern double Lot=0.1;
extern int Magic=12356;

int start()
{     int total=OrdersTotal();
if(total==0)
{
    OrderSend(Symbol(),OP_SELLSTOP,Lot,Bid-Point*10,3,0,0,"EA",Magic,0,Red);
    Sleep(1000);
    OrderSend(Symbol(),OP_BUYSTOP,Lot,Ask+Point*10,3,0 ,0 ,"EA",Magic,0,Green);
  }
       
      if(total==2)
      {   int buy ,sell;
     
        for(int i=0;i<total;i++)
        {
            OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
             if(OrderType()==OP_BUY)
             { buy=buy+1;
             }
             
              if(OrderType()==OP_SELL)
             {
              sell=sell+1;
             }
             
           
     
         }
         
     
     
     
     
      }
       
       
       
       
        return (0);
 }

ถ้าเราจะแก้ไขจากข้างบนให้เป็นแบบนี้ได้ปะคับท่าน ADMIN

1.ให้มีมี sl = 50 และ tp = 30
2. และก็เมื่อราคาวิ่งถึงด้าน BUY ก็ให้เพิ่ม SALLSTOP ที่จุดเดิม(จุดที่ sellstop เดิม) เพิ่ม lot x 2 ( ถ้าวิ่งถึง SELL ก็ BUYSTOP ที่จุดเดิม เพิ่ม lot x 2)
3. จากข้อ 2 ถ้าราคาไม่ชน tp ก็เพิ่มไปเลื่อย ๆ ถ้าราคาชน tp ก็ให้ลบ order ทั้งหมด แล้วเริ่มใหม่คับ
   ไม่รู้ว่าจะทำได้ปะคับ ผมลองดูตั้งนานก็ทำไม่ได้ วานพี่ admin หรือผู้รู้ช่วยแนะนำหน่อยคับ หรือเคยมีคนทำแล้วก็แบ่งปันกันบ้างคับ  ;D ขอบคุณล่วงหน้าคับ

tanapai

  • Jr. Member
  • **
  • Posts: 50
  • เล่นจริงเจ็บจริง รู้ให้จริง ๆ ไม่รู้ก็ถาม อิ ๆ
    • เทรด forex ไม่ต้องนั่งหน้าคอม ด้วยการ copy คนเก่ง ๆ คลิก
{
    OrderSend(Symbol(),OP_SELLSTOP,Lot,Bid-Point*10,3,0,0,"EA",Magic,0,Red);
   
   OrderSend(Symbol(),OP_BUYSTOP,Lot,Ask+Point*10,3,0 ,0 ,"EA",Magic,0,Green);
  }
       
 
จากจุดคำสั่ง OrderSend
ผมแก้ให้มันตั้ง tp และ sl แบบนี้มันก็ยังไม่ตั้งให้อะคับ ขอคำแนะนำหน่อย
tp = 30
sl = 50
{
    OrderSend(Symbol(),OP_SELLSTOP,Lot,Bid-Point*10,3,Bid+Point*sl,Bid-Point*tp,"EA",Magic,0,Red);
   
   OrderSend(Symbol(),OP_BUYSTOP,Lot,Ask+Point*10,3,Ask-Point*sl,Ask+Point*tp,"EA",Magic,0,Green);
  }

admin

  • Administrator
  • Hero Member
  • *****
  • Posts: 2386
ลองแก้จาก Bid-Point*10  เป็น  Bid-Point*15 ดูก่อนครับว่าได้ไหมเพระเท่าที่ดูผ่านๆๆไม่น่าจะผิดอะไรถ้าไม่ได้จะดูละเอียดให้อีกทีครับ

tanapai

  • Jr. Member
  • **
  • Posts: 50
  • เล่นจริงเจ็บจริง รู้ให้จริง ๆ ไม่รู้ก็ถาม อิ ๆ
    • เทรด forex ไม่ต้องนั่งหน้าคอม ด้วยการ copy คนเก่ง ๆ คลิก
ได้แล้วคับ ขอบคุณคับ ;D
 

ขอถามต่อเลยนะคับ
คือว่า  Odrer BUSTOP  เมื่อเงื่อนใข BUY แล้ว อยากจะเปิด Order SELLSTOP ดักทางไว้อีกทางอะคับ ทำไงดี  :'(