การใช้คำสั่งในการซื้อขายใน MQL4

บทเรียน: การใช้คำสั่งในการซื้อขายใน MQL4

คลิ๊กเพื่อดูคลิปวีดีโอที่มีรายละเอียดมากกว่าบทความนี้ (ดูได้เฉพาะสมาชิก)

วัตถุประสงค์ของบทเรียน:

หลังจากจบบทเรียนนี้ ผู้เรียนจะสามารถใช้คำสั่งต่างๆ ใน MQL4 เพื่อเปิดคำสั่งซื้อขาย ตั้งค่า Stop Loss และ Take Profit รวมถึงตรวจสอบและปิดคำสั่งซื้อขายที่เปิดไว้ได้อย่างมีประสิทธิภาพ

ทำความเข้าใจเรื่อง Pips

ในต่างประเทศจะนิยมใช้หน่วยเป็น Pips เนื่องจากค่าที่พูดถึงจะมีค่าเท่ากันไม่ว่าจะใช้งานกับบัญชีประเภทต่างๆ หรือโบรกที่แตกต่างกัน เช่น ทองคำของโบรก A มีทศนิยม 3 จุด, โบรก B มีทศนิยม 2 จุด หากพูดกันโดยอ้างอิงหน่วยเป็นจุด (Points) ระยะจะไม่เท่ากัน เพราะหากคิดหน่วยเป็นจุดจะมีการคำนวณจากตัวเลขหลักขวามือสุด มูลค่าที่ได้จึงไม่เหมือนกัน

ตัวอย่างล่างนี้สมมุติว่าเป็นการพูดถึงการเคลื่อนไหวของราคาของเทรดเดอร์สองคนที่ใช้บัญชีที่มีทศนิยมของสินค้าตัวเดียวกันแต่มีทศนิยมแตกต่างกัน:

ตัวอย่างที่ 1 : ราคาทองคำของโบรก A 1950.150 ถ้าราคาเคลื่อนไหวจาก 1950.150 ไปเป็น 1950.151 จะถือว่าเคลื่อนไหว 1 Point

ตัวอย่างที่ 2 : ราคาทองคำของโบรก B 1950.15 ถ้าราคาเคลื่อนไหวจาก 1950.15 ไปเป็น 1950.16 จะถือว่าเคลื่อนไหว 1 Point

ตัวอย่างการนับแบบ Points ของบัญชีที่มีทศนิยมไม่เท่ากัน

  • โบรก A ทศนิยม 3 จุด : ถ้าราคาเคลื่อนไหวจาก 1950.150 ไปที่ 1950.200 นั่นคือ 50 Points
  • โบรก B ทศนิยม 2 จุด : ถ้าราคาเคลื่อนไหวจาก 1950.15 ไปที่ 1950.20 นั่นคือ 5 Points

จากตัวอย่างข้างต้นจะเห็นความแตกต่างระหว่างบัญชีที่มีจำนวนทศนิยมที่แตกต่างกันทั้งที่เป็นสินค้าเดียวกัน แต่หากมีการคำนวณโดยอ้างอิงหน่วยเป็น Pips ก็จะได้ผลลัพธ์ออกมาตรงกัน ตามหลักการคิดค่าแบบ Pips ข้างล่างนี้:


5 ตำแหน่งทศนิยม: Pip คือการเคลื่อนไหวที่ตำแหน่งทศนิยมที่ 4
3 ตำแหน่งทศนิยม: Pip คือการเคลื่อนไหวที่ตำแหน่งทศนิยมที่ 2
2 ตำแหน่งทศนิยม: Pip คือการเคลื่อนไหวที่ตำแหน่งทศนิยมที่ 2
1 ตำแหน่งทศนิยม: Pip คือการเคลื่อนไหวที่ตำแหน่งทศนิยมที่ 1

ตัวอย่างการนับเป็น Points

  • โบรก A ทศนิยม 3 จุด : ถ้าราคาเคลื่อนไหวจาก 1950.150 ไปที่ 1950.200 นั่นคือ 50 Points
  • โบรก B ทศนิยม 2 จุด : ถ้าราคาเคลื่อนไหวจาก 1950.15 ไปที่ 1950.20 นั่นคือ 5 Points

