07 พฤศจิกายน, 2026

ออร์เดอร์ BuyStopLimit และ SellStopLimit

Igor Gerasko
RU TH

พร้อมกับการเปิดตัวบิลด์แรกของเทอร์มินัล MetaTrader 5 ได้มีการเพิ่มประเภทออร์เดอร์ใหม่สองแบบเข้าสู่รายการคำสั่งมาตรฐาน คือ BuyStopLimit และ SellStopLimit โดย BuyStopLimit คือ คำสั่งให้วางออร์เดอร์ Buy Limit เมื่อราคา触及ระดับที่กำหนด ซึ่งอยู่สูงกว่าราคา Ask ปัจจุบัน ส่วน SellStopLimit คือ คำสั่งให้วางออร์เดอร์ Sell Limit เมื่อราคา触及ระดับที่กำหนด ซึ่งอยู่ต่ำกว่าราคา Bid ปัจจุบัน

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

เนื่องจากสคริปต์นี้รองรับออร์เดอร์สองประเภท โครงสร้างจึงแบ่งออกเป็นสองส่วนหลักอย่างชัดเจน: ส่วนจัดการ BuyStopLimit และส่วนจัดการ SellStopLimit ซึ่งทำงานแยกจากกันอย่างอิสระ ผู้ใช้ระบุประเภทการดำเนินการผ่านอินพุตพารามิเตอร์ที่ชื่อว่า ประเภท โดยใส่ค่า 0 เพื่อตั้งค่า BuyStopLimit และใส่ค่า 1 เพื่อตั้งค่า SellStopLimit หากใส่ค่าอื่น สคริปต์จะหยุดทำงานทันที

บล็อกการทำงานสำหรับ BuyStopLimit

if (Type == 0) // หากเลือกใช้ BuyStopLimit
{
// – 2 – ==== ตรวจสอบความถูกต้องของอินพุตพารามิเตอร์สำหรับ BuyStopLimit =======
if (StopLimitPrice >= (Price-StopLevel)) // ตรวจสอบค่า StopLimitPrice
{
Alert(“ในการตั้งค่า BuyStopLimit ราคา StopLimitPrice ต้องต่ำกว่า Price”);
return(0);
}
if (Price <= Ask) // ตรวจสอบค่า Price
{

Alert(“ในการตั้งค่า BuyStopLimit ราคา Price ต้องสูงกว่า Ask”);
return(0);
}
if (TakeProfit – StopLimitPrice <= StopLevel) // ตรวจสอบค่า TakeProfit
{
Alert(“TakeProfit ใกล้ราคาเปิดเกินไป”);
return(0);
}
if (StopLimitPrice – StopLoss <= StopLevel) // ตรวจสอบค่า StopLoss
{
Alert(“StopLoss ใกล้ราคาเปิดเกินไป”);
return(0);
}
// – 2 – ================= สิ้นสุดบล็อก =======================

// – 3 – ==== รอให้ราคาแตะระดับ Price =============
Comment(“สคริปต์ MT5_BuyStopLimit_SellStopLimit กำลังรอให้ราคาถึงระดับ “,
Price);
ShowPrice(Price);

double NAsk = ND(MarketInfo(Symbol(), MODE_ASK));
while(!IsStopped() && NAsk < Price)
NAsk = ND(MarketInfo(Symbol(), MODE_ASK));
deinit();
if (IsStopped()) return(0);
// – 3 – ================= สิ้นสุดบล็อก =======================

// – 4 – ==== ราคาถึงเป้าหมายแล้ว — วางออร์เดอร์ BuyLimit ================
while (!FatalError && !Res && !IsStopped())
{
Res = OpenOrder(OP_BUYLIMIT, StopLimitPrice, TakeProfit, StopLoss);
Sleep(1000);
}
return(0);
// – 4 – ================= สิ้นสุดบล็อก =======================
}

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

ทั้งนี้ ราคา ราคา ต้องสูงกว่าราคา Ask ปัจจุบัน ส่วนพารามิเตอร์ TakeProfit และ StopLoss ผู้ใช้สามารถตั้งค่าเองได้ จึงต้องผ่านการตรวจสอบเช่นกัน: ระดับกำไรต้องสูงกว่าราคาเปิดของ ออร์เดอร์ Buy Limit อย่างน้อย StopLevel พอยต์ และระดับหยุดขาดทุนต้องต่ำกว่าราคาเปิดอย่างน้อย StopLevel พอยต์

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

หากออกจากลูปเนื่องจากราคาถึงระดับที่กำหนด สคริปต์จะดำเนินการบล็อกที่สี่ ซึ่งพยายามวางออร์เดอร์ Buy Limit ผ่านลูปเช่นกัน โดยจะออกจากลูปเมื่อเกิดเหตุการณ์ใดเหตุการณ์หนึ่ง: เกิด Fatal Error, ส่งออร์เดอร์สำเร็จ หรือผู้ใช้หยุดการทำงานของสคริปต์

ส่วนที่สองของสคริปต์ ซึ่งจัดการออร์เดอร์ SellStopLimit มีโครงสร้างคล้ายกับส่วนแรกมาก:

