파이썬 주식 분석 (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