ตัวอย่างการนับเป็น Pips:

  • โบรก A ทศนิยม 3 จุด : ถ้าราคาเคลื่อนไหวจาก 1950.150 ไปที่ 1950.200 นั่นคือ 5 Pips
  • โบรก B ทศนิยม 2 จุด : ถ้าราคาเคลื่อนไหวจาก 1950.15 ไปที่ 1950.20 นั่นคือ 5 Pips

จากตัวอย่างข้างต้นจะเห็นความแตกต่างระหว่าง Points และ Pips ดังนี้ 10 Points = 1 Pips

สุดท้ายในการใช้เครื่องมือ Crosshair ใน MT4 หรือ MT5 หน่วยที่ได้ออกมานั้นจะเป็น Points ไม่ใช่ Pips แม้ว่าจะเขียนไว้ที่กราฟเป็น Pips ก็ตาม ซึ่งเป็นสิ่งที่ผู้เทรดควรทราบเพื่อไม่ให้สับสนในการคำนวณ


ทำความเข้าใจเรื่อง _Point

_Point ในหัวข้อนี้ ไม่ใช่ Points ที่เป็นหน่วยวัดการเคลื่อนที่ของราคา ดังนั้นจึงต้องแยกความหมายของสองคำนี้ให้ออก

_Point คือ มูลค่าของการเคลื่อนที่ของราคาต่อจุด ซึ่งเป็นหน่วยที่เล็กที่สุดที่ใช้ในการวัดการเคลื่อนไหวของราคาในสินทรัพย์ทางการเงิน เช่น คู่เงินหรือทองคำ มูลค่านี้อาจแตกต่างกันไปตามประเภทของสินค้าและประเภทของบัญชีเทรด

ตัวอย่างเช่น:
– ในการซื้อขายทองคำ มูลค่าของการเคลื่อนที่ต่อ 1 Points อาจหมายถึงการเคลื่อนไหวของราคา 0.01 ดอลลาร์ต่อออนซ์ หากราคาเคลื่อนที่ไป 100 จุด หมายถึงการเคลื่อนไหวของราคา 1 ดอลลาร์ เป็นต้น
– ในการซื้อขายคู่เงิน (เช่น EUR/USD) 1 Point อาจหมายถึงการเคลื่อนไหวของราคา 0.0001 ดอลลาร์

การเข้าใจ _Point จะช่วยให้ผู้เทรดสามารถคำนวณการเคลื่อนไหวของราคาในหน่วยที่เล็กที่สุดได้ ทำให้สามารถกำหนดระดับราคาที่แม่นยำได้มากขึ้น เช่น การตั้งค่า Stop Loss และ Take Profit ให้เหมาะสมกับการเคลื่อนไหวของราคาในตลาด

การคำนวณราคา (คูณด้วย _Point)

หากต้องการคำนวณราคาจริงจากจำนวนจุดที่ราคาจะเคลื่อนไหว จะต้อง คูณ จำนวนจุดด้วยค่า _Point เพื่อแปลงจำนวนจุดนั้นเป็นราคาจริงที่เกี่ยวข้อง ตัวอย่างเช่น:

ในการเขียนโปรแกรม สามารถใช้ได้ 2 แบบ คือ Point หรือ _Point ทั้งสองให้ผลลัพธ์ออกมาเหมือนกัน แล้วแต่จะเลือกใช้


double stopLoss = askPrice - 50 * _Point;
หรือ
double stopLoss = askPrice - 50 * Point;

ในกรณีนี้:

  • 50 * _Point แปลงจำนวน 50 จุด (pips) เป็นราคาจริง (ในหน่วยของราคา เช่น 0.50 ดอลลาร์สำหรับทองคำ)
  • ดังนั้น, ค่าที่คำนวณได้จากการคูณนี้จะถูกนำไปใช้เป็นราคาที่แท้จริงในการตั้งค่า Stop Loss

การคำนวณจำนวนจุด (หารด้วย _Point)

หากมีการเคลื่อนไหวของราคาและต้องการรู้ว่าการเคลื่อนไหวนั้นเท่ากับกี่จุด (pips) จะต้อง หาร การเปลี่ยนแปลงของราคาด้วยค่า Point เพื่อแปลงราคานั้นเป็นจำนวนจุด ตัวอย่างเช่น:


double priceMovement = currentPrice - previousPrice;
double pointsMoved = priceMovement / _Point;

ในกรณีนี้:

  • priceMovement / _Point จะแปลงการเคลื่อนไหวของราคาจริง (เช่น 0.50 ดอลลาร์) เป็นจำนวนจุด (pips) ที่ราคาเคลื่อนไหว
  • ผลลัพธ์ที่ได้คือจำนวนจุดที่ราคาขยับ

สรุป:

  • คูณด้วย _Point เมื่อต้องการแปลงจำนวนจุดเป็นราคาจริง (จากจุดไปเป็นดอลลาร์หรือหน่วยราคาอื่น ๆ)
  • หารด้วย _Point เมื่อต้องการแปลงการเคลื่อนไหวของราคาเป็นจำนวนจุด (จากดอลลาร์หรือหน่วยราคาไปเป็นจุด)

 

ราคา Ask และ ราคา Bid คืออะไร

ในการซื้อขายในตลาดการเงินจะมีราคาที่เกี่ยวข้องกับการเทรดอยู่ 2 ราคาหลัก คือ ราคา Ask และ ราคา Bid

ราคา Ask คือราคาที่โบรกเกอร์ต้องการขายสินทรัพย์ หากเทรดเดอร์ต้องการเปิดออเดอร์ Buy ออเดอร์นั้นจะได้ออเดอร์ที่ราคา Ask

ราคา Bid คือราคาที่โบรกเกอร์ยินดีซื้อสินทรัพย์ หากเทรดเดอร์ต้องการเปิดออเดอร์ Sell ออเดอร์นั้นจะได้ออเดอร์ที่ราคา Bid

กลไกของตลาดทำให้การซื้อขายเกิดขึ้นระหว่างโบรกเกอร์และเทรดเดอร์ ซึ่งหมายความว่าเมื่อผู้เทรดทำการซื้อ ผู้เทรดจะซื้อตามราคา Ask ที่โบรกเกอร์เสนอ และเมื่อผู้เรียนทำการขาย ผู้เรียนจะขายตามราคา Bid ที่โบรกเกอร์ยินดีซื้อ

ตัวอย่างเช่น หากราคา Ask ของทองคำอยู่ที่ 1900.50 USD ต่อออนซ์ และราคา Bid อยู่ที่ 1900.20 USD ต่อออนซ์:

– หากเทรดเดอร์ต้องการซื้อทองคำ เทรดเดอร์จะต้องจ่ายที่ราคา 1900.50 USD (Ask)
– หากเทรดเดอร์ต้องการขายทองคำ เทรดเดอร์จะได้รับเงินที่ราคา 1900.20 USD (Bid)

ส่วนต่างระหว่างราคา Ask และ Bid เรียกว่า สเปรด (Spread) ซึ่งสะท้อนถึงค่าธรรมเนียมที่เทรดเดอร์ต้องจ่ายให้กับโบรกเกอร์ในการเปิดออเดอร์แต่ละครั้ง เมื่อเปิดออเดอร์ เทรดเดอร์จะติดลบทันทีเนื่องจากค่าสเปรดที่เป็นต้นทุนในการเทรด ค่าสเปรดนี้จะคงอยู่จนกว่าออเดอร์จะถูกปิด


หัวข้อ 1: การเปิดคำสั่งซื้อขายด้วยคำสั่ง OrderSend()

1.1 คำสั่ง OrderSend() คืออะไร?

คำสั่ง OrderSend() เป็นฟังก์ชันหลักใน MQL4 ที่ใช้ในการส่งคำสั่งซื้อขายไปยังตลาด เพื่อเปิดการซื้อหรือขายคู่สกุลเงินหรือสินทรัพย์อื่นๆ

1.2 รูปแบบการใช้งาน OrderSend()


int ticket = OrderSend(
    string symbol,        // สัญลักษณ์ของคู่สกุลเงิน เช่น "EURUSD"
    int cmd,              // คำสั่งซื้อขาย: 0=Buy, 1=Sell
    double volume,        // ปริมาณการซื้อขาย เช่น 0.1 lot
    double price,         // ราคาที่ต้องการซื้อหรือขาย
    int slippage,         // ค่า Slippage ที่ยอมรับได้
    double stoploss,      // ระดับ Stop Loss
    double takeprofit,    // ระดับ Take Profit
    string comment,       // ข้อความแสดงความคิดเห็นที่แนบมากับคำสั่ง
    int magic,            // หมายเลขเฉพาะของ EA (ใช้แยกแยะคำสั่งของ EA ต่างๆ)
    datetime expiration,  // วันหมดอายุของคำสั่ง (ใช้กับ Pending Orders)
    color arrow_color     // สีของลูกศรที่แสดงบนกราฟเมื่อเปิดคำสั่ง
);

 

