본문 바로가기
기술지표

지그재그(ZigZag) 지표: 잔파도(노이즈) 제거 및 엘리어트 파동 카운팅 [지표 백과 016]

by 흔한트리이더 2026. 2. 24.
반응형
차트의 1~2% 잔파동 때문에 거대한 흐름을 놓쳐본 적 있으신가요? 매일의 소음에 일희일비하다 보면 정작 중요한 추세의 뼈대를 보지 못하게 됩니다. 지그재그 지표는 시장의 무의미한 소음을 수리적으로 제거하고, 오직 '의미 있는 변화'만을 연결하여 우리에게 추세의 진짜 얼굴을 보여주는 마법 같은 도구입니다.

1. 탄생 배경: 일희일비하지 않는 파동의 미학

시장은 늘 무작위적인 소음(Noise)으로 가득 차 있습니다. 지그재그 지표는 이런 심리적 흔들림을 제어하기 위해 탄생했습니다. 특정 비율 이상의 의미 있는 가격 변화가 발생했을 때만 선을 연결함으로써, 주가 움직임의 본질적인 골격(Skeleton)을 추출합니다. 복잡한 차트를 단순화하여 파동의 정점과 저점을 명확히 규명하고 싶은 분석가들을 위한 정밀한 필터링 장치입니다.

2. 수리적 원리와 계산 구조 (Raw 레벨 해부)

지그재그 지표는 현재 추세의 방향과 마지막 변곡점(Pivot)을 실시간으로 추적하는 상태 머신(State Machine) 알고리즘을 기반으로 합니다.

1) 전환(Reversal)의 수학적 조건

새로운 파동이 시작되기 위해서는 직전 변곡점 대비 설정된 임계값(Threshold) 이상의 수치적 변화가 증명되어야 합니다.

  • 상승 전환 조건: 상승 전환 공식
  • 하락 전환 조건: 하락 전환 공식

2) 노드 확정 프로세스

상승 추세 중에는 최고가를 계속 업데이트하다가, 주가가 최고가 대비 설정 비율 이상 하락하는 순간 그동안의 최고가를 하나의 '고점 노드'로 확정합니다. 이후 하락 추세로 상태를 변경하여 최저가를 추적하는 과정을 반복하며 파동의 선을 완성합니다.

3. 차트로 보는 지표의 특성

현대차의 사례를 통해 지그재그가 추출한 파동의 뼈대가 어떻게 추세의 강도를 보여주는지 확인해 보겠습니다.

  • 파동의 골격 (Black Line): 자잘한 캔들의 움직임을 무시하고 굵직한 추세선이 차트 전체를 관통합니다. 인덱스 110 이후 가팔라진 선의 기울기는 상승 에너지가 폭발적으로 응축되었음을 시각적으로 증명합니다.
  • 변곡점 노드 (Nodes): 검은색 점으로 표시된 지점들은 시장의 에너지가 방향을 바꾼 수리적 임계점입니다. 최근 구간에서 노드 발생 주기가 짧아지는 것은 변동성이 심화되었음을 의미합니다.

4. 장점 및 한계

  • 장점: 추세의 본질을 파악하고 헤드앤숄더, 쌍바닥과 같은 기하학적 패턴을 정량화하는 데 탁월한 능력을 발휘합니다.
  • 한계: 가장 최근의 선은 가격 변화에 따라 실시간으로 변하는 '리페인팅(Repainting)' 특성이 있습니다. 따라서 진입 신호보다는 전체적인 파동 구조 분석용으로 적합합니다.

5. 파이썬 구현

상태 머신 구조를 활용하여 파동의 변곡점을 순차적으로 판정하는 로직입니다.

def calculate_zigzag_raw(df, pct=0.05):
    prices = df['close'].values
    zz = np.full(len(prices), np.nan)
    trend, last_idx, last_val = 0, 0, prices[0]
    
    for i in range(1, len(prices)):
        diff = (prices[i] - last_val) / last_val
        if trend == 0:
            if diff >= pct: trend = 1
            elif diff <= -pct: trend = -1
            if trend != 0: last_val, last_idx = prices[i], i
        elif trend == 1:
            if prices[i] > last_val: last_val, last_idx = prices[i], i
            elif diff <= -pct:
                zz[last_idx] = last_val
                trend = -1; last_val, last_idx = prices[i], i
        elif trend == -1:
            if prices[i] < last_val: last_val, last_idx = prices[i], i
            elif diff >= pct:
                zz[last_idx] = last_val
                trend = 1; last_val, last_idx = prices[i], i
    zz[last_idx] = last_val
    return pd.Series(zz)

6. 실전 Tip 및 요약

지그재그 지표가 그린 파동의 정점이 이전 정점보다 낮아지고 있다면 수리적으로 하락 추세의 고착화를 의미합니다. 특히 015번 피보나치 되돌림과 결합하여, 지그재그 저점에서 시작된 반등이 0.618 라인을 돌파하는지 확인하는 것이 실전 분석의 핵심입니다. 골격을 보면 길이 보입니다.


*본 포스팅은 기술적 지표의 수리적 이해를 돕기 위한 참고 자료이며, 투자 결과에 대한 책임은 투자자 본인에게 있습니다.*

 

반응형