ชุดคำสั่งสำหรับการปิดและแก้ไขออเดอร์

IUX Markets Bonus

ชุดคำสั่งสำหรับการปิดและแก้ไขออเดอร์ (Close Order, Modify Order)

การแก้ไขออเดอร์และปิดออเดอร์
การแก้ไขออเดอร์และปิดออเดอร์
  1. จัดการออเดอร์: เป็นหัวข้อหลักที่แบ่งออกเป็น 3 ส่วนย่อย
  2. ปิดออเดอร์:
    • CloseOrder(): ใช้สำหรับปิดออเดอร์เดี่ยวที่ระบุด้วย ticket
    • CloseAllOrders(): ใช้สำหรับปิดทุกออเดอร์ที่เปิดอยู่
  3. แก้ไขออเดอร์:
    • ModifyOrder(): ใช้สำหรับแก้ไข Stop Loss (SL) และ Take Profit (TP) ของออเดอร์ที่ระบุ
  4. Trailing Stop:
    • ApplyTrailingStop(): ใช้สำหรับปรับ Stop Loss แบบอัตโนมัติตามการเคลื่อนไหวของราคา

หัวข้อนี้แสดงให้เห็นภาพรวมของการจัดการออเดอร์และความสัมพันธ์ระหว่างฟังก์ชันต่างๆ ที่ใช้ในการจัดการออเดอร์

ข้อสังเกตเพิ่มเติม:

  • การปิดออเดอร์ใช้ฟังก์ชัน OrderClose() ภายใน
  • การแก้ไขออเดอร์ใช้ฟังก์ชัน OrderModify() ภายใน
  • Trailing Stop เป็นการปรับ SL อัตโนมัติตามการเคลื่อนไหวของราคา โดยใช้ฟังก์ชัน ModifyOrder() ที่สร้างไว้

การปิดออเดอร์

ฟังก์ชัน CloseOrder() ใช้สำหรับปิดออเดอร์ที่ระบุด้วย ticket โดยมีรายละเอียดดังนี้:

  • พารามิเตอร์ ticket คือหมายเลขออเดอร์ที่ต้องการปิด
  • พารามิเตอร์ lots (ตัวเลือก) คือจำนวน lot ที่ต้องการปิด ถ้าไม่ระบุหรือระบุมากกว่าที่มี จะปิดทั้งออเดอร์
  • ฟังก์ชันจะเลือกออเดอร์ด้วย OrderSelect() ก่อนทำการปิด
  • ใช้ราคา Bid สำหรับปิดออเดอร์ Buy และราคา Ask สำหรับปิดออเดอร์ Sell
  • ส่งคืนค่า true ถ้าปิดออเดอร์สำเร็จ, false ถ้าไม่สำเร็จ


bool CloseOrder(int ticket, double lots = 0.0)
{
   if(!OrderSelect(ticket, SELECT_BY_TICKET))
   {
      Print("Error selecting order ", ticket, " for closing. Error: ", GetLastError());
      return false;
   }
   
   double closeLots = (lots <= 0.0 || lots > OrderLots()) ? OrderLots() : lots;
   double closePrice = OrderType() == OP_BUY ? MarketInfo(OrderSymbol(), MODE_BID) : MarketInfo(OrderSymbol(), MODE_ASK);
   
   bool result = OrderClose(ticket, closeLots, closePrice, 3, clrRed);
   
   if(!result)
   {
      Print("Error closing order ", ticket, ". Error: ", GetLastError());
   }
   
   return result;
}

การปิดทุกออเดอร์ (Close All)

ฟังก์ชัน CloseAllOrders() ใช้สำหรับปิดทุกออเดอร์ที่เปิดอยู่:

  • วนลูปผ่านทุกออเดอร์ที่เปิดอยู่ โดยเริ่มจากออเดอร์ล่าสุดไปยังออเดอร์แรก
  • ใช้ฟังก์ชัน CloseOrder() ที่สร้างไว้ก่อนหน้านี้เพื่อปิดแต่ละออเดอร์
  • การวนลูปจากท้ายไปหัวช่วยป้องกันปัญหาการเลื่อนของ index เมื่อปิดออเดอร์

 