1.3 ตัวอย่างการเปิดคำสั่งซื้อ (Buy Order)


double lotSize = 0.1;
double askPrice = MarketInfo("EURUSD", MODE_ASK);
double stopLoss = askPrice - 50 * Point;
double takeProfit = askPrice + 50 * Point;

int ticket = OrderSend(
    "EURUSD",          // สัญลักษณ์ของคู่เงิน ใส่ NULL หมายถึงสินค้าปัจจุบันที่เปิดกราฟอยู่
    OP_BUY,            // คำสั่งซื้อ
    lotSize,           // ขนาด Lot
    askPrice,          // ราคาที่จะซื้อ
    3,                 // ค่า Slippage ที่ยอมรับได้
    stopLoss,          // ระดับ Stop Loss
    takeProfit,        // ระดับ Take Profit
    "My EA Order",     // ข้อความความคิดเห็น
    0,                 // หมายเลขเฉพาะของ EA
    0,                 // ไม่มีวันหมดอายุ
    Blue               // สีของลูกศร
);

 

ในทางปฎิบัติการเขียนโปรแกรมมักจะนิยมเขียนการเรียกใช้ฟังก์ชัน OrderSend() เป็นแบบบรรทัดเดียว เพื่อให้โค้ดดูง่ายและลดจำนวนบรรทัดลง

ตัวอย่างของการเปิดออเดอร์ Buy


string ea_name "Scalping EA";
int magic_number=12345678;
int slippage = 3;
double lotSize = 0.1;
double stopLoss = Ask- 50 * Point;
double takeProfit = Ask+ 50 * Point;

int ticket = OrderSend(NULL,OP_BUY,lotSize,Ask,slippage,stopLoss,takeProfit,ea_name ,magic_number,0,Blue);

 

ตัวอย่างของการเปิดออเดอร์ Sell


string ea_name = "Scalping EA";
int magic_number = 12345678;
int slippage = 3;
double lotSize = 0.1;
double stopLoss = Bid + 50 * Point;
double takeProfit = Bid - 50 * Point;
int ticket = OrderSend(NULL, OP_SELL, lotSize, Bid, slippage, stopLoss, takeProfit, ea_name,magic_number, 0, Red); 

 

หัวข้อ 2: การตั้งค่า Stop Loss และ Take Profit

2.1 ความสำคัญของ Stop Loss และ Take Profit

Stop Loss และ Take Profit เป็นเครื่องมือสำคัญในการจัดการความเสี่ยง โดย Stop Loss ใช้เพื่อจำกัดการขาดทุนที่อาจเกิดขึ้น ส่วน Take Profit ใช้เพื่อกำหนดระดับราคาที่จะปิดคำสั่งซื้อขายเมื่อได้กำไรตามที่ต้องการ

เทรดเดอร์ที่มีประสบการณ์สูงอาจนิยาม Stop Loss ว่าเป็นการปกป้องทุนสำหรับการเทรดในอนาคต ส่วน Take Profit อาจมองว่าเป็นความเสี่ยงที่อาจทำให้พลาดโอกาสทำกำไรหรือแม้กระทั่งกลายเป็นการขาดทุน หากตั้งระยะห่างจากราคาปัจจุบันมากเกินไป

2.2 การคำนวณระดับ Stop Loss และ Take Profit

Stop Loss: คำนวณจากระดับราคาที่ต่ำกว่าราคาซื้อ (สำหรับคำสั่งซื้อ) หรือต่ำกว่าราคาขาย (สำหรับคำสั่งขาย)
Take Profit: คำนวณจากระดับราคาที่สูงกว่าราคาซื้อ (สำหรับคำสั่งซื้อ) หรือสูงกว่าราคาขาย (สำหรับคำสั่งขาย)

2.3 ตัวอย่างการตั้งค่า Stop Loss และ Take Profit


