파이썬 주식 분석 (2) - 스토캐스틱
Updated:
파이썬 주식 분석 (2) - 스토캐스틱
2.1 스토캐스틱
스토캐스틱 (Stochastic
)이란 지표는 다음과 지난 n
일 동안의 고점과 저점을 이용해 과매수시기와 과매도 시기를 판단하는 지표이다. 임의의 시점(t
)의 %K
스토캐스틱은 다음과 같이 계산할 수 있다.
%K = (Close[t] + Low[t-n:t]) / (High[t-n:t] + Low[t-n:t]) * 100
위의 식에서 Low[t-n:t]
는 n
일 동안의 저점의 합을, High[t-n:n]
는 고점의 합을 가리킨다. %K
스토캐스틱 값이 100
에 가까울 수록, 지난 n
일 동안의 거래에서 최저점과 최고점 중 최고점에 가깝다는 것을 의미한다. 따라서, n
일 동안의 거래 정보를 토대로 보면, 스토캐스틱 값이 클 수록 매도하기 좋고 작을 수록 매수하기 좋은 시점이라고 볼 수 있다.
%D
스토캐스틱은 %K
값을 평활화해서 얻을 수 있으며, 일반적으로 %K
의 3일 이동평균선으로 계산한다. %K
보다 느린 %D
스토캐스틱을 이용할 경우 보다 확실하게 (판단 시기가 다소 느리더라도) 매매 시점을 판단할 수 있을 것이다.
Notice: %K
스토캐스틱을 계산할 때 n
을 14일로 설정하는 것이 일반적이지만, 기간이 길 수록 장기간의 변곡점을 잡아내는데 유용할 것이고, 짧을 수록 단기간 이득을 볼 수 있는 매매 시점을 판단하는데 용이할 것이다.
2.2 파이썬 코드
다음은 야후 파이낸스에서 읽어온 종목의 시세 정보를 가지고 %K
, %D
스토캐스틱 값을 계산하는 코드이다. 주식 종목의 시세를 읽어오는 과정은 이전 포스트를 참조하길 바라며, 이전 코드와 동일하게 sd
는 주식 종목에 OHLC 정보가 들어있는 팬더스 데이터프레임 변수이다.
ndays_high = sd.High.rolling(window=14, min_periods=1).max()
ndays_low = sd.Low.rolling(window=14, min_periods=1).min()
fast_k = (sd.Close - ndays_low)/(ndays_high - ndays_low)*100
slow_d = fast_k.rolling(window=3, min_periods=1).mean()
sd = sd.assign(fast_k = fast_k, slow_d = slow_d)
코드에서 fast_k
가 %K
스토캐스틱을 가리키고, slow_d
는 %D
스토캐스틱을 가리키며, 아래의 sd = sd.assign(...)
부분은 계산한 스토캐스틱을 sd
데이터프레임에 추가하는 과정이다.
다음은 마이크로소프트 (종목코드: MSFT
)의 OHLC 차트와 스토캐스틱을 함께 나타낸 그래프이다. 조회 시작 기간은 2020년 7월로 설정하였고, OHLC 차트와 26주 이동평균선(EMA130
)을 그리는 코드는 이전 포스트에 작성한 것과 동일한 코드를 사용했다.
위 그림에서 아래쪽의 그래프의 %D
스토캐스틱 (검정 그래프) 지표를 토대로 20
일 때 매수하고, 80
일 때 매도 했다고 가정해보자. 초기 주식 잔고가 0
이었다면, 6개월 동안 총 3번 정도 매수했다가 매도했을 것이고, 물론 매번 이윤을 남겼을 것이다.
다음 포스트에서는 26주 이동평균선과 %D
스토캐스틱 값을 토대로, 일정 자본금을 가지고 거래했을 때 실제로 얼마만큼의 이윤을 남겼을 지를 계산해보는 코드를 작성해볼 예정이다.
Reference
파이썬 증권 데이터 분석 (김황후 저, 한빛미디어)
Comments