Open Forex4you Account

Server รัน EA 1000 / ปี

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

Author Topic: ผมรับ ค่าการเปิด oder ไม่ update ครับ รบกวนนิดนึง ครับ  (Read 15118 times)

chartwat

  • Newbie
  • *
  • Posts: 43
ผมเขียน ea  เปิด oder หลาย ๆ ตัว ดังนี้ครับ


Buy   GBP/USD

1 เปิดที่ 1.68861
2 เปิดที่ 1.68825
3 เปิดที่ 1.68800

ใช้คำสั่ง
xbuy=((Bid-OrderOpenPrice( ))*100000 ); // ค่าที่ได้จะเท่ากับ pip พอดี

มันก็รับค่ามาจากการเปิด order ครั้งสุดท้ายนะครับ แต่ หาก oder ที่ 3 ปิดไปโดย TP ค่าที่อ่านได้ก็ยังคงเป็นของ oder ที่ 3 อีกทั้ง ๆ ที่ oder ที่ 3 เราปิดไปแล้ว
จริง ๆ ต้องการให้อ่าน oder ที 2 แทน ( ความหมายคือ oder สุดท้ายที่เปิดอยู่นะครับ ผมต้องทำยังไงครับ )





admin

  • Administrator
  • Hero Member
  • *****
  • Posts: 2386
ตรงคำสั่ง orderselect คุณเขียนยังไงครับ

chartwat

  • Newbie
  • *
  • Posts: 43
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Bid-Point*TrailingStop,Ask+Point*TakeProfit,"chart EA",magic,0,Green);
OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES);

admin

  • Administrator
  • Hero Member
  • *****
  • Posts: 2386
เพราะมันค้นหาค่าจาก ticket ไงครับไม่ได้ค้นหาจากตำแหน่ง order คุณต้องใช้แบบนี้
OrderSelect(OrdersTotal()-1,SELECT_BY_POS,MODE_TRADES);

ข้างบนคือในกรณีที่เปิดแค่คู่เงินเดียวนะครับถ้ามีหลายคู่เงินต้องใช้ magic number มาสร้างเงื่อนไขมานับจำนวน Order ของแต่ละคู่เงินก่อนอีกหนะครับ

chartwat

  • Newbie
  • *
  • Posts: 43
ขอบคุณครับ

chartwat

  • Newbie
  • *
  • Posts: 43
Admin ครับ รบกวนดูให้หน่อบครับ ใช้งานได้แล้ว ครับ  ผมรับค่ามากจากอินดิเคเตอร์ เรียบร้อย เปิดได้ปกติ ปิดก็ได้ครับ เป็นไปตามเงื่อนไข แต่ต้องการเพิ่มเติม
 คือ ให้เปิด oder เพิ่มหาก oder ที่เปิด ติด ลบ นะครับ ทำไงก็ เอ๋อ เหรอ ครับ
 อยากให้เป็นอย่างนี่นะครับ
หาก oder 1 ที่เปิดเป็น -30 ให้เปิด oder ที่ 2 ครับ
หาก oder 2 ที่เปิดเป็น -30 ให้เปิด oder ที่ 3 ครับ
ไล่ไปแบบนี้นะครับ อันนี้ที่ผมเขียนบ้าง copy มาบ้างนะครับ
========================
extern double    lotsize=0.01;
extern double    TakeProfit=300;
extern int Ans = 0;

int start()
  {   
  double xbuy=0;
  double xsell=0;
  int abuy=0;
  int asell=0;
//===========read indicator ======;
  double b0;
 b0=iCustom(NULL,0,"12",0,0);
Print("Buffer 0 : ",b0);// signal sell;
 double b1;
 b1=iCustom(NULL,0,"12",1,0);
Print("Buffer 1 : ",b1);// signal buy;

if(b0>0)
{     
      Ans=-1;
      Comment(" Sell ");       
}
if(b1>0)
{
      Ans=1;
     Comment(" Buy ");
}

//=====================open ticket=======================;
int ticket;
     if(OrdersTotal()==0)
         {
         if(Ans>0)
              {
               ticket=OrderSend(Symbol(),OP_BUY,lotsize,Ask,10,Ask-500*Point,Ask+Point*TakeProfit,"chart test",0,0,Yellow);
               OrderSelect(OrdersTotal()-1,SELECT_BY_POS,MODE_TRADES);                             
               Sleep(500);
               return(0);               

               }
         
         if(Ans<0)
               {
                ticket=OrderSend(Symbol(),OP_SELL,lotsize,Bid,10,Bid+500*Point,Bid-Point*TakeProfit,"chart test",0,0,Aqua);
                OrderSelect(OrdersTotal()-1,SELECT_BY_POS,MODE_TRADES);                             
                Sleep(500);                 
                return(0);
               
               }
          }
 
//================= close Ticket =======================;
double total=OrdersTotal();       
int    i;
int    Pos;
bool   Result;
//----close buy  ----
if((total>0)&&(Ans<0))
  {for(i=total-1; i>=0; i--)
     {if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)==true)
        {Pos=OrderType();
         if(Pos==OP_BUY || Pos==OP_SELL)
           {if(Pos==OP_BUY)
            Result=OrderClose(OrderTicket(),OrderLots(),Bid,3,CLR_NONE);
           }
         }
      }
   } 