double stopLoss = askPrice - 50 * Point; // ตั้ง Stop Loss ห่างจากราคา 50 จุด
double takeProfit = askPrice + 50 * Point; // ตั้ง Take Profit ห่างจากราคา 50 จุด

หัวข้อ 3: การตรวจสอบสถานะคำสั่งซื้อขายด้วยคำสั่ง OrderSelect()

3.1 คำสั่ง OrderSelect() คืออะไร?

OrderSelect() เป็นฟังก์ชันที่ใช้ในการเลือกและเข้าถึงออเดอร์ (คำสั่งซื้อขาย) ที่ผู้เรียนเปิดหรือปิดในบัญชีการเทรดของผู้เรียน เปรียบเสมือนการบอกโปรแกรมว่า “เฮ้! ฉันต้องการดูข้อมูลของออเดอร์นี้หน่อย”

การทำงานของ OrderSelect()

เมื่อผู้เรียนต้องการตรวจสอบหรือตรวจสอบข้อมูลของออเดอร์ใดๆ เช่น ต้องการดูว่าผู้เรียนเปิดออเดอร์นี้ที่ราคาเท่าไร ใช้ขนาดลอต (Lot Size) เท่าไร หรือจะทำอะไรกับออเดอร์นี้ เช่น ปิดออเดอร์หรือแก้ไข Stop Loss/Take Profit ผู้เรียนต้องใช้ OrderSelect() เพื่อบอกโปรแกรมว่าให้เลือกออเดอร์นั้นมาก่อน

วิธีเลือกออเดอร์

มีสองวิธีหลักในการใช้ OrderSelect() เพื่อเลือกออเดอร์ที่ต้องการ:

  1. เลือกตามลำดับที่เปิด (SELECT_BY_POS):
    • ใช้วิธีนี้เมื่อผู้เรียนต้องการเลือกออเดอร์โดยอิงตามลำดับที่เปิดในรายการ เช่น ออเดอร์แรก ออเดอร์ที่สอง เป็นต้น เหมือนกับการเลือกหนังสือจากชั้นหนังสือตามตำแหน่งที่วางอยู่
  2. เลือกตามหมายเลขคำสั่ง (SELECT_BY_TICKET):
    • ใช้วิธีนี้เมื่อผู้เรียนรู้หมายเลขคำสั่ง (Ticket Number) ของออเดอร์ที่ต้องการเลือก เปรียบเสมือนการรู้รหัสหนังสือและค้นหาโดยตรงตามรหัสนั้น

3.2 รูปแบบการใช้งาน OrderSelect()


bool selected = OrderSelect(
    int index,              // หมายเลขคำสั่ง หรือดัชนีของคำสั่ง
    int select,             // ตัวเลือกการเลือก: SELECT_BY_POS หรือ SELECT_BY_TICKET
    int pool=MODE_TRADES    // เลือกจากคำสั่งที่เปิดอยู่ (MODE_TRADES) หรือคำสั่งที่ปิดแล้ว (MODE_HISTORY)
);

3.3 ตัวอย่างการตรวจสอบสถานะคำสั่งซื้อขาย


if(OrderSelect(ticket, SELECT_BY_TICKET)) {
    double orderProfit = OrderProfit(); // ดึงข้อมูลกำไรจากคำสั่งซื้อขาย
    Print("Current Profit: ", orderProfit);
}

หัวข้อ 4: การปิดคำสั่งซื้อขายด้วยคำสั่ง OrderClose()

4.1 คำสั่ง OrderClose() คืออะไร?

OrderClose() เป็นฟังก์ชันที่ใช้ในการปิดออเดอร์ (คำสั่งซื้อขาย) ที่ผู้เรียนได้เปิดไว้ในบัญชีการเทรดของผู้เรียน เปรียบเสมือนการบอกโปรแกรมว่า “ฉันต้องการหยุดการเทรดนี้และรับหรือหยุดการขาดทุนตามราคาตลาดปัจจุบัน”

การทำงานของ OrderClose()

เมื่อผู้เรียนเปิดออเดอร์ Buy หรือ Sell แล้ว และต้องการปิดออเดอร์นั้นเพื่อทำกำไรหรือหยุดการขาดทุน ผู้เรียนจะใช้ OrderClose() ในการปิดออเดอร์ ฟังก์ชันนี้จะปิดออเดอร์ที่เปิดอยู่ ณ ราคาตลาดปัจจุบัน โดยผู้เรียนสามารถเลือกว่าจะปิดออเดอร์ทั้งหมดหรือเพียงบางส่วนของจำนวนลอตที่เปิดอยู่

