Trailing Stop เป็นเทคนิคการจัดการความเสี่ยงที่ช่วยปกป้องกำไรที่ได้มาแล้ว โดยการปรับ Stop Loss ให้เคลื่อนที่ตามราคาที่เปลี่ยนแปลงไปในทิศทางที่เป็นประโยชน์ต่อการเทรด ต่อไปนี้เป็นตัวอย่างการใช้งาน Trailing Stop ใน MQL4:
ฟังก์ชัน Trailing Stop พื้นฐาน
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(Bid - trailingPoints * Point, Digits);
if(newSL > OrderStopLoss())
{
if(!OrderModify(ticket, OrderOpenPrice(), newSL, OrderTakeProfit(), 0, CLR_NONE))
{
Print("Error modifying buy order ", ticket, ". Error: ", GetLastError());
}
}
}
else if(OrderType() == OP_SELL)
{
newSL = NormalizeDouble(Ask + trailingPoints * Point, Digits);
if(newSL < OrderStopLoss() || OrderStopLoss() == 0)
{
if(!OrderModify(ticket, OrderOpenPrice(), newSL, OrderTakeProfit(), 0, CLR_NONE))
{
Print("Error modifying sell order ", ticket, ". Error: ", GetLastError());
}
}
}
}
- วัตถุประสงค์:
- ปรับ Stop Loss อัตโนมัติเพื่อปกป้องกำไรที่เกิดขึ้นแล้ว
- รักษาระยะห่างคงที่ระหว่างราคาปัจจุบันกับ Stop Loss
- พารามิเตอร์ที่รับเข้ามา:
- หมายเลขออเดอร์ (Ticket)
- ระยะห่างของ Trailing Stop (ในหน่วย points)
- ขั้นตอนการทำงาน:
- a) เลือกออเดอร์ตามหมายเลข Ticket ที่ระบุ
- b) ตรวจสอบประเภทของออเดอร์ (Buy หรือ Sell)
- c) คำนวณ Stop Loss ใหม่ตามราคาปัจจุบันและระยะห่างที่กำหนด
- d) เปรียบเทียบ Stop Loss ใหม่กับ Stop Loss ปัจจุบัน
- e) ถ้าจำเป็นต้องปรับ Stop Loss ให้ทำการแก้ไขออเดอร์
- การคำนวณ Stop Loss ใหม่:
- สำหรับออเดอร์ Buy: Stop Loss ใหม่ = ราคา Bid ปัจจุบัน – ระยะห่างที่กำหนด
- สำหรับออเดอร์ Sell: Stop Loss ใหม่ = ราคา Ask ปัจจุบัน + ระยะห่างที่กำหนด
- เงื่อนไขในการปรับ Stop Loss:
- สำหรับออเดอร์ Buy: ปรับเมื่อ Stop Loss ใหม่สูงกว่า Stop Loss ปัจจุบัน
- สำหรับออเดอร์ Sell: ปรับเมื่อ Stop Loss ใหม่ต่ำกว่า Stop Loss ปัจจุบัน หรือยังไม่มีการตั้ง Stop Loss
- การจัดการข้อผิดพลาด:
- ตรวจสอบความสำเร็จในการเลือกออเดอร์
- ตรวจสอบความสำเร็จในการแก้ไขออเดอร์
- บันทึกข้อผิดพลาด (ถ้ามี) เพื่อการตรวจสอบภายหลัง
- ข้อควรระวัง:
- ต้องแน่ใจว่าระยะห่างที่กำหนดเป็นไปตามกฎของโบรกเกอร์
- ควรคำนึงถึงค่า spread ในการคำนวณ Stop Loss ใหม่
- การเรียกใช้ฟังก์ชันนี้บ่อยเกินไปอาจส่งผลต่อประสิทธิภาพของระบบ
- การใช้งานที่แนะนำ:
- เรียกใช้ฟังก์ชันนี้ในฟังก์ชัน OnTick() เพื่อตรวจสอบและปรับ Stop Loss อย่างต่อเนื่อง
- อาจเพิ่มเงื่อนไขเพื่อจำกัดความถี่ในการปรับ Stop Loss เช่น ตรวจสอบทุกๆ 1 นาที
- ประโยชน์:
- ช่วยปกป้องกำไรที่เกิดขึ้นแล้วโดยอัตโนมัติ
- ลดความเสี่ยงจากการกลับตัวของราคาอย่างรวดเร็ว
- ช่วยให้นักเทรดสามารถปล่อยให้กำไรวิ่งต่อไปได้โดยไม่ต้องคอยปรับ Stop Loss ด้วยตนเอง
- ข้อจำกัด:
- อาจทำให้ออกจากตลาดเร็วเกินไปในช่วงที่ราคามีความผันผวนสูง
- ไม่เหมาะกับทุกสภาวะตลาดหรือทุกกลยุทธ์การเทรด
การใช้งาน Trailing Stop ในฟังก์ชัน OnTick()
void OnTick()
{
for(int i = 0; i < OrdersTotal(); i++)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
{
ApplyTrailingStop(OrderTicket(), 50); // Trailing Stop 50 pips
}
}
}
}
- วัตถุประสงค์:
- เพื่อตรวจสอบและปรับ Trailing Stop สำหรับออเดอร์ที่เปิดอยู่ทุกครั้งที่มีการเปลี่ยนแปลงของราคา
- ขั้นตอนการทำงาน:
- a) ตรวจสอบว่าสามารถทำการเทรดได้หรือไม่
- b) วนลูปผ่านทุกออเดอร์ที่เปิดอยู่
- c) เลือกออเดอร์แต่ละรายการ
- d) ตรวจสอบเงื่อนไขของออเดอร์ (เช่น สัญลักษณ์, ประเภทออเดอร์)
- e) ใช้งาน Trailing Stop กับออเดอร์ที่ตรงตามเงื่อนไข
- เงื่อนไขที่ควรตรวจสอบ:
- สัญลักษณ์ของออเดอร์ตรงกับที่ต้องการหรือไม่
- ประเภทของออเดอร์ (Buy หรือ Sell)
- Magic Number (ถ้ามีการใช้งาน)
- ระยะเวลาที่ออเดอร์เปิดอยู่
- กำไร/ขาดทุนปัจจุบันของออเดอร์
- การเรียกใช้ฟังก์ชัน Trailing Stop:
- ส่งหมายเลข Ticket ของออเดอร์
- กำหนดระยะห่างของ Trailing Stop (อาจเป็นค่าคงที่หรือคำนวณตามเงื่อนไข)
- ข้อควรระวัง:
- ตรวจสอบความถี่ในการปรับ Trailing Stop เพื่อไม่ให้กระทบต่อประสิทธิภาพ
- พิจารณาใช้ตัวแปร static เพื่อจำกัดความถี่ในการปรับ (เช่น ทุก 1 นาที)
- ระวังการใช้งานในช่วงที่ตลาดมีความผันผวนสูง
- ประโยชน์ของการใช้ Trailing Stop ใน OnTick():
- ปรับ Stop Loss อย่างต่อเนื่องตามการเคลื่อนไหวของราคา
- ช่วยปกป้องกำไรที่เกิดขึ้นโดยอัตโนมัติ
- สามารถปรับเปลี่ยนกลยุทธ์ได้ตามสภาวะตลาด
- ข้อจำกัด:
- อาจทำให้ออกจากตลาดเร็วเกินไปในบางสถานการณ์
- ต้องระวังการใช้งานทรัพยากรของระบบมากเกินไป
Trailing Stop แบบขั้นบันได (Step Trailing Stop)
void ApplyStepTrailingStop(int ticket, int trailingPoints, int stepPoints)
{
if(!OrderSelect(ticket, SELECT_BY_TICKET))
{
Print("Error selecting order ", ticket, " for step trailing stop. Error: ", GetLastError());
return;
}
double newSL;
if(OrderType() == OP_BUY)
{
newSL = NormalizeDouble(Bid - trailingPoints * Point, Digits);
if(newSL > OrderStopLoss() + stepPoints * Point)
{
if(!OrderModify(ticket, OrderOpenPrice(), newSL, OrderTakeProfit(), 0, CLR_NONE))
{
Print("Error modifying buy order ", ticket, ". Error: ", GetLastError());
}
}
}
else if(OrderType() == OP_SELL)
{
newSL = NormalizeDouble(Ask + trailingPoints * Point, Digits);
if(newSL < OrderStopLoss() - stepPoints * Point || OrderStopLoss() == 0)
{
if(!OrderModify(ticket, OrderOpenPrice(), newSL, OrderTakeProfit(), 0, CLR_NONE))
{
Print("Error modifying sell order ", ticket, ". Error: ", GetLastError());
}
}
}
- แนวคิดพื้นฐาน:
- Trailing Stop แบบขั้นบันไดปรับ Stop Loss เป็นระยะๆ แทนที่จะปรับทุกจุดเหมือน Trailing Stop พื้นฐาน
- ช่วยลดการปรับ Stop Loss บ่อยเกินไป ซึ่งอาจเป็นประโยชน์ในตลาดที่มีความผันผวน
- พารามิเตอร์สำคัญ:
- ระยะห่างของ Trailing Stop (เช่น 50 pips)
- ขนาดของขั้นบันได (เช่น 10 pips)
- หลักการทำงาน:
- เริ่มต้นด้วยการตั้ง Stop Loss เหมือน Trailing Stop ปกติ
- ปรับ Stop Loss ใหม่เมื่อราคาเคลื่อนที่ไปตามทิศทางที่เป็นกำไรเกินกว่าขนาดของขั้นบันได
- ขั้นตอนการทำงาน:
- a) ตรวจสอบราคาปัจจุบัน
- b) คำนวณระยะห่างระหว่างราคาปัจจุบันกับ Stop Loss ปัจจุบัน
- c) ถ้าระยะห่างมากกว่าระยะห่างของ Trailing Stop บวกกับขนาดของขั้นบันได ให้ปรับ Stop Loss
- ตัวอย่างการทำงาน (สำหรับออเดอร์ Buy):
- ราคาเปิด: 1.2000
- ระยะห่างของ Trailing Stop: 50 pips
- ขนาดของขั้นบันได: 10 pips
- Stop Loss เริ่มต้น: 1.1950
- เมื่อราคาขึ้นไปถึง 1.2060, Stop Loss จะถูกปรับเป็น 1.2010
- ครั้งต่อไป Stop Loss จะถูกปรับเมื่อราคาขึ้นไปถึง 1.2070
- ข้อดี:
- ลดความถี่ในการปรับ Stop Loss เมื่อเทียบกับ Trailing Stop แบบปกติ
- อาจช่วยลดการถูกปิดออเดอร์เร็วเกินไปในตลาดที่มีความผันผวน
- ลดภาระการประมวลผลของระบบ
- ข้อเสีย:
- อาจทำให้เสียกำไรมากขึ้นเมื่อราคากลับตัวอย่างรวดเร็ว เมื่อเทียบกับ Trailing Stop แบบปกติ
- การตั้งค่าขนาดของขั้นบันไดที่ไม่เหมาะสมอาจทำให้ไม่ได้ประโยชน์จาก Trailing Stop เท่าที่ควร
- การปรับใช้:
- สามารถปรับขนาดของขั้นบันไดตามความผันผวนของตลาด
- อาจใช้ร่วมกับตัวบ่งชี้ทางเทคนิคเพื่อปรับขนาดของขั้นบันไดแบบไดนามิก
- ข้อควรระวัง:
- ต้องแน่ใจว่าขนาดของขั้นบันไดไม่ใหญ่เกินไปจนทำให้เสียประโยชน์ของ Trailing Stop
- ควรทดสอบย้อนหลังเพื่อหาค่าที่เหมาะสมสำหรับแต่ละคู่สกุลเงินและกรอบเวลา
- การประยุกต์ใช้ขั้นสูง:
- ปรับขนาดของขั้นบันไดตามความผันผวนของตลาด (เช่น ใช้ค่า ATR)
- ใช้ขนาดขั้นบันไดที่แตกต่างกันในแต่ละช่วงของกำไร
- รวมกับเงื่อนไขอื่นๆ เช่น แนวรับแนวต้าน หรือแนวโน้มของตลาด
Trailing Stop ที่ใช้ตัวบ่งชี้ทางเทคนิค
ในตัวอย่างนี้ เราจะใช้ Moving Average เป็นเส้น Trailing Stop
void ApplyMATrailingStop(int ticket, int maPeriod, int maShift)
{
if(!OrderSelect(ticket, SELECT_BY_TICKET))
{
Print("Error selecting order ", ticket, " for MA trailing stop. Error: ", GetLastError());
return;
}
double maValue = iMA(NULL, 0, maPeriod, maShift, MODE_SMA, PRICE_CLOSE, 0);
if(OrderType() == OP_BUY)
{
if(maValue > OrderStopLoss())
{
if(!OrderModify(ticket, OrderOpenPrice(), maValue, OrderTakeProfit(), 0, CLR_NONE))
{
Print("Error modifying buy order ", ticket, ". Error: ", GetLastError());
}
}
}
else if(OrderType() == OP_SELL)
{
if(maValue < OrderStopLoss() || OrderStopLoss() == 0)
{
if(!OrderModify(ticket, OrderOpenPrice(), maValue, OrderTakeProfit(), 0, CLR_NONE))
{
Print("Error modifying sell order ", ticket, ". Error: ", GetLastError());
}
}
}
}
- แนวคิดพื้นฐาน:
- ใช้ Moving Average (MA) เป็นเส้นอ้างอิงสำหรับการปรับ Stop Loss
- แทนที่จะใช้ระยะห่างคงที่, Stop Loss จะถูกปรับตาม MA
- พารามิเตอร์สำคัญ:
- ประเภทของ MA (เช่น Simple, Exponential, Weighted)
- ช่วงเวลาของ MA (เช่น 20 periods, 50 periods)
- ระยะเวลา (Timeframe) ที่ใช้คำนวณ MA
- หลักการทำงาน:
- คำนวณค่า MA สำหรับแท่งเทียนปัจจุบัน
- ใช้ค่า MA เป็นจุดอ้างอิงในการตั้ง Stop Loss
- ขั้นตอนการทำงาน:
- a) คำนวณค่า MA ล่าสุด
- b) เปรียบเทียบค่า MA กับ Stop Loss ปัจจุบัน
- c) ปรับ Stop Loss ให้สอดคล้องกับค่า MA ตามทิศทางของออเดอร์
- การปรับ Stop Loss:
- สำหรับออเดอร์ Buy:
- ถ้า MA สูงกว่า Stop Loss ปัจจุบัน, ปรับ Stop Loss ขึ้นมาที่ค่า MA
- สำหรับออเดอร์ Sell:
- ถ้า MA ต่ำกว่า Stop Loss ปัจจุบัน, ปรับ Stop Loss ลงมาที่ค่า MA
- สำหรับออเดอร์ Buy:
- ข้อดี:
- มีความยืดหยุ่นมากกว่า Trailing Stop แบบระยะห่างคงที่
- สามารถปรับตัวตามแนวโน้มของตลาดได้ดี
- ลดโอกาสการถูกปิดออเดอร์เร็วเกินไปในช่วงที่ราคาผันผวน
- ข้อเสีย:
- อาจตอบสนองช้าในตลาดที่มีการเปลี่ยนแปลงอย่างรวดเร็ว
- การเลือกพารามิเตอร์ของ MA ที่ไม่เหมาะสมอาจทำให้ประสิทธิภาพลดลง
- การปรับใช้:
- สามารถใช้ MA หลายเส้นร่วมกัน (เช่น MA ระยะสั้นและระยะยาว)
- ปรับช่วงเวลาของ MA ตามความผันผวนของตลาด
- ข้อควรระวัง:
- MA อาจไม่เหมาะสมในทุกสภาวะตลาด โดยเฉพาะในตลาดแนวขวาง
- ควรทดสอบกับข้อมูลย้อนหลังเพื่อหาพารามิเตอร์ที่เหมาะสม
- การประยุกต์ใช้ขั้นสูง:
- ใช้ MA ร่วมกับตัวบ่งชี้อื่นๆ เช่น Bollinger Bands หรือ ATR
- ปรับความไวของ MA ตามสภาพตลาด (เช่น ใช้ MA ระยะสั้นในตลาดผันผวน)
- ใช้ MA เป็นเพียงส่วนหนึ่งของเงื่อนไขในการปรับ Stop Loss
- ตัวอย่างการทำงาน:
- ออเดอร์ Buy เปิดที่ราคา 1.2000
- MA(20) ปัจจุบันอยู่ที่ 1.1980
- เมื่อราคาเพิ่มขึ้น และ MA(20) เคลื่อนที่ขึ้นมาที่ 1.2020
- Stop Loss จะถูกปรับขึ้นมาที่ 1.2020
การใช้งาน Trailing Stop ช่วยในการจัดการความเสี่ยงและปกป้องกำไรที่ได้มาแล้ว อย่างไรก็ตาม ควรทดสอบอย่างละเอียดก่อนนำไปใช้งานจริง เนื่องจาก Trailing Stop ที่แคบเกินไปอาจทำให้ออกจากตลาดเร็วเกินไปในช่วงที่ราคาผันผวน
FOREXDUCK (นามปากกา) นักเขียนของเรามีประสบการณ์การเงินการลงทุนกว่า 10 ปี มีความเชี่ยวชาญในการวิเคราะห์ตลาด Forex และคริปโต โดยเฉพาะการวิเคราะห์ทางเทคนิค รวมถึงเทคนิคต่าง