//----close sell ------
if((total>0) && (Ans>0))
  {for(i=total-1; i>=0; i--)
     {if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)==true)
        {Pos=OrderType();
         if(Pos==OP_BUY || Pos==OP_SELL)
           {if(Pos==OP_SELL)
            Result=OrderClose(OrderTicket(),OrderLots(),Ask,3,CLR_NONE);
           }
         }
      }
   }         

//============== add open ??? ============;
     
Print(Ans,"   oder= ",OrderOpenPrice()," Ask= ",Ask," Bid= ",Bid," lbuy= ",(Bid-OrderOpenPrice())," lSell=",(OrderOpenPrice()-Ask));
 
   return(0);
}

« Last Edit: พฤษภาคม 23, 2014, 10:47:32 am by chartwat »

admin

  • Administrator
  • Hero Member
  • *****
  • Posts: 2386
extern double    lotsize=0.01;
extern double    TakeProfit=300;
extern int Ans = 0;

int start()
  {   
  double xbuy=0;
  double xsell=0;
  int abuy=0;
  int asell=0;
//===========read indicator ======;
  double b0;
 b0=iCustom(NULL,0,"12",0,0);
Print("Buffer 0 : ",b0);// signal sell;
 double b1;
 b1=iCustom(NULL,0,"12",1,0);
Print("Buffer 1 : ",b1);// signal buy;

if(b0>0)
{     
      Ans=-1;
      Comment(" Sell ");       
}
if(b1>0)
{
      Ans=1;
     Comment(" Buy ");
}

//=====================open ticket=======================;
int ticket;
     if(OrdersTotal()==0)
         {
         if(Ans>0)
              {
               ticket=OrderSend(Symbol(),OP_BUY,lotsize,Ask,10,Ask-500*Point,Ask+Point*TakeProfit,"chart test",0,0,Yellow);
               OrderSelect(OrdersTotal()-1,SELECT_BY_POS,MODE_TRADES);                             
               Sleep(500);
               return(0);               

               }
         
         if(Ans<0)
               {
                ticket=OrderSend(Symbol(),OP_SELL,lotsize,Bid,10,Bid+500*Point,Bid-Point*TakeProfit,"chart test",0,0,Aqua);
                OrderSelect(OrdersTotal()-1,SELECT_BY_POS,MODE_TRADES);                             
                Sleep(500);                 
                return(0);
               
               }
          }
 
//================= close Ticket =======================;
double total=OrdersTotal();       
int    i;
int    Pos;
bool   Result;
//----close buy  ----
if((total>0)&&(Ans<0))
  {for(i=total-1; i>=0; i--)
     {if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)==true)
        {Pos=OrderType();
         if(Pos==OP_BUY || Pos==OP_SELL)
           {if(Pos==OP_BUY)
            Result=OrderClose(OrderTicket(),OrderLots(),Bid,3,CLR_NONE);
           }
         }
      }
   } 
//----close sell ------
if((total>0) && (Ans>0))
  {for(i=total-1; i>=0; i--)
     {if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)==true)
        {Pos=OrderType();
         if(Pos==OP_BUY || Pos==OP_SELL)
           {if(Pos==OP_SELL)
            Result=OrderClose(OrderTicket(),OrderLots(),Ask,3,CLR_NONE);
           }
         }
      }
   }         

//============== add open ฮืม ============;
     

     if(OrdersTotal()> 0)
         {
          OrderSelect(OrdersTotal()-1,SELECT_BY_POS,MODE_TRADES);
          if(OrderType()==OP_BUY)
          {  if(Ask-OrderOpenPrice() < Point*30)
              {
         
         if(Ans>0)
              {
               ticket=OrderSend(Symbol(),OP_BUY,lotsize,Ask,10,Ask-500*Point,Ask+Point*TakeProfit,"chart test",0,0,Yellow);
                                       
               Sleep(500);
               return(0);               

               }
         
         if(Ans<0)
               {
                ticket=OrderSend(Symbol(),OP_SELL,lotsize,Bid,10,Bid+500*Point,Bid-Point*TakeProfit,"chart test",0,0,Aqua);
                                         
                Sleep(500);                 
                return(0);
               
               }
          }
         
         }
         
         
         
          if(OrderType()==OP_SELL)
          {  if(OrderOpenPrice()-Bid < Point*30)
              {
         
         if(Ans>0)
              {
               ticket=OrderSend(Symbol(),OP_BUY,lotsize,Ask,10,Ask-500*Point,Ask+Point*TakeProfit,"chart test",0,0,Yellow);
                                       
               Sleep(500);
               return(0);               

               }
         
         if(Ans<0)
               {
                ticket=OrderSend(Symbol(),OP_SELL,lotsize,Bid,10,Bid+500*Point,Bid-Point*TakeProfit,"chart test",0,0,Aqua);
                                         
                Sleep(500);                 
                return(0);
               
               }
          }
         
         }
         
         
         
         
         
         
         }
 
   return(0);
}
   
 

chartwat

  • Newbie
  • *
  • Posts: 43
ขอบคุณมาก ครับ จะทดสอบดูครับ