วิธีการใช้ OrderClose()

ในการใช้ OrderClose() ผู้เรียนต้องบอกโปรแกรมว่า:

  1. หมายเลขคำสั่ง (Ticket Number): หมายเลขที่ไม่ซ้ำกันของออเดอร์ที่ผู้เรียนต้องการปิด
  2. จำนวนลอต (Lot Size): จำนวนลอตที่ผู้เรียนต้องการปิด หากผู้เรียนเปิดไว้ 1 ลอต ผู้เรียนสามารถเลือกที่จะปิด 0.5 ลอตหรือทั้งหมดได้
  3. ราคา (Price): ราคาที่ต้องการปิดออเดอร์ ซึ่งปกติจะใช้ราคาตลาดปัจจุบัน
  4. Slippage: ค่าสลิปเพจที่ผู้เรียนยอมรับได้หากราคาตลาดมีการเปลี่ยนแปลงเล็กน้อยระหว่างการปิดออเดอร์
  5. สีของลูกศร: สีที่จะแสดงบนกราฟเพื่อระบุจุดที่ผู้เรียนปิดออเดอร์ (เป็นเพียงเครื่องหมายที่ใช้ในการแสดงผลบนกราฟ)

4.2 รูปแบบการใช้งาน OrderClose()


bool result = OrderClose(
    int ticket,      // หมายเลขคำสั่งซื้อขาย
    double lots,     // ขนาด Lot ที่ต้องการปิด
    double price,    // ราคาที่ต้องการปิด
    int slippage,    // ค่า Slippage ที่ยอมรับได้
    color Arrow_Color // สีของลูกศรที่แสดงบนกราฟเมื่อปิดคำสั่ง
);

4.3 ตัวอย่างการปิดคำสั่งซื้อขาย

// สมมติว่าผู้เรียนต้องการปิดออเดอร์ที่มีหมายเลข Ticket 123456
int ticket = 123456;
double lots = 1.0; // จำนวน Lot size ที่ต้องการปิด สมมุติเปิดออเดอร์ที่ 1 Lot ถ้าใส่ 0.5 ก็หมายถึงปิดออเดอร์ไปครึ่งหนึ่ง
double price = Bid; // ใช้ราคาตลาดปัจจุบันสำหรับออเดอร์ Sell
int slippage = 3; // ยอมรับสลิปเพจ 3 จุด

bool closed = OrderClose(ticket, lots, price, slippage, Red);
if (closed) {
Print(“ออเดอร์ถูกปิดเรียบร้อยแล้ว”);
} else {
Print(“ไม่สามารถปิดออเดอร์ได้”);
}


    if(closed) {
        Print("Order closed successfully.");
    } else {
        Print("Failed to close order.");
    }
}

หากต้องการปิดออเดอร์นั้นไปเลยโดยไม่กำหนดค่า Lot size ก็ใช้คำสั่งนี้

bool closed = OrderClose(ticket, OrderLots(), price, slippage, Red);

 

บทสรุป:

ในบทเรียนนี้ ผู้เรียนได้เรียนรู้วิธีการใช้คำสั่งหลักๆ ใน MQL4 เพื่อจัดการคำสั่งซื้อขายในตลาด ไม่ว่าจะเป็นการเปิดคำสั่งซื้อขายด้วย OrderSend() การตั้งค่า Stop Loss และ Take Profit รวมถึงการตรวจสอบและปิดคำสั่งซื้อขายด้วย OrderSelect() และ OrderClose() ความเข้าใจในหัวข้อนี้จะเป็นพื้นฐานสำคัญในการพัฒนา EA ที่สามารถทำงานในตลาดได้อย่างมีประสิทธิภาพ

เนื้อหาของบทความนี้ทั้งหมด จะดูได้เฉพาะสมาชิกที่สมัครเรียนเท่านั้น
หากต้องการสมัครเข้าเรียนสามารถติดต่อได้ที่ช่องทางติดต่อสอบถามได้ที่ด้านล่างของเว็บนี้

Existing Users Log In
   
↑ กลับไปด้านบน