รบกวนหน่อยครับ ต้องการให้ EA Close all ทุกๆออเดอร์

  • 6 replies
  • 1532 views

0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้

*

ตตต.ตตตตต

รบกวนผู้รู้ช่วยหน่อยครับ

ผมเขียนให้ buy หรือ sell แล้วออก pending order พวก limit ไว้อีก12 ออเดอร์ห่างกัน 100 จุด

โดยแทนตัวแปรเป็น
buy1-buy13
sell1-sell13

ต้องการให้ buy1หรือsell1 โดน tp
แล้วให้ปิดออเดอร์ทั้งหมดรวมถึง pending order ด้วย

ต้องเขียนยังไงครับ รบกวนหน่อยนะครับ
จนปัญญาจริงๆแล้วครับ

ขอบคุณครับ

Share Topic.


*

ออฟไลน์ iRuler

  • *
  • 1,261
  • 40

Re: รบกวนหน่อยครับ ต้องการให้ EA Close all ทุกๆออเดอร์

« ตอบกลับ #1 เมื่อ: 12, มกราคม 2019, 09:53:29 PM »
แนบโค้ดมาด้วยครับ

*

ตตต.ตตตตต

Re: รบกวนหน่อยครับ ต้องการให้ EA Close all ทุกๆออเดอร์

« ตอบกลับ #2 เมื่อ: 12, มกราคม 2019, 11:14:20 PM »
แนบโค้ดมาด้วยครับ


//+==================================================================+
//|                  Open Order Function Start 1                            |
//+==================================================================+

int ticket_buy1, ticket_sell1;
     if( OpenBuy == 1 )
     {
     if( Trend == 1 )
     
{ ticket_buy1 = OrderSend(Symbol(),OP_BUY,Lot,Ask_simple,0,Ask-(SL_Buy*xecn)*Point,Ask+(TP_Buy*xecn)*Point,"EA BUY START",580810395,0,Green);}
       
         }
     

     if( OpenSell == 1 )
     {     
     if( Trend == -1 )

{ticket_sell1 = OrderSend(Symbol(),OP_SELL,Lot,Bid_simple,0,Bid+(SL_Sell*xecn)*Point,Bid-(TP_Sell*xecn)*Point,"EA SELL START",580810395,0,Red);}
             
         }
 
//+==================================================================+
//|                  Open Order Function Start 2                             |
//+==================================================================+

   
  int ticket_buy2, ticket_sell2;
     if( OpenBuy == 1 )
     {
     if( Trend == 1 )
     
{ ticket_buy2 = OrderSend(Symbol(),OP_BUYLIMIT,Lot,Ask-1,0,Ask-(SL_Buy*xecn)*Point,Ask+(TP_Buy*xecn)*Point,"EA BUY START",580810395,0,Green);}
       
         }
     

     if( OpenSell == 1 )
     {     
     if( Trend == -1 )

{ticket_sell2 = OrderSend(Symbol(),OP_SELLLIMIT,Lot,Bid+1,0,Bid+(SL_Sell*xecn)*Point,Bid-(TP_Sell*xecn)*Point,"EA SELL START",580810395,0,Red);}
             
         }

.
.
.
.
.
.
.

//+==================================================================+
//|                  Open Order Function Start 14                             |
//+==================================================================+

   
  int ticket_buy14, ticket_sell14;
     if( OpenBuy == 1 )
     {
     if( Trend == 1 )
     
{ ticket_buy14 = OrderSend(Symbol(),OP_BUYLIMIT,Lot,Ask-12.5,0,Ask-(SL_Buy*xecn)*Point,Ask+(TP_Buy*xecn)*Point,"EA BUY START",580810395,0,Green);}
       
         }
     

     if( OpenSell == 1 )
     {     
     if( Trend == -1 )

{ticket_sell14 = OrderSend(Symbol(),OP_SELLLIMIT,Lot,Bid+12.5,0,Bid+(SL_Sell*xecn)*Point,Bid-(TP_Sell*xecn)*Point,"EA SELL START",580810395,0,Red);}
             
         }                                                                                     
//+==================================================================+
//|                 check order close all                            |
//+==================================================================+

 
  {{ for(int F=0;F<OrdersTotal();F++);

   double open;
 
  OrderSelect(F,SELECT_BY_POS,MODE_TRADES)==true;
   
   
   open = OrderOpenPrice() ;
   
   if (Ask == (open + TP_Buy) );
   closeall();}
   
   return(F);
   }

 
 
  //------------------------------------------------------------------------------   
        return(0);
  }
 
  //+==================================================================+
