본문 바로가기
기술지표

윌리엄스 %R 지표 단기 과매도/과매수 헌팅 실전 매매 기법 [지표 백과 031]

by 흔한트리이더 2026. 3. 3.
반응형

1. 떨어지는 칼날의 끝을 계산하다: 윌리엄스 %R의 탄생과 심리학

1966년, 전설적인 트레이더이자 퀀트 분석의 선구자인 래리 윌리엄스(Larry Williams)는 주식 시장을 지배하는 '극단적인 공포'의 끝자락을 수학적으로 포착하기 위해 윌리엄스 %R (Williams %R) 지표를 개발했습니다. 대부분의 모멘텀 지표나 오실레이터가 0에서 100 사이를 오가며 '상승의 힘'에 긍정적인 가중치를 두는 반면, 윌리엄스 %R은 특이하게도 0에서 -100 사이의 음수 영역만을 진동하도록 설계되었습니다.

왜 하필 음수일까요? 이는 지표의 수리적 초점이 "최고점 대비 현재 가격이 얼마나 깊이 추락했는가(낙폭)"에 완벽하게 맞춰져 있기 때문입니다. 래리 윌리엄스는 상승장의 꼭대기를 잡는 환상보다는, 비이성적인 폭락장에서 매도세가 완전히 소진되어 바닥을 굳히는 그 찰나의 '과매도(Oversold)' 타점을 사냥하는 것이 계좌를 불리는 핵심이라고 보았습니다. 즉, 윌리엄스 %R은 투자자들의 시선을 '고점에서부터 흘러내린 피의 깊이'에 강제로 고정시키는 치밀한 심리적, 수리적 도구입니다.

2. 수리적 원리와 계산 구조의 밑바닥 해부

윌리엄스 %R은 일정 기간($N$, 일반적으로 14일) 동안의 전체 변동폭(Range) 중에서, 최고가($H_n$)로부터 현재 종가($C$)까지의 거리가 어느 정도 비율을 차지하는지를 역방향 백분율로 산출합니다.

Step 1. 기간 내 시장의 에너지 범위(Extreme Values) 추출

과거 14일 동안 도달했던 가장 높은 가격($H_n$)과 가장 낮은 가격($L_n$)을 추출하여 시장이 움직일 수 있는 전체 물리적 공간(Range)을 설정합니다.

Step 2. 낙폭 비율 계산 및 음수(-100) 변환

최고가($H_n$)에서 당일의 종가($C$)를 뺀 값, 즉 '얼마나 고점 대비 떨어졌는가'를 분자로 두고, 이를 전체 변동폭($H_n - L_n$)으로 나눕니다. 이 비율에 -100을 곱하여 지표를 역방향으로 뒤집어 버립니다.

$$\%R = \frac{H_n - C}{H_n - L_n} \times -100$$
  • 최고가 마감 (강세장): 만약 종가($C$)가 14일 최고가($H_n$)와 완벽히 일치하게 마감했다면, 분자가 0이 되므로 윌리엄스 %R은 0이 됩니다.
  • 최저가 마감 (약세장): 반대로 종가($C$)가 14일 최저가($L_n$)와 똑같이 마감했다면, 분자($H_n - C$)와 분모($H_n - L_n$)가 같아지므로 값은 $\frac{1}{1} \times -100 = $ -100이 됩니다.
  • 결론적으로 0에 가까울수록 강한 매수세(과매수)를, -100에 가까울수록 극단적인 매도세(과매도)를 의미합니다.

3. 스토캐스틱(Stochastic) 패스트와의 수학적 쌍둥이 증명

수많은 기술적 분석가들이 윌리엄스 %R과 조지 레인(George Lane)의 스토캐스틱 패스트(Stochastic Fast %K)를 완전히 다른 성질의 지표로 착각하여 차트 창에 두 개를 동시에 띄워두는 우를 범합니다. 하지만, 두 지표를 밑바닥부터 분해해 보면 수학적으로 완벽하게 일치하는 '동전의 양면'임을 증명할 수 있습니다.

스토캐스틱 패스트 %K의 수식은 다음과 같습니다.

$$Fast \%K = \frac{C - L_n}{H_n - L_n} \times 100$$

스토캐스틱은 '최저가($L_n$) 대비 종가($C$)가 위로 얼마나 올라왔는가'를 측정합니다. 반면 윌리엄스 %R은 '최고가 대비 종가가 아래로 얼마나 내려갔는가'를 측정합니다. 이 두 수식을 수학적으로 결합하고 치환하면 다음과 같은 절대 공식이 도출됩니다.

$$\%R = Fast \%K - 100$$

즉, 스토캐스틱 %K가 80(과매수)을 가리킬 때, 윌리엄스 %R은 정확히 -20(과매수)을 가리킵니다. 스토캐스틱이 20(과매도)일 때, 윌리엄스 %R은 정확히 -80(과매도)이 됩니다. 래리 윌리엄스는 단순히 스토캐스틱을 뒤집어 놓은 것에 불과할까요? 아닙니다. 그는 트레이더들의 시선과 심리를 '바닥에서 올라온 높이'가 아니라 '천장에서 떨어진 깊이(공포)'에 강제로 맞추기 위해 이 위대한 수리적 트릭을 고안해 낸 것입니다.

4. 실전 매매 로직: 과매도 헌팅과 휩쏘(Whipsaw) 필터링 전략

윌리엄스 %R은 통상적으로 -20 이상을 과매수(Overbought), -80 이하를 과매도(Oversold)로 규정합니다. 스포츠카의 RPM 계기판처럼 반응 속도가 전 세계 기술적 지표 중 가장 빠르다는 압도적인 장점이 있습니다. 하지만 이 빠른 반응 속도는 양날의 검입니다.

만약 주가가 -80 아래로 떨어졌다고 해서 "아싸, 과매도 바닥이다!" 하고 덥석 매수하면, 이른바 '바닥 밑에 지하실'을 경험하게 됩니다. 추세가 하방으로 꽂히는 강력한 하락장에서는 윌리엄스 %R 값이 -100 근처에 거머리처럼 장기간 들러붙어 버리기 때문입니다. 지표는 바닥이라고 외치지만 주가는 반토막이 나는 휩쏘(가짜 신호)의 함정입니다.

듀얼 타임프레임(Dual Timeframe) 추세 필터링

진정한 퀀트 트레이더는 절대 단일 오실레이터에 운명을 걸지 않습니다. 윌리엄스 %R의 휩쏘를 완벽히 통제하는 가장 강력한 알고리즘은 '추세 지표(Trend Indicator)'와의 결합입니다.

  1. 전제 조건 (추세 확인): 주가가 20일 또는 50일 단순 이동평균선(SMA) 위에 위치하여야 합니다. 즉, 시장의 중장기적인 방향성이 '상승(Uptrend)'임을 먼저 확인합니다.
  2. 타점 포착 (과매도 사냥): 상승 추세가 유지되는 와중에, 단기적인 악재나 차익 실현 매물로 인해 주가가 급락하며 윌리엄스 %R이 -80 이하로 파고드는 순간을 기다립니다.
  3. 실행: 떨어지는 칼날이 아니라, 날아가는 로켓이 잠깐 고도를 낮춰 연료를 채울 때 탑승하는 완벽한 '눌림목(Pullback) 매수 타점'이 완성됩니다.

5. 차트에서 나타나는 수리적 특성: 케이엔알시스템(A199430) 심화 분석

