สวัสดีครับทุกคน! ตัวชี้วัด ZigZag นี้ได้ถูกพัฒนาขึ้นจาก โค้ด ZigZag และได้รับอนุญาตจากผู้เขียน PPC. ผมได้ทดสอบเวอร์ชันนี้และแก้ไขข้อผิดพลาดในอัลกอริธึมแล้วครับ
โค้ดนี้เป็นเวอร์ชัน MQL5 ของ ตัวชี้วัด ZigZag สำหรับ MetaTrader 4 ครับ
โปรดทราบ! ไลบรารี AlexSTAL_OutsideBar.mqh ควรอยู่ใน ..\MQL5\Include โฟลเดอร์ของ MetaTrader 5 ครับ
แค่นี้เหรอ?
สำหรับผมแล้ว ZigZag เป็นเหมือนการบีบอัดกราฟราคา ตัวชี้วัด ZigZag สามารถคำนวณได้จากราคาบาร์ (เช่น ราคาปิด) หรือราคาสูง/ต่ำของบาร์ (วิธีที่นิยมใช้มากที่สุด)
ในขณะที่ทำงานกับ ZigZag มาตรฐานที่เสนอโดย MetaQuotes ผมพบข้อผิดพลาดบางประการ ปัญหาหลักคือ ZigZag มาตรฐานไม่สามารถจัดการกับกรณี outside bar ได้
ในปี 2007 Rashid Umarov (Rosh) ได้เผยแพร่ โค้ด Zigzag2 R ที่มีการจัดการ outside bar (DRAW_ZIGZAG แทนที่จะเป็น DRAW_SECTION).
มาดูกันว่าฟีเจอร์ของการใช้งาน ZigZag ที่ "ถูกต้อง" ควรเป็นอย่างไร:
- Highs และ Lows ต้องสลับกันอย่างเคร่งครัด;
- High ต้องสูงกว่า (หรือเท่ากับ) บาร์ทั้งหมดทางด้านขวาจนกว่าจะถึง Low (ที่ตรงกัน);
- Low ต้องต่ำกว่า (หรือเท่ากับ) บาร์ทั้งหมดทางด้านซ้ายจนกว่าจะถึง High (ที่ตรงกัน).
ลองมาดูตัวอย่าง (EURUSD, H1, 2006, 8-13 ธันวาคม) กันดูนะครับ ที่นี่เรามีสองกรณีกับ outside bar ZigZag ปกติไม่สามารถสร้างภาพ "ถูกต้อง" ได้
![รูปที่ 1 ZigZag ปกติกับพารามิเตอร์ [12;5;3] และ [12;0;0] รูปที่ 1 ZigZag ปกติกับพารามิเตอร์ [12;5;3] และ [12;0;0]](https://dailyforexmap.s3.ap-northeast-1.amazonaws.com/forum/202511/1763923773916-zz_011.webp)
รูปที่ 1. ZigZag ปกติ ด้วยพารามิเตอร์ [12;5;3] และ [12;0;0]
![รูปที่ 2 Zigzag2 R ด้วยพารามิเตอร์ [12;5;3] รูปที่ 2 Zigzag2 R ด้วยพารามิเตอร์ [12;5;3]](https://dailyforexmap.s3.ap-northeast-1.amazonaws.com/forum/202511/1763923774923-zz_031.webp)
รูปที่ 2. Zigzag2 R ด้วยพารามิเตอร์ [12;5;3]
![รูปที่ 3 Zigzag2 R ด้วยพารามิเตอร์ [12;0;0] รูปที่ 3 Zigzag2 R ด้วยพารามิเตอร์ [12;0;0]](https://dailyforexmap.s3.ap-northeast-1.amazonaws.com/forum/202511/1763923775902-zz_021.webp)
รูปที่ 3. Zigzag2 R ด้วยพารามิเตอร์ [12;0;0]
จากมุมมองแรก การสร้างที่ถูกต้องจะปรากฏใน รูปที่ 3 แต่มีข้อควรพิจารณาบางประการ:
- ในกรณีนี้มันถูกสร้างขึ้นอย่างถูกต้องเพราะพารามิเตอร์นำเข้า แต่โดยทั่วไปอัลกอริธึมควรทำงานกับพารามิเตอร์ใดๆ
- Outside bar ทางด้านซ้ายไม่ถูกต้อง เนื่องจากลำดับของการสร้าง High/Low ของบาร์:

เซกเมนต์ ZigZag ต้องถูกสร้างขึ้นเช่นนี้
ผมได้ทดสอบหลายกรณีของอัลกอริธึม ZigZag ต่อไปนี้: ZigZag MT3, ZigZag, Zigzag R, Zigzag2 R, ZigZag_NK, ZigZag_ZUP89_nen, ZigZag_new_nen4, CZigZag, Swing_ZZ_1, DT_ZZ_nen, ZigZag_Talex, Reverse_ZZ, Points_ZZ_1, i_MF_Fractal_ZZ_3in1, ang_Amp_ZZ, ZigzagFr_v1, NonLagZigZag_v2, ZZ_FF_v3, ZigZag Ensign, ZigZag tauber, SQZZ Товаровед, ZZ_2L_nen wellx, Channel ZZ, Azzx_larryzz_3_0, RPoint, RPoint-m v2, ZigZagTF. แต่ไม่มีตัวใดที่สามารถแก้ปัญหาได้อย่างถูกต้อง.
มาดูภาพเหล่านี้กับตัวชี้วัดนี้:
![รูปที่ 4 ZigZag มืออาชีพ ด้วยพารามิเตอร์ [12;0] รูปที่ 4 ZigZag มืออาชีพ ด้วยพารามิเตอร์ [12;0]](https://dailyforexmap.s3.ap-northeast-1.amazonaws.com/forum/202511/1763923777684-zz_051.webp)
รูปที่ 4. ZigZag มืออาชีพ ด้วยพารามิเตอร์ [12;0]
![รูปที่ 5 ZigZag มืออาชีพ ด้วยพารามิเตอร์ [23;0] รูปที่ 5 ZigZag มืออาชีพ ด้วยพารามิเตอร์ [23;0]](https://dailyforexmap.s3.ap-northeast-1.amazonaws.com/forum/202511/1763923778688-zz_061.webp)
รูปที่ 5. ZigZag มืออาชีพ ด้วยพารามิเตอร์ [23;0]
ฟีเจอร์บางอย่างของเวอร์ชันนี้:
- อัลกอริธึมแบบ one-pass
- มันจะคำนวณและวาดใหม่เฉพาะเซกเมนต์สุดท้าย (เซกเมนต์ไม่สามารถถูกยกเลิกได้ นอกจากการอัปเดตประวัติ)
- มีอัลกอริธึมการปรับแต่งสำหรับการคำนวณภายในบาร์ (มันไม่ใช้การคำนวณใหม่ตาม tick ถ้าราคาได้เปลี่ยนภายในบาร์ 0 (ที่ยังไม่เสร็จ) หรือการเปลี่ยนแปลงราคาต่ำกว่าค่ากำหนดที่กำหนดโดยพารามิเตอร์ MinMotion)
- มีสองอัลกอริธึมสำหรับการจัดเรียงการสร้าง High/Low: ใช้ประเภทบาร์ (รวดเร็วแต่ไม่แม่นยำ) ใช้ข้อมูลจากกรอบเวลาต่ำกว่า (ต้องมีประวัติ ต้องตรวจสอบความถูกต้องหรือคุณต้องปรับแต่งไลบรารี OutsideBar)
มาดูตัวอย่างเพิ่มเติมเกี่ยวกับการสร้าง ZigZag ที่ไม่ถูกต้อง:
![รูปที่ 6 EURUSD, H1, 29 พฤศจิกายน - 7 ธันวาคม (เส้นแดง: ZigZag ด้วยพารามิเตอร์ [7;0;0]. เส้นสีน้ำเงิน: Zigzag2 R ด้วยพารามิเตอร์ [7;0;0].) รูปที่ 6 EURUSD, H1, 29 พฤศจิกายน - 7 ธันวาคม (เส้นแดง: ZigZag ด้วยพารามิเตอร์ [7;0;0]. เส้นสีน้ำเงิน: Zigzag2 R ด้วยพารามิเตอร์ [7;0;0].)](https://dailyforexmap.s3.ap-northeast-1.amazonaws.com/forum/202511/1763923779494-zz_071.webp)
รูปที่ 6. EURUSD, H1, 29 พฤศจิกายน - 7 ธันวาคม (เส้นแดง: ZigZag ด้วยพารามิเตอร์ [7;0;0]. เส้นสีน้ำเงิน: Zigzag2 R ด้วยพารามิเตอร์ [7;0;0].)

รูปที่ 7. EURUSD, H1, 2010, 29 พฤศจิกายน - 7 ธันวาคม การสร้าง ZigZag ที่ถูกต้อง.
สรุป
น่าเสียดายที่เวอร์ชันนี้ยังไม่สมบูรณ์แบบ แต่ผมกำลังทำงานต่อไป
เนื่องจากอัลกอริธึมช่อง (iHighest/iLowest) บางครั้งมันจะข้าม highs.
โปรดแจ้งให้ผมทราบเกี่ยวกับข้อบกพร่องและฟีเจอร์ของตัวชี้วัดนี้ครับ.
โพสต์ที่เกี่ยวข้อง
- เครื่องมือ Open Range Breakout สำหรับ MetaTrader 5
- ID Lite Info MA – ตัวช่วยวิเคราะห์ Moving Average สำหรับ MetaTrader 5
- Volume Profile + Range v6.0: เครื่องมือวิเคราะห์การซื้อขายใน MetaTrader 5
- การวิเคราะห์สเปกตรัมเดี่ยว: ตัวชี้วัดแนวโน้มสำหรับ MetaTrader 5
- ค้นหา Pin Bar: เครื่องมือวิเคราะห์สำหรับ MetaTrader 5