//|                            End function                             |
//+==================================================================+

 
//+==================================================================+
//|                          Close all                             |
//+==================================================================+

  void closeall()

  {
         int total = OrdersTotal() ;
         for(int i=0;i<total;i++)
         
            {
               OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
               
                  int type = OrderType();
                  bool result = false;
                  switch(type)
                 
      {
         case OP_BUY : result = OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),3,Pink);
               
               break;
         
         case OP_SELL : result = OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK),3,Pink);
               
               break;     
         
         case OP_BUYLIMIT : result =OrderDelete(OrderTicket());
               
               break;
               
         case OP_SELLLIMIT : result =OrderDelete(OrderTicket());
               
               break;
               
       }
             
           
           }
     
     

*

ตตต.ตตตตต

Re: รบกวนหน่อยครับ ต้องการให้ EA Close all ทุกๆออเดอร์

« ตอบกลับ #3 เมื่อ: 12, มกราคม 2019, 11:29:21 PM »
รบกวนช่วยแนะนำตรงนี้ด้วยครับ

ถ้าเปิด BUY + BUYLIMIT แล้ว ถึงแม้จะมีสัญญาณบายอีกห้ามบายเพิ่มจนกว่าออเดอร์เดิมจะถูกปิด แต่เซลได้
ถ้าเปิด SELL+SELLLIMIT แล้ว ถึงแม้จะมีสัญญาณเซลอีกห้ามเซลเพิ่มจนกว่าออเดอร์เดิมจะถูกปิด แต่บายได้

ชอบคุณครับ

*

ออฟไลน์ iRuler

  • *
  • 1,261
  • 40

Re: รบกวนหน่อยครับ ต้องการให้ EA Close all ทุกๆออเดอร์

« ตอบกลับ #4 เมื่อ: 14, มกราคม 2019, 12:04:13 PM »
code ไม่สมบูรณ์ compile ไม่ผ่านครับ

รบกวนช่วยแนะนำตรงนี้ด้วยครับ

ถ้าเปิด BUY + BUYLIMIT แล้ว ถึงแม้จะมีสัญญาณบายอีกห้ามบายเพิ่มจนกว่าออเดอร์เดิมจะถูกปิด แต่เซลได้
ถ้าเปิด SELL+SELLLIMIT แล้ว ถึงแม้จะมีสัญญาณเซลอีกห้ามเซลเพิ่มจนกว่าออเดอร์เดิมจะถูกปิด แต่บายได้

ชอบคุณครับ

โค๊ด
int OnTick()
  {
  if(มีสัญญาณ BUY && !CheckOrder(OP_BUY) && !CheckOrder(OP_BUYLIMIT))
  {
  // open buy here
  }
 
  if(มีสัญญา SELL && !CheckOrder(OP_SELL) && !CheckOrder(OP_SELLLIMIT))
  {
  // open sell here
  }
 
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool CheckOrder(int orderType)
  {
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber)
           {
            if(OrderType()==orderType)
               return true;
           }
        }
     }
   return false;
  }

*

ออฟไลน์ iRuler

  • *
  • 1,261
  • 40

Re: รบกวนหน่อยครับ ต้องการให้ EA Close all ทุกๆออเดอร์

« ตอบกลับ #5 เมื่อ: 14, มกราคม 2019, 12:12:48 PM »
เอาหลักการคร่าวๆ ไปคิดดูนะครับ

-ตอนส่งคำสั่ง order buy1 ให้ใส่ comment ว่า buy1
-ทุกๆ tick ให้เช็คว่า มีจำนวน order ที่เปิดอยู่ ลดลงหรือไม่ ถ้าลดลง แสดงว่ามี order ถูกปิด (ไม่ว่าจะ tp/sl)
-ถ้าจำนวน order ลดลง ให้เช็คว่า order ที่โดนปิดล่าสุด มี comment ว่า buy1 หรือไม่ ถ้าใช่ก็ ทำ function closeall()

*

ตตต.ตตตตต

Re: รบกวนหน่อยครับ ต้องการให้ EA Close all ทุกๆออเดอร์

« ตอบกลับ #6 เมื่อ: 16, มกราคม 2019, 09:38:51 PM »
ขอบคุณมากๆเลยครับ

Tags: