วันอาทิตย์ที่ 21 พฤษภาคม พ.ศ. 2560

ฝึกเขียน EA ตัวอย่างที่ 2 ปิด Order ทั้งหมด

จุดประสงค์ เพื่อศึกษา Code ของ EA ที่ใช้คำสั่งปิด Order ที่เปิดอยู่และ Pending Order ทั้งหมดทุก ๆ คู่เงิน
int start()
 {
 
   int total =OrdersTotal();
   int x=0;
   while (x<1) //Point 1
   {

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;  
          case OP_BUYSTOP  : result = OrderDelete(OrderTicket());
                         break;     
          case OP_SELLSTOP : result = OrderDelete(OrderTicket());
                         break;  
                          
          }
 

}
   if(OrdersTotal()==0) //Point 2
     x=1;
}

return(0); 
 }

2 ความคิดเห็น:

  1. จุดสังเกต
    Point 1 คือจุดที่เราใช้สร้าง While Loop เพื่อครอบ For Loop อีกชั้นหนึ่งก็เพื่อจะให้ EA ตรวจสอบจนแน่ใจจริง ๆ แล้วว่าไม่มี Order อะไรหลงเหลืออยู่ในบัญชีแล้วจริง ๆ เหตุที่ทำเช่นนี้เพราะในความเป็นจริงการสั่งคำสั่ง Close ออกไปเป็นจำนวนมากย่อมจะมีบางครั้งที่บางออร์เดอร์อาจยังปิดไม่ได้
    Point 2 คือจุดที่เราใช้ตรวจสอบว่า Order ทั้งหมดได้ถูกปิดหมดแล้ว ใช่หรือไม่ หากใช่ตัวแปร x ซึ่งเป็นตัวแปรที่ควบคุม While loop จะถูกกำหนดค่าใหม่เพื่อให้เงื่อนไขของ while เป็นเท็จจึงหลุดออกจากการทำงานของ while loop

    ตอบลบ
  2. สรุปความรู้ที่ได้จากตัวอย่างนี้
    ทำให้เราสามารถนำความรู้เรื่องนี้ไปพัฒนาระบบปิด Order ของ EA ได้ หรือนำไปสร้างเป็น script สำหรับเอาไวสั่งให้ปิด Order พร้อมกันทั้งหมดเพียงแค่การคลิกครั้งเดียว

    ตอบลบ