void CloseAllOrders()
{
   for(int i = OrdersTotal() - 1; i >= 0; i--)
   {
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
      {
         CloseOrder(OrderTicket());
      }
   }
}


 

การแก้ไขออเดอร์ (Modified Order)

 YWO Promotion

ฟังก์ชัน ModifyOrder() ใช้สำหรับแก้ไข Stop Loss (SL) และ Take Profit (TP) ของออเดอร์ที่ระบุ:

  • พารามิเตอร์ ticket คือหมายเลขออเดอร์ที่ต้องการแก้ไข
  • พารามิเตอร์ newSL และ newTP คือค่า Stop Loss และ Take Profit ใหม่ที่ต้องการตั้ง
  • ฟังก์ชันจะเลือกออเดอร์ด้วย OrderSelect() ก่อนทำการแก้ไข
  • ใช้ OrderModify() เพื่อแก้ไขออเดอร์ โดยคงราคาเปิดเดิมไว้
  • ส่งคืนค่า true ถ้าแก้ไขสำเร็จ, false ถ้าไม่สำเร็จ

 


bool ModifyOrder(int ticket, double newSL, double newTP)
{
   if(!OrderSelect(ticket, SELECT_BY_TICKET))
   {
      Print("Error selecting order ", ticket, " for modification. Error: ", GetLastError());
      return false;
   }
   
   bool result = OrderModify(ticket, OrderOpenPrice(), newSL, newTP, 0, clrBlue);
   
   if(!result)
   {
      Print("Error modifying order ", ticket, ". Error: ", GetLastError());
   }
   
   return result;
}


 

การใช้ Trailing Stop

ฟังก์ชัน ApplyTrailingStop() ใช้สำหรับปรับ Stop Loss แบบ Trailing Stop:

  • พารามิเตอร์ ticket คือหมายเลขออเดอร์ที่ต้องการใช้ Trailing Stop
  • พารามิเตอร์ trailingPoints คือระยะห่างในหน่วย point ที่ต้องการให้ SL ตามราคา
  • ทำงานได้ทั้งกับออเดอร์ Buy และ Sell
  • สำหรับออเดอร์ Buy, จะปรับ SL ขึ้นเมื่อราคาเคลื่อนที่สูงขึ้น
  • สำหรับออเดอร์ Sell, จะปรับ SL ลงเมื่อราคาเคลื่อนที่ต่ำลง
  • ใช้ฟังก์ชัน ModifyOrder() ที่สร้างไว้ก่อนหน้านี้เพื่อแก้ไข SL

 



void ApplyTrailingStop(int ticket, int trailingPoints)
{
   if(!OrderSelect(ticket, SELECT_BY_TICKET))
   {
      Print("Error selecting order ", ticket, " for trailing stop. Error: ", GetLastError());
      return;
   }
   
   double newSL;
   
   if(OrderType() == OP_BUY)
   {
      newSL = NormalizeDouble(MarketInfo(OrderSymbol(), MODE_BID) - trailingPoints * Point, Digits);
      if(newSL > OrderStopLoss())
      {
         ModifyOrder(ticket, newSL, OrderTakeProfit());
      }
   }
   else if(OrderType() == OP_SELL)
   {
      newSL = NormalizeDouble(MarketInfo(OrderSymbol(), MODE_ASK) + trailingPoints * Point, Digits);
      if(newSL < OrderStopLoss() || OrderStopLoss() == 0)
      {
         ModifyOrder(ticket, newSL, OrderTakeProfit());
      }
   }
}

 

 

 Exness Promotion
PNFPB Install PWA using share icon

For IOS and IPAD browsers, Install PWA using add to home screen in ios safari browser or add to dock option in macos safari browser