추세 필터링이 결합된 윌리엄스 %R이 얼마나 경이로운 타점을 잡아내는지 케이엔알시스템의 실제 차트를 통해 증명해 보겠습니다.

  • 완벽한 눌림목 타점 (초록색 삼각형): 2026년 1월 하순을 주목하십시오. 주가가 단기 고점을 찍고 급격한 조정을 받으며 하락합니다. 하지만 캔들은 여전히 주황색 선인 20일 이동평균선(SMA 20) 위에서 지지를 받고 있습니다. 즉, '상승 추세'는 훼손되지 않았습니다.
  • 과매도 시그널의 결합: 바로 그 시점, 하단 패널의 파란색 윌리엄스 %R 선이 초록색 점선인 -80선 아래로 푹 파고듭니다. 중기 상승 추세 속에서 극단적인 단기 공포(과매도)가 발생한 것입니다. 시스템은 이 두 가지 수학적 조건이 일치하는 찰나의 순간을 정확히 계산하여 캔들 아래에 초록색 삼각형(Buy Signal)을 띄웠습니다.
  • 폭발적인 수익 실현: 이 완벽한 수리적 타점이 발생한 직후, 30,000원대 초반이었던 주가는 용수철처럼 튀어 올라 단숨에 45,000원 선을 향해 수직 폭등하는 대시세를 분출했습니다. 추세(SMA)와 모멘텀(%R)이 결합했을 때 나오는 퀀트 분석의 정수입니다.

6. 파이썬 구현

단순히 선을 그리는 것을 넘어, 판다스의 rolling().max() 벡터 연산으로 윌리엄스 %R을 산출하고, 20일 이동평균선 조건을 numpy.where 로직으로 묶어 '진짜 눌림목 매수 타점(Buy Signal)'만을 기계적으로 걸러내는 고도화된 시스템 트레이딩 코드입니다.

import sqlite3
import pandas as pd
import numpy as np

def calculate_williams_r_advanced(df, period=14, sma_period=20):
    # 1. 14일간의 최고가(H_n) 및 최저가(L_n) 추출 (벡터 연산)
    highest_high = df['high'].rolling(window=period).max()
    lowest_low = df['low'].rolling(window=period).min()
    
    # 2. 윌리엄스 %R 수식 적용 (0 ~ -100)
    # 분모가 0이 되는 오류(점상한가 등) 방지를 위해 아주 작은 값(1e-10)을 더함
    denominator = highest_high - lowest_low
    df['Williams_%R'] = ((highest_high - df['close']) / (denominator + 1e-10)) * -100
    
    # 3. 추세 필터링을 위한 20일 단순 이동평균선(SMA) 산출
    df['SMA_20'] = df['close'].rolling(window=sma_period).mean()
    
    # 4. 고도화된 매수 시그널 발생 알고리즘
    # 조건 A: 윌리엄스 %R이 -80 이하 (극단적 단기 과매도 상태)
    # 조건 B: 현재 종가가 20일 이동평균선 위에 위치 (중기 상승 추세 유지)
    condition_a = df['Williams_%R'] <= -80
    condition_b = df['close'] > df['SMA_20']
    
    # 두 조건이 모두 참일 때만 해당 캔들 저가 약간 아래에 타점(Buy_Signal) 기록
    df['Buy_Signal'] = np.where(condition_a & condition_b, df['low'] * 0.98, np.nan)
    
    return df

7. 실전 Tip 및 맺음말

윌리엄스 %R은 기술적 분석의 칼날 중에서도 가장 예리하고 반응이 빠릅니다. 그렇기에 이 지표 하나만 믿고 하락장에서 함부로 칼자루를 쥐면 반드시 손을 베이게 됩니다. 주가가 -80선(과매도)을 터치했다고 즉시 매수하는 것은 초보자들의 치명적인 실수입니다.

반드시 거시적인 추세(이동평균선, 슈퍼트렌드, 파라볼릭 SAR 등)가 우상향으로 등을 떠밀어 주고 있는지 확인하십시오. 큰 파도가 위로 치고 있을 때 발생하는 단기적인 폭락(-80 이하 진입)이야말로, 기관과 외인이 개인들의 물량을 털어먹기 위해 파놓은 함정이자 우리가 역으로 진입해야 할 가장 안전한 '황금의 타점'입니다. 수식의 본질을 이해하면, 시장의 공포는 곧 가장 확실한 기회로 바뀝니다.


*본 포스팅은 알고리즘 트레이딩 및 기술적 지표의 수리적 원리 이해를 돕기 위해 작성된 학술적 참고 자료이며, 특정 종목에 대한 투자 권유가 아닙니다. 퀀트 데이터에 기반한 투자 결과에 대한 모든 책임은 투자자 본인에게 있습니다.*
반응형