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 ที่ถูกต้อง การแก้ไขที่เกิดขึ้นเพียงสองอักขระ จาก
> เป็น >= สะท้อนให้เห็นว่าในงานวิศวกรรม
ความแม่นยำในรายละเอียดมักมีน้ำหนักมากกว่าความซับซ้อนของโครงสร้าง
และการที่ผู้พัฒนาสังเกตเห็นความผิดปกติในผลลัพธ์ก่อนที่จะนำไปใช้จริง
แสดงถึงวินัยในการตรวจสอบที่เป็นรากฐานสำคัญของการพัฒนาระบบเทรดที่เชื่อถือได้ในระยะยาว
