ปิดบางส่วนร่วมกับเทรลลิ่ง: จุดพังและวิธีตรวจ
สารบัญ (5)
สารบัญ
สรุป: สิ่งที่พังไม่ใช่ตรรกะ แต่คือ "การส่งต่อสถานะ"
การปิดบางส่วนและเทรลลิ่งสต็อปไม่ใช่งานยากหากทำแยกกัน ปัญหาเกิดขึ้นเมื่อนำทั้งสองอย่างมาใช้กับโพซิชันเดียวกัน จากประสบการณ์พัฒนาของเรา ปัญหาเกือบทั้งหมดกระจุกอยู่ที่ 3 จุดต่อไปนี้
- การจัดการปริมาณที่เหลือ: EA จำไม่ได้ว่าปิดบางส่วนไปแล้วหรือยัง
- ขั้นของล็อต: ปริมาณที่ปิดไม่ตรงกับล็อตขั้นต่ำหรือขั้นของโบรกเกอร์
- ลำดับการตั้ง SL ใหม่: การปิดบางส่วน การย้าย SL ไปจุดเข้า และเทรลลิ่ง เขียนทับกันเอง
ทั้งหมดนี้เป็นปัญหาที่แทบไม่ปรากฏในแบ็กเทสต์ และมักมาเจอเอาตอนใช้งานจริงเป็นครั้งแรก
เปรียบเทียบโบรกเกอร์แนะนำ →
🎁 ดาวน์โหลด EA ฟรี📧 คอร์สอีเมลฟรี (8 ฉบับ) + แพ็กอินดิเคเตอร์ MT5 13 ตัว เฉพาะสมาชิก
* ปกป้องความเป็นส่วนตัวอย่างเคร่งครัด คุณสามารถยกเลิกการสมัครได้ตลอดเวลา
ทำไมพอใช้ร่วมกันแล้วจึงพัง
อย่าพึ่ง "ความจำ" ของ EA เรื่องปริมาณที่เหลือ
ใน MT5 แม้จะปิดบางส่วน ticket ของโพซิชันก็ไม่เปลี่ยน มีเพียง POSITION_VOLUME ที่ลดลง หากเก็บสถานะ "ปิดบางส่วนแล้ว" ไว้ในตัวแปร bool เพียงอย่างเดียว ค่านั้นจะหายไปเมื่อ EA รีสตาร์ต VPS เชื่อมต่อใหม่ หรือเปลี่ยนกรอบเวลา แล้วในทิคแรกหลังจากนั้น EA ก็จะปิดครึ่งหนึ่งของโพซิชันที่เหลือซ้ำอีกรอบ ซึ่งเป็นอุบัติเหตุที่พบบ่อย
วิธีที่เราใช้คือเรียก HistorySelectByPosition() เพื่อไล่ดูประวัติการเข้าออกของโพซิชันนั้น แล้วเทียบปริมาณตอนเปิดครั้งแรกกับปริมาณที่เหลืออยู่ตอนนี้ เพื่อตัดสินว่าอยู่ในขั้นปิดบางส่วนขั้นไหน ส่วนแฟล็กในหน่วยความจำใช้เป็นตัวช่วยเท่านั้น
ล็อตต้อง "ปัดลง" ไม่ใช่ "ปัดเศษ"
ล็อต 0.03 หารครึ่งได้ 0.015 ในบัญชีที่ขั้นล็อตเป็น 0.01 ถ้าปัดเศษแบบปกติจะกลายเป็นปิด 0.02 ซึ่งมากกว่าที่ตั้งใจไว้ ปริมาณที่ปิดควรปัดลงตาม SYMBOL_VOLUME_STEP และต้องตรวจด้วยว่าปริมาณที่เหลือหลังปิดไม่ต่ำกว่า SYMBOL_VOLUME_MIN ส่วนล็อต 0.01 แบ่งไม่ได้อยู่แล้ว หากไม่กำหนดเป็นสเปกไว้ล่วงหน้าว่าจะ "ไม่ปิดบางส่วน" หรือ "ปิดทั้งหมด" EA ก็จะส่งคืนข้อผิดพลาดซ้ำไปเรื่อย ๆ
เขียน SL ที่จุดเดียวในตอนท้าย
PositionModify() เป็นฟังก์ชันที่ระบุ SL และ TP พร้อมกัน ถ้าโค้ดเทรลลิ่งส่ง TP เป็น 0 TP จะหายไป นอกจากนี้ หากหลังปิดบางส่วนมีโค้ดย้าย SL ไปจุดเข้า และโค้ดเทรลลิ่งที่เลื่อน SL ขึ้น ทำงานแยกกันในทิคเดียวกัน ฝั่งที่เขียนทีหลังจะชนะ ผลคือ SL ที่เคยขยับขึ้นถึงจุดเข้าแล้วอาจถูกดึงกลับลงมา
ลำดับที่เราใช้เป็นดังนี้
- ส่งคำสั่งปิดบางส่วน → เลือกโพซิชันใหม่แล้วตรวจปริมาณที่เหลือ
- คำนวณทั้ง SL ที่จุดเข้าและ SL จากเทรลลิ่งไว้เป็นตัวเลือก
- ขยับเฉพาะ "ฝั่งที่ได้เปรียบกว่า SL ปัจจุบัน" (ฝั่ง Buy เอาค่าที่สูงกว่า ฝั่ง Sell เอาค่าที่ต่ำกว่า)
- ตรวจ Stop Level และ Freeze Level ก่อน แล้วส่งค่า TP ปัจจุบันกลับไปใหม่ และแก้ไขเพียงครั้งเดียว
เช็กลิสต์การใช้งานและการตรวจสอบ
| รายการที่ตรวจ | อาการเมื่อพัง | วิธีตรวจ |
|---|---|---|
| ตัดสินขั้นการปิดบางส่วนจากประวัติการเข้าออกหรือไม่ | รีสตาร์ตแล้วปิดบางส่วนซ้ำสองรอบ | ระหว่างทำงานให้ถอด EA แล้วใส่ใหม่ แล้วดูว่าปริมาณที่เหลือเปลี่ยนไปอย่างไร |
| ปัดปริมาณที่ปิดลงตามขั้นของล็อตหรือไม่ | ปิดมากกว่าที่คิด หรือเกิดข้อผิดพลาด | เปิดด้วยล็อตขั้นต่ำแล้วดูล็อก |
| กำหนดไว้หรือไม่ว่าถ้าเป็นล็อตขั้นต่ำจะจัดการการแบ่งอย่างไร | ปิดไม่สำเร็จทุกทิค | ทดลองด้วยล็อต 0.01 |
| SL ไม่ย้อนกลับไปในทิศทางที่เสียเปรียบใช่หรือไม่ | หลังย้าย SL ไปจุดเข้าแล้วยังถูกปิดด้วยผลขาดทุน | ไล่ดูการเปลี่ยนแปลงของ SL ตามลำดับเวลาในล็อก |
| การแก้ SL ไม่ทำให้ TP หายใช่หรือไม่ | การทำกำไรไม่ทำงาน | ดูช่อง TP ของโพซิชันหลังแก้ไข |
| ถ้าปิดบางส่วนไม่สำเร็จ จะไม่ขยับ SL ใช่หรือไม่ | ปริมาณที่เหลือกับสมมติฐานของ SL คลาดเคลื่อน | ส่งคำสั่งก่อนตลาดปิดไม่นานเพื่อให้ล้มเหลว |
| ไม่ได้รันบนบัญชีแบบ Netting ใช่หรือไม่ | ไปรวมกับโพซิชันของ EA ตัวอื่น | ตรวจชนิดของบัญชี |
ถ้าคุณเป็นฝ่ายผู้ใช้ วิธีตรวจที่เร็วที่สุดคือรันบนบัญชีทดลองด้วยล็อตขั้นต่ำ แล้วดูว่าถอด EA แล้วใส่ใหม่กลางทางพฤติกรรมยังเหมือนเดิมหรือไม่ พื้นฐานของการตั้งค่าสรุปไว้ที่ วิธีตั้งค่า EA
ข้อจำกัดและข้อควรระวัง
Strategy Tester ทำให้ออเดอร์ถูกจับคู่ทันที และแทบไม่เกิดกรณีที่ออเดอร์ถูกจับคู่เพียงบางส่วน ดังนั้นปัญหาเกี่ยวกับการปิดบางส่วนแทบไม่เห็นจากตัวเลขในแบ็กเทสต์ ความแตกต่างของวิธีการจับคู่ออเดอร์ (Filling Mode) ในบัญชีจริง และพฤติกรรมเมื่อเกิดรีโควต ตามตรงคือต้องตรวจสอบกับโบรกเกอร์แต่ละรายเอง
การใส่ปิดบางส่วนก็ไม่ได้แปลว่าผลงานจะดีขึ้นเสมอไป ในกลยุทธ์เทรนด์ฟอลโลว์ที่อัตราชนะต่ำและพึ่งกำไรก้อนใหญ่จำนวนน้อยครั้งเป็นตัวพยุงภาพรวม (เช่น DONCHIAN ENGINE ที่อัตราชนะในแบ็กเทสต์คือ 34.5%) การลดปริมาณตอนที่กำไรกำลังขยายอาจทำให้ค่าคาดหวังลดลง แม้ความผันผวนของกำไรขาดทุนจะเล็กลง แต่จะต้องแลกกับอะไรไปบ้างนั้น ต้องทดสอบเป็นรายตัว EA เราเองก็ยังตรวจสอบได้ไม่ครบทุกชุดผสม
หากคุณจะเพิ่มการปิดบางส่วนเองในภายหลังให้กับกลยุทธ์อย่าง DONCHIAN ENGINE โปรดระวังว่าผลการทดสอบเดิมจะใช้อ้างอิงต่อไปตรง ๆ ไม่ได้อีก
สรุป
- สิ่งที่พังบ่อยเมื่อใช้ปิดบางส่วนร่วมกับเทรลลิ่งคือ "การส่งต่อสถานะ" มากกว่าตรรกะ
- ขั้นการปิดบางส่วนให้ตัดสินจากประวัติการเข้าออกและปริมาณที่เหลือ ไม่ใช่แฟล็กในหน่วยความจำ
- ปัดล็อตลงตามขั้นของล็อต และตรวจว่าปริมาณที่เหลือไม่ต่ำกว่าล็อตขั้นต่ำ
- การแก้ SL ให้รวมไว้ที่จุดเดียว ขยับเฉพาะทิศทางที่ได้เปรียบ และอย่าให้ TP หาย
- แบ็กเทสต์มองเห็นได้ยาก จึงควรทดสอบถอดแล้วใส่ EA ใหม่บนบัญชีทดลอง
- การปิดบางส่วนทำให้ความผันผวนของกำไรขาดทุนเล็กลง แต่บางครั้งก็ทำให้ค่าคาดหวังลดลงด้วย
เรายังรวบรวมข้อควรระวังด้านการเขียน EA อื่น ๆ ไว้ที่ ความรู้ EA และ MT5
บทความที่เกี่ยวข้อง
2026-10-29
OnTick กับ OnTimer ใน MQL5 | เลือกใช้อย่างไรในการออกแบบ EA
2026-11-07
Stop Level และ Freeze Level | ทำไมวาง SL ไม่ได้
2026-11-01
ทำไม EA ที่ใช้แท่งเทียนที่ปิดแล้วจึงไม่ Repaint
2026-10-21
ใช้ Monte Carlo วัดช่วงความเสี่ยงของ DD จากโชค
📧 คอร์สอีเมลฟรี (8 ฉบับ) + แพ็กอินดิเคเตอร์ MT5 13 ตัว เฉพาะสมาชิก
* ปกป้องความเป็นส่วนตัวอย่างเคร่งครัด คุณสามารถยกเลิกการสมัครได้ตลอดเวลา
มีคำถามเกี่ยวกับ EA หรือ Forex ไหม?
คุณสามารถตั้งคำถามได้ที่ฟอรัมเทรดของ Nattzy (สมัครฟรี) ไม่จำเป็นต้องเกี่ยวกับบทความนี้ก็ได้ เช่น การตั้งค่า EA หรือการเลือกโบรกเกอร์
ถามที่ Nattzy ↗