ชุดคำสั่งสำหรับการเปิดออเดอร์

IUX Markets Bonus

ชุดคำสั่งสำหรับการเปิดออเดอร์ (Market Orders, Pending Orders)

ในการเทรด Forex ด้วย Expert Advisor (EA) การเปิดออเดอร์เป็นหนึ่งในฟังก์ชันพื้นฐานที่สำคัญที่สุด MQL4 มีฟังก์ชัน OrderSend() ที่ใช้สำหรับการเปิดออเดอร์ทั้ง Market Orders และ Pending Orders ลองมาดูวิธีการใช้งานกัน:

การส่งออเดอร์ด้วย คำสั่ง Market Order และ Pending
การส่งออเดอร์ด้วย คำสั่ง Market Order และ Pending
  • การเปิดออเดอร์แบ่งเป็นสองประเภทหลัก: Market Order และ Pending Order
  • Market Order:
    • ซื้อ (OP_BUY): เปิดออเดอร์ซื้อทันทีที่ราคา Ask ปัจจุบัน
    • ขาย (OP_SELL): เปิดออเดอร์ขายทันทีที่ราคา Bid ปัจจุบัน
    • สำหรับทั้งสองกรณี ต้องกำหนด Stop Loss (SL) ให้เหมาะสม
  • Pending Order:
    • ซื้อในอนาคต:
      • Buy Limit: ตั้งคำสั่งซื้อที่ราคาต่ำกว่าราคาปัจจุบัน
      • Buy Stop: ตั้งคำสั่งซื้อที่ราคาสูงกว่าราคาปัจจุบัน
    • ขายในอนาคต:
      • Sell Limit: ตั้งคำสั่งขายที่ราคาสูงกว่าราคาปัจจุบัน
      • Sell Stop: ตั้งคำสั่งขายที่ราคาต่ำกว่าราคาปัจจุบัน
  1. การเปิด Market Order

Market Order คือการเปิดออเดอร์ทันทีที่ราคาปัจจุบัน



int OpenMarketOrder(int type, double lots, double sl = 0, double tp = 0, string comment = "")
{
   int ticket;
   double price;
   double stopLoss = sl;
   double takeProfit = tp;
   
   if(type == OP_BUY)
      price = Ask;
   else if(type == OP_SELL)
      price = Bid;
   else
      return -1;
   
   ticket = OrderSend(Symbol(), type, lots, price, 3, stopLoss, takeProfit, comment, 0, 0, clrNONE);
   
   if(ticket < 0)
      Print("Error opening market order: ", GetLastError());
   else
      Print("Market order opened successfully. Ticket: ", ticket);
   
   return ticket;
}

// วิธีการใช้งาน
void OnTick()
{
   // เปิด Buy order ขนาด 0.1 lot
   OpenMarketOrder(OP_BUY, 0.1);
   
   // เปิด Sell order ขนาด 0.1 lot พร้อม SL 50 pips และ TP 100 pips
   OpenMarketOrder(OP_SELL, 0.1, Bid + 500 * Point, Bid - 1000 * Point, "My Sell Order");
}

Market Order คือการเปิดออเดอร์ทันทีที่ราคาปัจจุบัน โดยมีรายละเอียดดังนี้:

  1. ประเภทของ Market Order:
    • OP_BUY: เปิดออเดอร์ซื้อทันที
    • OP_SELL: เปิดออเดอร์ขายทันที
  2. ราคาเปิดออเดอร์:
    • สำหรับ OP_BUY ใช้ราคา Ask
    • สำหรับ OP_SELL ใช้ราคา Bid
  3. พารามิเตอร์ที่สำคัญ:
    • Symbol(): คู่สกุลเงินที่ต้องการเทรด
    • lots: ขนาดของออเดอร์ (เช่น 0.1 = 0.1 lot)
    • slippage: ค่าความคลาดเคลื่อนของราคาที่ยอมรับได้ (ในตัวอย่างใช้ค่า 3)
    • stopLoss: ราคาที่จะปิดออเดอร์เพื่อจำกัดการขาดทุน
    • takeProfit: ราคาที่จะปิดออเดอร์เพื่อทำกำไร
  4. การใช้ฟังก์ชัน OrderSend(): ฟังก์ชันนี้ใช้สำหรับส่งคำสั่งเปิดออเดอร์ไปยังโบรกเกอร์ โดยมีรูปแบบดังนี้:

OrderSend(symbol, cmd, volume, price, slippage, stoploss, takeprofit, comment, magic, expiration, arrow_color)
  1. การตรวจสอบความสำเร็จ:
    • ถ้า OrderSend() สำเร็จ จะคืนค่าเป็นหมายเลข ticket ของออเดอร์
    • ถ้าไม่สำเร็จ จะคืนค่าเป็น -1 และสามารถตรวจสอบสาเหตุได้ด้วยฟังก์ชัน GetLastError()
  2. ข้อควรระวัง:
    • ตรวจสอบว่ามี margin เพียงพอก่อนเปิดออเดอร์
    • คำนึงถึง spread ในการคำนวณ Stop Loss และ Take Profit
    • ระวังการเปิดออเดอร์ซ้ำๆ โดยไม่ตั้งใจ ควรมีการตรวจสอบจำนวนออเดอร์ที่เปิดอยู่ก่อน
  3. การปรับปรุงประสิทธิภาพ:
    • ใช้ฟังก์ชัน RefreshRates() ก่อนเปิดออเดอร์เพื่อให้แน่ใจว่าใช้ราคาล่าสุด
    • พิจารณาใช้ OrderSend() ในฟังก์ชัน OnTick() เพื่อตอบสนองต่อการเปลี่ยนแปลงราคาทันที

ตัวอย่างการใช้งานเพิ่มเติม:



void OnTick()
{
   if(OrdersTotal() == 0) // ตรวจสอบว่าไม่มีออเดอร์เปิดอยู่
   {
      double accountRisk = 0.01; // ความเสี่ยง 1% ของพอร์ต
      double lotSize = CalculateLotSize(accountRisk);
      
      if(SomeEntryCondition()) // เงื่อนไขการเข้าเทรดของคุณ
      {
         RefreshRates(); // อัพเดทราคาล่าสุด
         double stopLoss = Ask - 300 * Point; // SL 30 pips ใต้ราคาปัจจุบัน
         double takeProfit = Ask + 600 * Point; // TP 60 pips เหนือราคาปัจจุบัน
         
         int ticket = OpenMarketOrder(OP_BUY, lotSize, stopLoss, takeProfit, "My Strategy Buy");
         if(ticket > 0)
         {
            Print("Buy order opened successfully");
         }
      }
   }
}
 การใช้ Market Order ให้มีประสิทธิภาพต้องคำนึงถึงการจัดการความเสี่ยง กลยุทธ์การเข้าเทรด และสภาพตลาด ณ ขณะนั้น อย่าลืมทดสอบ EA ของคุณอย่างละเอียดในบัญชีทดลองก่อนใช้งานจริงเสมอครับ
  1. การเปิด Pending Order

Pending Order คือการตั้งคำสั่งซื้อขายล่วงหน้าที่ราคาที่กำหนด



int OpenPendingOrder(int type, double lots, double price, double sl = 0, double tp = 0, datetime expiration = 0, string comment = "")
{
   int ticket;
   
   ticket = OrderSend(Symbol(), type, lots, price, 3, sl, tp, comment, 0, expiration, clrNONE);
   
   if(ticket < 0)
      Print("Error opening pending order: ", GetLastError());
   else
      Print("Pending order placed successfully. Ticket: ", ticket);
   
   return ticket;
}

// วิธีการใช้งาน
void OnTick()
{
   double buyStopPrice = Ask + 200 * Point;  // ราคา 20 pips เหนือราคาปัจจุบัน
   double sellStopPrice = Bid - 200 * Point; // ราคา 20 pips ใต้ราคาปัจจุบัน
   
   // เปิด Buy Stop order
   OpenPendingOrder(OP_BUYSTOP, 0.1, buyStopPrice, buyStopPrice - 500 * Point, buyStopPrice + 1000 * Point);
   
   // เปิด Sell Stop order
   OpenPendingOrder(OP_SELLSTOP, 0.1, sellStopPrice, sellStopPrice + 500 * Point, sellStopPrice - 1000 * Point);
   
   // เปิด Buy Limit order ที่จะหมดอายุใน 1 วัน
   datetime expirationTime = TimeCurrent() + 86400;  // 86400 วินาที = 1 วัน
   OpenPendingOrder(OP_BUYLIMIT, 0.1, Bid - 300 * Point, 0, 0, expirationTime, "Buy Limit with expiration");
}

