หน้าหลัก > บล็อก > ปิดบางส่วนร่วมกับเทรลลิ่ง: จุดพังและวิธีตรวจ

MQL5การพัฒนา EA

ปิดบางส่วนร่วมกับเทรลลิ่ง: จุดพังและวิธีตรวจ

เผยแพร่: 2026-11-11เวลาอ่าน: ประมาณ 1 นาที
⏱ บทความนี้สะท้อนข้อมูล ณ วันที่เผยแพร่ ตัวเลขผลงาน EA (PF, DD, ผลตอบแทนต่อปี) เปลี่ยนแปลงตามการเทรดจริงและการตรวจสอบซ้ำ — ตรวจสอบล่าสุดได้ที่หน้า EA ดูผลงานล่าสุดของ EA →
สารบัญ (5)
  1. สรุป: สิ่งที่พังไม่ใช่ตรรกะ แต่คือ "การส่งต่อสถานะ"
  2. ทำไมพอใช้ร่วมกันแล้วจึงพัง
  3. อย่าพึ่ง "ความจำ" ของ EA เรื่องปริมาณที่เหลือ
  4. ล็อตต้อง "ปัดลง" ไม่ใช่ "ปัดเศษ"
  5. เขียน SL ที่จุดเดียวในตอนท้าย
  6. เช็กลิสต์การใช้งานและการตรวจสอบ
  7. ข้อจำกัดและข้อควรระวัง
  8. สรุป

สรุป: สิ่งที่พังไม่ใช่ตรรกะ แต่คือ "การส่งต่อสถานะ"

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

  1. การจัดการปริมาณที่เหลือ: EA จำไม่ได้ว่าปิดบางส่วนไปแล้วหรือยัง
  2. ขั้นของล็อต: ปริมาณที่ปิดไม่ตรงกับล็อตขั้นต่ำหรือขั้นของโบรกเกอร์
  3. ลำดับการตั้ง 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

📧 คอร์สอีเมลฟรี (8 ฉบับ) + แพ็กอินดิเคเตอร์ MT5 13 ตัว เฉพาะสมาชิก

* ปกป้องความเป็นส่วนตัวอย่างเคร่งครัด คุณสามารถยกเลิกการสมัครได้ตลอดเวลา

มีคำถามเกี่ยวกับ EA หรือ Forex ไหม?

คุณสามารถตั้งคำถามได้ที่ฟอรัมเทรดของ Nattzy (สมัครฟรี) ไม่จำเป็นต้องเกี่ยวกับบทความนี้ก็ได้ เช่น การตั้งค่า EA หรือการเลือกโบรกเกอร์

ถามที่ Nattzy ↗

ความคิดเห็นและคำถาม