else
if (Type == 1) // หากเลือกใช้ SellStopLimit
{
// – 5 – ==== ตรวจสอบความถูกต้องของอินพุตพารามิเตอร์สำหรับ SellStopLimit =======
if (StopLimitPrice <= (Price+StopLevel)) // ตรวจสอบค่า StopLimitPrice
{
Alert(“ในการตั้งค่า SellStopLimit ราคา StopLimitPrice ต้องสูงกว่า Price”);
return(0);
}
if (Price >= Bid) // ตรวจสอบค่า Price
{
Alert(“ในการตั้งค่า SellStopLimit ราคา Price ต้องต่ำกว่า Bid”);
return(0);
}
if (StopLimitPrice – TakeProfit <= StopLevel) // ตรวจสอบค่า TakeProfit
{
Alert(“TakeProfit ใกล้ราคาเปิดเกินไป”);
return(0);
}
if (StopLoss – StopLimitPrice <= StopLevel) // ตรวจสอบค่า StopLoss
{
Alert(“StopLoss ใกล้ราคาเปิดเกินไป”);
return(0);
}
// – 5 – ================= สิ้นสุดบล็อก =======================

// – 6 – ==== รอให้ราคาแตะระดับ Price =============
Comment(“สคริปต์ MT5_BuyStopLimit_SellStopLimit กำลังรอให้ราคาถึงระดับ”,
Price);
ShowPrice(Price);
double NBid = ND(MarketInfo(Symbol(), MODE_BID));
while(!IsStopped() && NBid > Price && !IsStopped())
NBid = ND(MarketInfo(Symbol(), MODE_BID));
deinit();
if (IsStopped()) return(0);
// – 6 – ================= สิ้นสุดบล็อก =======================

// – 7 – ==== ราคาถึงเป้าหมายแล้ว — วางออร์เดอร์ SellLimit ================
while (!FatalError && !Res)
{
Res = OpenOrder(OP_SELLLIMIT, StopLimitPrice, TakeProfit, StopLoss);
Sleep(1000);
}
return(0);
}
// – 7 – ================= สิ้นสุดบล็อก =======================

บล็อกที่ห้าเหมือนกับบล็อกที่สอง แต่ปรับเงื่อนไขให้สอดคล้องกับออร์เดอร์ Sell Limit โดยจำไว้ว่า สำหรับออร์เดอร์ประเภทนี้ ทุกราคาจะอ้างอิงจาก Bid

ในบล็อกที่หก ระบบจะรอให้ราคา Bid ถึงระดับ ราคา พร้อมแสดงการแจ้งเตือนทั้งทางกราฟิกและข้อความ เมื่อราคา Bid ถึงระดับ ราคา เส้นและข้อความจะถูกลบออก (ผ่านฟังก์ชัน deinit) จากนั้นจึงเข้าสู่บล็อกที่เจ็ด

บล็อกที่เจ็ด คล้ายกับบล็อกที่สี่ แต่จะพยายามวางออร์เดอร์ Sell Limit แทนที่จะเป็น Buy Limit

นี่คือหลักการทำงานทั้งหมดของสคริปต์ซึ่งไม่ซับซ้อน

เมื่อเริ่มใช้งานสคริปต์ ผู้ใช้สามารถตั้งค่าพารามิเตอร์ต่อไปนี้ได้:
• Lots = 0.1 – ขนาดล็อตของแต่ละออร์เดอร์
• Type = 0 – ประเภทออร์เดอร์: 0 สำหรับ BuyStopLimit, 1 สำหรับ SellStopLimit
• StopLimitPrice = 1.46 – ราคาที่จะใช้วางออร์เดอร์ Limit
• Price = 1.47 – ราคาที่เมื่อถึงแล้วจะทำการวางออร์เดอร์ Limit
• TakeProfit = 1.47 – ระดับกำไรที่ตั้งไว้สำหรับออร์เดอร์
• StopLoss = 1.45 – ระดับหยุดขาดทุนที่ตั้งไว้สำหรับออร์เดอร์

ซอร์สโค้ดเต็มของสคริปต์สามารถดาวน์โหลดได้ ที่นี่

ติดตามเราทาง Telegram

Fortrader contentUrl Suite 11, Second Floor, Sound & Vision House, Francis Rachel Str. Victoria Victoria, Mahe, Seychelles +7 10 248 2640568

เพิ่มเติมจากหมวดหมู่นี้

บทความทั้งหมด

การดัดแปลงโปรแกรม MetaTrader4 ด้วยตนเอง (ตอนที่ 2)

บทความตอนที่ 2 ของซีรีส์การเขียนโปรแกรม MQL4 ที่อธิบายแนวคิดพื้นฐาน เช่น ตัวแปร ตัวดำเนินการ เงื่อนไข ลูป และฟังก์ชัน พร้อมแนวทางปฏิบัติสำหรับการดัดแปลงโปรแกรมด้วยตนเอง

ปรับแต่งโปรแกรม MetaTrader 4 ด้วยตนเอง (ตอนที่ 1)

เรียนรู้วิธีปรับแต่งโปรแกรมสำหรับ MetaTrader 4 ด้วยตนเอง: ตั้งแต่การหาซอร์สโค้ด วางไฟล์ให้ถูกต้อง ไปจนถึงเข้าใจโครงสร้างและอัลกอริทึมของ MQL4

Expert เทรดอัตโนมัติ “Forex Agent”

วิเคราะห์และปรับปรุง Expert Forex Agent v07 ให้กลายเป็น v08 โดยเปลี่ยนจังหวะการวาง Pending Order พร้อมผลลัพธ์ที่ดีขึ้นอย่างชัดเจน

การปรับแต่งโปรแกรมสำหรับ MetaTrader 4 ด้วยตนเอง (ตอนที่ 1)

เรียนรู้วิธีปรับแต่งโปรแกรมสำหรับ MetaTrader 4 ด้วยตนเอง: ตั้งแต่การหาซอร์สโค้ด การวางไฟล์ให้ถูกต้อง ไปจนถึงการเข้าใจโครงสร้างและอัลกอริทึมของ MQL4

บทความเพื่อการศึกษาล่าสุด

บทความทั้งหมด

บรรณาธิการแนะนำ

บทความทั้งหมด