Pending Order คือการตั้งคำสั่งซื้อขายล่วงหน้าที่ราคาที่กำหนด โดยมีรายละเอียดดังนี้:

  1. ประเภทของ Pending Order:
    • OP_BUYLIMIT: ตั้งคำสั่งซื้อที่ราคาต่ำกว่าราคาปัจจุบัน
    • OP_BUYSTOP: ตั้งคำสั่งซื้อที่ราคาสูงกว่าราคาปัจจุบัน
    • OP_SELLLIMIT: ตั้งคำสั่งขายที่ราคาสูงกว่าราคาปัจจุบัน
    • OP_SELLSTOP: ตั้งคำสั่งขายที่ราคาต่ำกว่าราคาปัจจุบัน
  2. พารามิเตอร์ที่สำคัญ:
    • Symbol(): คู่สกุลเงินที่ต้องการเทรด
    • type: ประเภทของ Pending Order
    • lots: ขนาดของออเดอร์
    • price: ราคาที่ต้องการเปิดออเดอร์
    • slippage: ค่าความคลาดเคลื่อนของราคาที่ยอมรับได้
    • stopLoss: ราคา Stop Loss
    • takeProfit: ราคา Take Profit
    • expiration: เวลาหมดอายุของ Pending Order (ถ้ามี)
  3. การใช้ฟังก์ชัน OrderSend(): ใช้ฟังก์ชันเดียวกับ Market Order แต่กำหนดประเภทและราคาที่ต้องการ
  4. การตรวจสอบความสำเร็จ:
    • ถ้า OrderSend() สำเร็จ จะคืนค่าเป็นหมายเลข ticket ของออเดอร์
    • ถ้าไม่สำเร็จ จะคืนค่าเป็น -1 และสามารถตรวจสอบสาเหตุได้ด้วยฟังก์ชัน GetLastError()
  5. ข้อควรระวัง:
    • ตรวจสอบว่าราคาที่ตั้งไว้เป็นไปตามกฎของโบรกเกอร์ (เช่น ระยะห่างขั้นต่ำจากราคาปัจจุบัน)
    • ระวังการตั้ง Pending Order ซ้ำๆ โดยไม่ตั้งใจ
    • คำนึงถึงเวลาหมดอายุของ Pending Order ถ้ากำหนดไว้
  6. การปรับปรุงประสิทธิภาพ:
    • ใช้ฟังก์ชัน RefreshRates() ก่อนคำนวณราคาสำหรับ Pending Order
    • พิจารณาใช้ OrderModify() เพื่อปรับเปลี่ยน Pending Order ที่มีอยู่แทนการลบและสร้างใหม่

ตัวอย่างการใช้งานเพิ่มเติม:

HFM Market Promotion

 


void PlacePendingOrders()
{
   RefreshRates();
   double accountRisk = 0.01; // ความเสี่ยง 1% ของพอร์ต
   double lotSize = CalculateLotSize(accountRisk);
   
   // ตั้ง Buy Stop
   double buyStopPrice = Ask + 200 * Point; // 20 pips เหนือราคาปัจจุบัน
   double buyStopSL = buyStopPrice - 300 * Point; // SL 30 pips ใต้ราคาเปิด
   double buyStopTP = buyStopPrice + 600 * Point; // TP 60 pips เหนือราคาเปิด
   
   int buyStopTicket = OpenPendingOrder(OP_BUYSTOP, lotSize, buyStopPrice, buyStopSL, buyStopTP, 0, "Buy Stop Order");
   
   if(buyStopTicket > 0)
   {
      Print("Buy Stop order placed successfully");
   }
   
   // ตั้ง Sell Limit
   double sellLimitPrice = Bid + 150 * Point; // 15 pips เหนือราคาปัจจุบัน
   double sellLimitSL = sellLimitPrice + 300 * Point; // SL 30 pips เหนือราคาเปิด
   double sellLimitTP = sellLimitPrice - 450 * Point; // TP 45 pips ใต้ราคาเปิด
   
   datetime expirationTime = TimeCurrent() + 12 * 3600; // หมดอายุใน 12 ชั่วโมง
   
   int sellLimitTicket = OpenPendingOrder(OP_SELLLIMIT, lotSize, sellLimitPrice, sellLimitSL, sellLimitTP, expirationTime, "Sell Limit Order");
   
   if(sellLimitTicket > 0)
   {
      Print("Sell Limit order placed successfully");
   }
}


ครับ ผมจะอธิบายเพิ่มเติมเกี่ยวกับการเปิด Pending Order
Pending Order คือการตั้งคำสั่งซื้อขายล่วงหน้าที่ราคาที่กำหนด โดยมีรายละเอียดดังนี้:

ประเภทของ Pending Order:

  • OP_BUYLIMIT: ตั้งคำสั่งซื้อที่ราคาต่ำกว่าราคาปัจจุบัน
  • OP_BUYSTOP: ตั้งคำสั่งซื้อที่ราคาสูงกว่าราคาปัจจุบัน
  • OP_SELLLIMIT: ตั้งคำสั่งขายที่ราคาสูงกว่าราคาปัจจุบัน
  • OP_SELLSTOP: ตั้งคำสั่งขายที่ราคาต่ำกว่าราคาปัจจุบัน

