프로페셔널 지그재그 - MetaTrader 5용 지표
주의! 이 표시기는 코드 Just ZZ (지그재그) 버전 중 하나를 기반으로하며 PPC 작성자의 허가를 받아 여기에 게시되었습니다 (알고리즘의 오류를 테스트하고 지적하는 데 직접 참여했습니다). 이 코드는 메타트레이더 4 플랫폼용 지표의 일대일 버전을 재작성한 것입니다.
주의! 라이브러리 "AlexSTAL_OutsideBar.mqh"는 터미널 폴더 ..\MQL5\Include\에위치해야 합니다.
지그재그란 무엇인가요?
제가 보기에 지그재그는 일종의 가격 차트 압축입니다. 지그재그는 단일 막대 가격(예: 종가만) 또는 고점/저점(가장 일반적인 구성 유형)을 기준으로 할 수 있습니다.
표준 지그재그 인디케이터를 연구하고 작업하는 과정에서 메타쿼츠의 일반적인 솔루션의 몇 가지 오류와 단점이 드러났습니다. 가장 큰 문제는 표준 지그재그가 외부 막대가 있는 상황을 처리하지 못한다는 것입니다.
2007년에 Rosh는 외부 막대를 처리하는 알고리즘(하나의 막대에 지그재그 극단을 배치할 수 있는 DRAW_SECTION 대신 드로잉 스타일 DRAW_ZIGZAG 사용)을 사용해야 하는 Zigzag2 R 표시기의 버전을 발표했지만, 본인도 모르는 이유로 사이트의 버전에 필요한 코드가 포함되어 있지 않습니다.
대화를 계속하기 위해 일반적인 지그재그 구축의 정확성에 대한 제 정의를 공식화하고자 합니다:
- 극값 높음과 낮음은 엄격하게 번갈아 가며 나타나야 합니다;
- 극값은 다음 (반대편) 극값까지 오른쪽에 있는 모든 막대 중 최대(또는 동일한) 값을 가져야 합니다;
- 극한값은 다음 (반대편) 극한값까지 오른쪽에 위치한 모든 막대 중 최소값(또는 동일한 값)을 가져야 합니다.
일반적인 인디케이터가 올바르게 처리하지 못하는 외부 막대가 있는 두 가지 상황이 동시에 발생하는 매우 예시적인 예(2006년 12월 8~13일 EURUSD H1)를 살펴봅시다.
![그림 1: 파라미터 [12;5;3] 및 [12;0;0]이 있는 일반적인 지그재그 패턴 그림 1: 파라미터 [12;5;3] 및 [12;0;0]이 있는 일반적인 지그재그 패턴](https://c.mql5.com/18/164/zz_01s__2.png)
그림 1: 매개변수 [12;5;3] 및 [12;0;0]이 있는 전형적인 지그재그형 차트
![그림 2: 매개변수 [12;5;3]이 있는 지그재그2 R 그림 2: 매개변수 [12;5;3]이 있는 지그재그2 R](https://c.mql5.com/18/164/zz_03s__2.png)
그림 2: 파라미터 [12;5;3]이 있는 지그재그2 R
![그림 3: 매개변수 [12;0;0]이 있는 지그재그2 R 그림 3: 매개변수 [12;0;0]이 있는 지그재그2 R](https://c.mql5.com/18/164/zz_02s__4.png)
그림 3. 파라미터 [12;0;0]이 있는 지그재그2 R
언뜻 보기에는 그림 3이 맞는 것처럼 보이지만:
- 이는 매개변수가 일치하는 경우이며, 어떤 매개변수를 사용하더라도 포메이션의 정확성은 유지되어야 합니다.
- 왼쪽의 바깥쪽 막대는 하이/로우 막대의 형성 순서가 중요하기 때문에 올바르게 처리되지 않았습니다:

따라서 지그재그 세그먼트의 순서도 중요합니다.
다음 지그재그는 연구 기간 동안 테스트되었습니다(게시된 기간뿐만 아니라): ZigZag MT3, ZigZag, ZigZag R, ZigZag2 R, ZigZag_NK, ZigZag_ZUP89_nen, ZigZag_ZUP89_nen, ZigZag_new_nen4, CZigZag, Swing_ZZZ_1, DT_ZZ_nen, ZigZag_Talex, Reverse_ZZZ, Points_ZZZ_1, i_MF_Fractal_ZZZ_3in1, ang_Amp_ZZZ, ZigzagFr_v1, NonLagZigZigZag_v2, ZZ_FF_v3, ZigZag Ensign, ZigZag tauber, SQZZ Commodore, ZZ_2L_nen wellx, Channel ZZ, Azzx_larryzz_3_0, RPoint, RPoint-m v2, ZigZagTF. 이들 중 어느 것도 당면한 과제에 완전히 대처하지 못했습니다.
연구된 영역에서 이 지표의 수치:
![그림 4: 파라미터 [12;0] 그림 4: 파라미터 [12;0]](https://c.mql5.com/18/164/zz_05s__2.png)
그림 4. 매개변수 [12;0]
![그림 5. 파라미터 [23;0] 그림 5. 파라미터 [23;0]](https://c.mql5.com/18/164/zz_06s__2.png)
그림 5. 파라미터 [23;0]
공개된 지그재그의 특성 및 특징:
- 싱글 패스;
- 마지막 세그먼트만 다시 계산되고 다시 그려집니다(내역 다운로드를 제외하고 세그먼트는 취소할 수 없음);
- 막대 내부의 계산 최적화 메커니즘이 있습니다(가격이 제로 막대 내에서 변경되었거나 변경 사항이 MinMotion 변수에 지정된 최소 임계값을 초과하지 않으면 틱에서 다시 계산되지 않습니다);
- 고점/저점 바 형성 순서를 얻기 위한 두 가지 알고리즘: 바 유형별(빠르지만 신뢰할 수 없음) 및 더 작은 기간의 데이터별(기록 필요: 존재 여부 및 적절성 독립 제어 또는 OutsideBar 라이브러리 수정).
메타트레이더 5의 호가 정확성 문제는 아직 연구되지 않았기 때문에 ProExtra 버전은 게시되지 않았습니다.
다른 지그재그의 잘못된 작동에 대한 추가 예시
![그림 6: 2010년 11월 29일부터 12월 7일까지 EURUSD 상반기. 매개변수 [7;0;0]이 있는 빨간색 선 지그재그. 매개변수 [7;0;0]이 있는 파란색 선 지그재그2 R. 그림 6: 2010년 11월 29일부터 12월 7일까지 EURUSD 상반기. 매개변수 [7;0;0]이 있는 빨간색 선 지그재그. 매개변수 [7;0;0]이 있는 파란색 선 지그재그2 R.](https://c.mql5.com/18/164/zz_07__3.gif)
그림 6: 2010년 11월 29일~12월 7일 EURUSD 상반기. 매개변수 [7;0;0]이 있는 빨간색 선 지그재그. 매개변수 [7;0;0]이 있는 파란색 선 지그재그2 R

그림 7: 2010년 11월 29일 - 12월 7일 EURUSD H1. 올바른 구성
결론
안타깝게도 이 버전에 모든 단점이 없는 것은 아닙니다. 하지만 노력 중입니다.
그리고이 표시기는 동일한 iHighest / iLowest 채널 원칙 (일반적인 지그재그)에서 작동하기 때문에 때때로 누락 된 정상이 있습니다.
이 표시기의 모든 버그와 기능을 신고해 주세요.MetaQuotes Ltd에서 러시아어로 번역함.
원본 코드: https://www.mql5.com/ru/code/263