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

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 ที่มีอยู่แทนการลบและสร้างใหม่

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

 YWO 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 ได้อย่างถูกต้องในทุกสถานการณ์

 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