ZZ2_EA Evolution: From Fixed SL to Progressive Hedging with Risk-Based Money Management

Development Log · 2025-06


1. Title

ZZ2_EA Evolution: From Fixed SL to Progressive Hedging with Risk-Based Money Management


2. Date / Phase

  • Date: 2025-06 (เริ่มต้น)
  • Phase: Risk Architecture & Hedging Substitution — การเปลี่ยนผ่านจากระบบ Stop Loss แบบดั้งเดิมไปสู่ระบบป้องกันความเสี่ยงเชิงรุก (Progressive Hedging) ที่คำนวณขนาดไม้แบบไดนามิก

3. Background

จุดเริ่มต้นของบทสนทนานี้มาจากความต้องการปรับปรุง Expert Advisor ชื่อ ZZ2_EA ซึ่งเป็น EA ที่เปิดออเดอร์โดยอาศัยสัญญาณจาก ZigZag สองตัว (ZigZag1 และ ZigZag2) ร่วมกับเงื่อนไขการยืนยันแท่งเทียนสองแท่ง (Two-Candle Confirmation)

ปัญหาที่พบในระบบเดิมมีสองประการ:

  1. Money Management แบบคงที่ — การใช้ Lot Size คงที่ (เช่น 0.01) ไม่ได้สะท้อนความเสี่ยงที่แท้จริงของแต่ละการเทรด และไม่ปรับตัวตามขนาดบัญชีที่เปลี่ยนแปลง

  2. Stop Loss แบบดั้งเดิม — การตั้ง SL ตามระยะห่างจากราคาเข้าออเดอร์ (A) เป็นวิธีที่ทำให้ขาดทุนในทันทีเมื่อราคาเคลื่อนที่ตรงข้าม และไม่เปิดโอกาสให้ระบบปรับตัว

คำถามหลักคือ: จะสามารถแทนที่ Stop Loss แบบอัตโนมัติด้วยเทคนิค Progressive Hedging ได้หรือไม่ โดยที่ ZZ2_EA ยังคงตรรกะการเปิดออเดอร์เดิมไว้ทั้งหมด และในขณะเดียวกันก็ต้องทำให้ระบบสามารถแยกแยะระหว่างออเดอร์หลักกับออเดอร์ Hedge ได้อย่างชัดเจน


4. Key Insights

4.1 Risk-Based Money Management แทน Lot Size คงที่

แนวคิดแรกคือการเปลี่ยนระบบ Money Management จาก Lot Size คงที่มาเป็น Risk % ต่อการเทรด โดยคำนวณจาก:

  • Equity ปัจจุบันของบัญชี
  • ระยะห่างระหว่างราคาเข้าออเดอร์กับ Stop Loss (หรือในกรณีนี้คือระยะ A)
  • มูลค่าต่อจุด (Tick Value) ของสินค้า

เหตุผล: การใช้ Risk % ทำให้ขนาดออเดอร์ปรับตัวอัตโนมัติตามขนาดบัญชี ช่วยควบคุม Drawdown ได้ดีขึ้น และทำให้ผลลัพธ์ใน Backtest สอดคล้องกับพอร์ตจริงมากขึ้น

4.2 การแยกตัวตนของออเดอร์ด้วย Magic Number

เพื่อให้ ZZ2_EA ยังคงทำงานตามเงื่อนไขเดิม (เปิดออเดอร์ได้เฉพาะเมื่อไม่มีออเดอร์เปิดอยู่) แต่ในขณะเดียวกันก็ต้องมีออเดอร์ Hedge เปิดอยู่พร้อมกัน จำเป็นต้องใช้ Magic Number สองค่า:

  • MAGIC_ZZ สำหรับออเดอร์หลักที่เปิดโดย ZZ2_EA
  • MAGIC_HEDGE สำหรับออเดอร์ Hedge ที่เปิดโดยระบบ Progressive Hedging

เหตุผล: การแยก Magic Number ทำให้ฟังก์ชัน HasOpenPosition() ของ ZZ2_EA ตรวจสอบเฉพาะออเดอร์ของตัวเอง และไม่สนใจออเดอร์ Hedge ที่เปิดอยู่

4.3 แนวคิด "Virtual Close" ของออเดอร์หลัก

เมื่อราคาเคลื่อนที่ตรงข้ามจนถึงระดับที่ควรจะเป็น Stop Loss เดิม ระบบจะ ไม่ปิดออเดอร์หลักจริง แต่จะทำเครื่องหมายว่า "เสมือนปิด" (virtuallyClosed = true) และเปิด Hedge Order แทน

เหตุผล: ออเดอร์หลักยังคงมี Entry Price และ Take Profit ที่ตั้งไว้ หากราคากลับมาดี ออเดอร์หลักจะสามารถทำกำไรได้ตาม TP เดิม ในขณะที่ ZZ2_EA จะเข้าใจว่าไม่มีออเดอร์เปิดอยู่ และพร้อมรับสัญญาณใหม่ได้ทันที

4.4 Progressive Hedging ตามสูตรคณิตศาสตร์

ระบบ Hedge ใช้สูตรการคำนวณ Lot Size จากเอกสาร Hedging Formula: