ZigZag Parameter Validation for Optimization

Development Log · 2025-06-12

ข้อกำหนดที่ว่า "หากวันที่เริ่มต้นสนทนาในข้อ 2. เป็นวันที่ก่อนหน้าวันที่ 4 พฤษภาคม 2026 ไม่ต้องกล่าวถึง KOOeda6, AMARA, RAIDER, HROOM" มีผลกับ Log นี้ครับ เนื่องจากวันที่เริ่มต้นคือ 12 มิถุนายน 2025



1. Title

ZigZag Dual-Indicator EA — Parameter Validation for Optimization


2. Date / Phase

Date: 12 มิถุนายน 2025 Phase: EA Robustness Engineering — Optimization Guard


3. Background

Expert Advisor ที่ใช้ ZigZag สองตัวในการสร้างสัญญาณเทรดมีโครงสร้างการทำงานที่สมบูรณ์แล้ว แต่เมื่อนำไปรัน Optimization ใน MT5 Strategy Tester พบว่าระบบยังคงทดสอบชุดพารามิเตอร์ที่ BackStep มีค่ามากกว่าหรือเท่ากับ Depth ซึ่งทำให้ ZigZag ทำงานผิดปกติและผลลัพธ์จาก Optimization ไม่สะอาด


4. Key Insights

BackStep ต้องน้อยกว่า Depth อย่างเคร่งครัด ไม่ใช่เพียง "ไม่มากกว่า" แต่ต้องน้อยกว่าอย่างเด็ดขาด กล่าวคือ BackStep = Depth ก็ยังเป็นชุดพารามิเตอร์ที่ไม่ถูกต้อง เนื่องจาก ZigZag ต้องการพื้นที่ย้อนกลับ (Backstep window) ที่แคบกว่าช่วงความลึก (Depth) จึงจะสามารถระบุ turning point ได้อย่างถูกต้อง

INIT_PARAMETERS_INCORRECT คือกลไกที่ถูกต้องสำหรับ Optimization Guard การ return ค่านี้ใน OnInit() ทำให้ MT5 Strategy Tester ข้ามชุดพารามิเตอร์นั้นโดยอัตโนมัติโดยไม่นับเป็น failed test ซึ่งต่างจาก INIT_FAILED ที่มีความหมายว่าระบบมีปัญหา

ข้อผิดพลาดเล็กน้อยในเงื่อนไขส่งผลต่อคุณภาพข้อมูล Optimization อย่างมีนัยสำคัญ การใช้ > แทน >= เพียงอักขระเดียวทำให้ชุดพารามิเตอร์ที่ไม่ถูกต้องหลุดเข้าสู่ผลลัพธ์ และอาจทำให้ตีความผลการ Optimization ผิดพลาดได้


5. Decisions

  • ใช้เงื่อนไข ZigZag1Back >= ZigZag1Depth และ ZigZag2Back >= ZigZag2Depth เพื่อกรองชุดพารามิเตอร์ที่ไม่ถูกต้อง
  • เพิ่ม Validation ครอบคลุมพารามิเตอร์ทั้งหมด ได้แก่ Depth, Deviation, BackStep, LotSize, TakeProfit และ StopLossOffset
  • เพิ่ม Print() log ที่ระบุค่าพารามิเตอร์ที่ทำให้เกิดปัญหาอย่างชัดเจน เพื่อให้ตรวจสอบย้อนหลังได้
  • แก้ไขเฉพาะ 2 บรรทัด (>>=) โดยไม่แตะโครงสร้างอื่นของ EA

6. Philosophy

Optimization ที่ดีไม่ใช่การค้นหาพารามิเตอร์ที่ให้ผลดีที่สุด แต่คือการค้นหาพารามิเตอร์ที่ดีที่สุดจากพื้นที่ที่ถูกต้องเท่านั้น หากพื้นที่ค้นหายังมีชุดพารามิเตอร์ที่ไม่มีความหมายปะปนอยู่ ผลลัพธ์ที่ได้ก็ไม่อาจเชื่อถือได้ การเขียน Guard ใน OnInit() จึงไม่ใช่เพียงการป้องกันข้อผิดพลาด แต่เป็นการรักษาความสะอาดของกระบวนการค้นหาความจริง


7. Future Work

  • ตรวจสอบว่า ZigZag ของ MT5 มีข้อกำหนดความสัมพันธ์ระหว่าง Depth กับ Deviation อีกหรือไม่ เพื่อเพิ่ม Validation ให้ครอบคลุมยิ่งขึ้น
  • พิจารณาสร้าง Validation Function แยกต่างหากเพื่อให้โค้ดใน OnInit() อ่านง่ายขึ้น หากมีการเพิ่มพารามิเตอร์ในอนาคต
  • รัน Optimization รอบใหม่เพื่อยืนยันว่าชุดพารามิเตอร์ที่ BackStep = Depth ไม่ปรากฏในรายงานอีกต่อไป

8. Closing Note

บทสนทนานี้เริ่มต้นจากข้อสังเกตที่ดูเล็กน้อย คือการพบชุดพารามิเตอร์ที่ไม่ถูกต้องปรากฏในผลลัพธ์ Optimization แต่นำไปสู่การทำความเข้าใจที่ลึกซึ้งขึ้นเกี่ยวกับกลไกภายในของ ZigZag Indicator และหลักการออกแบบ Optimization Guard ที่ถูกต้อง การแก้ไขที่เกิดขึ้นเพียงสองอักขระ จาก > เป็น >= สะท้อนให้เห็นว่าในงานวิศวกรรม ความแม่นยำในรายละเอียดมักมีน้ำหนักมากกว่าความซับซ้อนของโครงสร้าง และการที่ผู้พัฒนาสังเกตเห็นความผิดปกติในผลลัพธ์ก่อนที่จะนำไปใช้จริง แสดงถึงวินัยในการตรวจสอบที่เป็นรากฐานสำคัญของการพัฒนาระบบเทรดที่เชื่อถือได้ในระยะยาว