พารามิเตอร์ที่สำคัญ:

  • Symbol(): คู่สกุลเงินที่ต้องการเทรด
  • type: ประเภทของ Pending Order
  • lots: ขนาดของออเดอร์
  • price: ราคาที่ต้องการเปิดออเดอร์
  • slippage: ค่าความคลาดเคลื่อนของราคาที่ยอมรับได้
  • stopLoss: ราคา Stop Loss
  • takeProfit: ราคา Take Profit
  • expiration: เวลาหมดอายุของ Pending Order (ถ้ามี)

การใช้ฟังก์ชัน OrderSend():

ใช้ฟังก์ชันเดียวกับ Market Order แต่กำหนดประเภทและราคาที่ต้องการ

การตรวจสอบความสำเร็จ:

ถ้า OrderSend() สำเร็จ จะคืนค่าเป็นหมายเลข ticket ของออเดอร์
ถ้าไม่สำเร็จ จะคืนค่าเป็น -1 และสามารถตรวจสอบสาเหตุได้ด้วยฟังก์ชัน GetLastError()

ข้อควรระวัง:

ตรวจสอบว่าราคาที่ตั้งไว้เป็นไปตามกฎของโบรกเกอร์ (เช่น ระยะห่างขั้นต่ำจากราคาปัจจุบัน)
ระวังการตั้ง Pending Order ซ้ำๆ โดยไม่ตั้งใจ
คำนึงถึงเวลาหมดอายุของ Pending Order ถ้ากำหนดไว้

การปรับปรุงประสิทธิภาพ:

ใช้ฟังก์ชัน RefreshRates() ก่อนคำนวณราคาสำหรับ Pending Order
พิจารณาใช้ OrderModify() เพื่อปรับเปลี่ยน Pending Order ที่มีอยู่แทนการลบและสร้างใหม่

ตัวอย่างการใช้งานเพิ่มเติม:


void PlacePendingOrders()
{
   RefreshRates();
   double accountRisk = 0.01; // ความเสี่ยง 1% ของพอร์ต
   double lotSize = CalculateLotSize(accountRisk);
   
   // ตั้ง Buy Stop
   double buyStopPrice = Ask + 200 * Point; // 20 pips เหนือราคาปัจจุบัน
   double buyStopSL = buyStopPrice - 300 * Point; // SL 30 pips ใต้ราคาเปิด
   double buyStopTP = buyStopPrice + 600 * Point; // TP 60 pips เหนือราคาเปิด
   
   int buyStopTicket = OpenPendingOrder(OP_BUYSTOP, lotSize, buyStopPrice, buyStopSL, buyStopTP, 0, "Buy Stop Order");
   
   if(buyStopTicket > 0)
   {
      Print("Buy Stop order placed successfully");
   }
   
   // ตั้ง Sell Limit
   double sellLimitPrice = Bid + 150 * Point; // 15 pips เหนือราคาปัจจุบัน
   double sellLimitSL = sellLimitPrice + 300 * Point; // SL 30 pips เหนือราคาเปิด
   double sellLimitTP = sellLimitPrice - 450 * Point; // TP 45 pips ใต้ราคาเปิด
   
   datetime expirationTime = TimeCurrent() + 12 * 3600; // หมดอายุใน 12 ชั่วโมง
   
   int sellLimitTicket = OpenPendingOrder(OP_SELLLIMIT, lotSize, sellLimitPrice, sellLimitSL, sellLimitTP, expirationTime, "Sell Limit Order");
   
   if(sellLimitTicket > 0)
   {
      Print("Sell Limit order placed successfully");
   }
}


การใช้ Pending Order สามารถเป็นส่วนสำคัญของกลยุทธ์การเทรด โดยเฉพาะอย่างยิ่งสำหรับการเทรดแบบ breakout หรือการรอจังหวะเข้าเทรดที่ราคาที่ต้องการ อย่างไรก็ตาม ควรระมัดระวังในการใช้งานและทดสอบอย่างละเอียดเพื่อให้แน่ใจว่า EA ของคุณจัดการกับ Pending Order ได้อย่างถูกต้องในทุกสถานการณ์

FOREXDUCK Logo

FOREXDUCK (นามปากกา) นักเขียนของเรามีประสบการณ์การเงินการลงทุนกว่า 10 ปี มีความเชี่ยวชาญในการวิเคราะห์ตลาด Forex และคริปโต โดยเฉพาะการวิเคราะห์ทางเทคนิค รวมถึงเทคนิคต่าง

HFM Promotion