KDJ(Stochastic) 계산 및 알림
KDJ(Stochastic) 지표 개요
바이낸스에 있는 KDJ라는 지표는 스토캐스틱(Stochastic Oscillator Indicator)에서 파생된 지표로 %K, %D로 이루어진 스토캐스틱 지표에서 J라인을 추가된 점이 특징입니다. 여기서 스토캐스틱(패스트)은 일정 기간 동안의 최저가와 최고가를 참고하여 현재의 추세를 판단하는 지표로 0%에서 100% 사이의 값인 %K와 이것을 이동평균을 한 %D로 구성되어 있습니다. KDJ를 차트에 적용하면 %K와 %D도 함께 보여주므로 바이낸스에 따로 Stochastic지표는 없고 KDJ만을 사용할 수 있습니다.
바이낸스 지표 설정창을 보면 수치를 설정할 수 있는 변수가 3개 있습니다. Calcualting Period는 %K값에 필요한 최저가와 최고가를 산정할 기간으로 보통 9를 사용하며 바이낸스 기본값도 9입니다. 나머지는 이동평균을 할 기간인데 두 번의 이동평균을 내므로 설정할 기간도 2개이며 디폴트값은 모두 3입니다.
두 번을 해야 하는 이유는 스토캐스틱에서는 %D를 구할 때 이동평균을 한 번만 하지만 KDJ의 경우에는 %K를 구할 때도 이동평균을 내는 슬로 스토캐스틱을 사용하기 때문에 이동평균을 2번 하게 되는 것입니다.(패스트 스토캐스틱이 너무 시세변화의 민감하게 반응하여 보완하고자 %K를 구할 때 3일 이동평균을 낸 슬로 스토캐스틱이 만들어지게 된 것입니다.) 지표가 만들어진 시기로 정리하자면 스토캐스틱(패스트) - 스토캐스틱(슬로) - KDJ의 순서대로 고안된 것입니다. 더 자세한 것은 계산식에서 설명하도록 하겠습니다.
바이낸스에 KDJ를 적용한 BTC 1일 봉 차트입니다. 3개의 라인으로 구성되어 있으며 각각의 라인들이 벌어지고 좁혀지는 점에 의미가 있는 지표로 보입니다. 차트에서도 알 수 있듯이 슬로 스토캐스틱 기반인 KDJ임에도 불구하고 시세 변화에 민감한 모습을 볼 수 있습니다. 즉, 장기보다는 단기 추세를 확인하는 데 유리하다고 보통 알려져 있습니다.
장기적으로 사용하고 싶다면 Calculating Period와 MA Period의 3:1 비율을 맞춰 길게 설정하시면 될 것 같습니다. 어떻게 사용할지는 본인의 경험과 테스트를 거친 후 판단하는 것이 제일 좋다고 생각합니다.
계산식
KDJ 계산식만을 올려도 상관없지만 이해를 돕기 위해 패스트, 슬로, KDJ 모두 보여드릴 테니 비교해 보시길 바랍니다.
패스트 스토캐스틱
%K = (Last Closing Price – Lowest Price)/ (Highest Price – Lowest Price) x 100
%D = MA(%K of 패스트 스토캐스틱)
현재 종가와 9일간의 최저가, 최고가로 이루어진 백분율이 %K이고 그 %K를 3일 이동평균한 것이 %D입니다.
슬로 스토캐스틱
%K = MA(%K of 패스트 스토캐스틱)
%D = MA(%K of 슬로우 스토캐스틱)
패스트 스토캐스틱의 %K를 이동평균한 것이 슬로 스토캐스틱의 %K입니다. 패스트 스토캐스틱의 %D가 슬로우 스토캐스틱의 %K가 되는 셈입니다. 패스트가 처음 만들어지고 너무 민감하다는 단점을 보완한 것이 슬로우이기 때문에 보통 스토캐스틱이라고 말하면 슬로우 스토캐스틱을 의미하는 것입니다.
KDJ
%K = EMA(%K of 패스트 스토캐스틱)
%D = EMA(%K of 슬로우 스토캐스틱)
J = 3 * %K - 2 * %D
스토캐스틱에서 J라인이 추가된 KDJ입니다. %K와 %D의 시세 변화에 대한 민감도를 비교하면 이동평균을 한번 더 한 %D가 더 둔합니다. 이 말은 J라인이 KDJ 중 가장 시세 변화에 민감하게 반응하는 라인이라는 뜻입니다. 민감도를 부등식으로 표현하면 J > %K > %D 로 나타낼 수 있겠네요.
여기서 주의해야 할 것은 바이낸스에서 KDJ를 구할 때 단순이동평균이 아닌 Welles Wilder Moving Average를 사용한다는 것입니다. pandas의 ewm으로 이동평균을 구할 시 매개변수로 단순히 span = period을 넣어주는 것이 아니라 com = period -1 값을 넣어주시면 됩니다.
파이썬 코드
import binance as bn
import pandas as pd
df = bn.get("BTC","1d")
high = df['high']
low = df['low']
close = df['close']
def kdj(high, low, close, n=9, m1=3, m2=3):
low_list = pd.Series(low).rolling(window=n, center=False).min()
low_list.fillna(value=pd.Series(low).expanding().min(), inplace=True)
high_list = pd.Series(high).rolling(window=n, center=False).max()
high_list.fillna(value=pd.Series(high).expanding().max(), inplace=True)
rsv = (close - low_list) / (high_list - low_list) * 100
K = rsv.ewm(com=m1 - 1).mean()
D = K.ewm(com=m2 - 1).mean()
J = 3 * K - 2 * D
KDJ = pd.concat([K, D, J], axis=1)
KDJ.columns = ['K', 'D', 'J']
return KDJ
print(kdj(high,low,close))
패스트 스토캐스틱의 %K를 구하기 위해서 Calculating Period내의 최저가, 최고가 시리즈를 만들었습니다.
실행하게 되면,
K D J
0 96.996169 96.996169 96.996169
1 72.321238 82.191210 52.581293
2 75.134782 78.848692 67.706964
3 54.577822 68.766946 26.199575
4 36.933183 56.546402 -2.293255
.. ... ... ...
995 43.560466 45.154088 40.373223
996 51.010433 47.106203 58.818892
997 39.842578 44.684994 30.157745
998 38.884801 42.751597 31.151209
999 37.696213 41.066469 30.955703
비트코인 1일 봉의 KDJ를 리턴값을 받을 수 있습니다.
이틀 전인 23년 5월 24일의 KDJ와 997 행번호의 KDJ값과 일치하였습니다.
전략
장기 이동평균선과 단기 이동평균선의 교차점 전략인 골든크로스와 비슷하게 만들어 볼 생각입니다. 가장 민감한 J라인이 가장 둔한 %D라인을 교차하여 상승하는 경우를 조건으로 하는 것이니 J라인이 단기, %D라인이 장기에 해당한다고 볼 수 있겠습니다.
단, 횡보 중 빈번하게 일어나는 교차점을 걸러내기 위해 %D가 30 이하일 경우에만 작용하도록 조건을 추가하여 코드를 작성하도록 하겠습니다.
import binance as bn
import pandas as pd
import threading
tickers = bn.tickers("all")
def run():
for i in tickers:
df = bn.get(i,"1d")
high = df['high']
low = df['low']
close = df['close']
kdj = bn.kdj(high, low, close)
d = kdj['D']
j = kdj['J']
dif997 = d.iloc[-3] - j.iloc[-3]
dif998 = d.iloc[-2] - j.iloc[-2]
if dif997 > 0 and dif998 < 0 and d.iloc[-3] < 30:
bn.tel_text(i + " KDJ 교차")
threading.Timer(86400, run).start()
run()
결과물
6개의 코인이 조건을 만족하였네요. 맨 위의 MBOX 코인의 차트를 확인해 보도록 하겠습니다.
금일 많이 상승한 MBOX 코인의 1일 봉 차트입니다. 지금 글을 쓰고 있는 시간이 밤 10시인데 1일 단위가 바뀌는 오전 9시에 알림을 실행했더라면 20% 정도의 기회가 있었다고 볼 수 있겠네요. 하지만 검증되지 않은 전략이기도 하고 제가 과연 이런 기회를 잡을 수 있을 거라고는 솔직히 자신이 없네요. 아무튼 알림은 정상적으로 작동합니다.
자신만의 매매 내공으로 좋은 전략을 세우는데 도움이 되면 좋겠습니다.
'기술 > 지표 알림' 카테고리의 다른 글
Parabolic SAR 계산 및 알림 (297) | 2023.05.24 |
---|---|
TRIX 계산 및 알림 (419) | 2023.05.13 |
VWAP(거래량가중평균가격) 지표 계산 및 알림 (410) | 2023.05.12 |
볼린저밴드 BOLL 텔레그램 알림 (451) | 2023.05.10 |
바이낸스 롱/숏 비율 알림 받기 (429) | 2023.04.16 |
댓글