2. 해외선물/2-4. 해외선물 API (사용)

(키움증권 해외선물 OpenAPI-W) 스토캐스틱(Stochastic) 값 구하기 (1) 스토캐스틱 개념 및 계산하는 방법

봄이오네 2023. 10. 1. 14:12
반응형
목 차
1. 들어가며
2. 사전설명
   1) 스토캐스틱(Stochastic) 개념 및 종료
   2) 계산하기 (키움증권 기준)
3. 타 증권사와 키움증권의 STC_Slow%K 다른 이유
   ①이동평균(산술평균)
   ②지수이동평균(가중평균)
   ③키움 자체 스토캐스틱 Slow %K
4. 지수이동평균의 가중치
5. 마치며

 

1. 들어가며

지난 글에서는 MACD 값 구하는 방법에 대해 알아보았다. 일정 기간의 종가를 지수이동평균하여 그 값을 구했다. 지수이동평균을 코드로 구현하는게 상당히 까다로웠다는 생각이 들었다.이 또한 수익을 위한 하나의 과정이라고 생각하자. 수익만 생각하자.
 
이번 글에서는 구독자의 요청에 따라 스토캐스틱(Stochastic) 지표에 대해 작성하였다.
 
인터넷 검색해보아도, 만족한 만한 계산 방법을 찾지 못했다. 필자가 엑셀로 계산하고 코드 작성하느라 시간이 많이 걸렸다. 코드가 상당히 길다. 270줄 정도의 코드를 하루만에 작성해보는 것도 처음이고, 오후2시~새벽2시까지 12시간 동안 코드 작성한 것도 처음이다.
 
※ 첨부한 파일은 미니나스닥(NQZ23)이며, 필자가 스토캐스틱을 계산해본 값이다.
     (노란색 셀로 표기한 부분이 수기로 계산한 부분이다)

해외선물(미니 나스닥) (9.29) (NQZ23)
0.19MB

 
스토캐스틱 슬로우 %K 와 스토캐스틱 오실레이터를 구하는게 제일 어려웠다. 향후에 설명하겠지만, "스토캐스틱 슬로우 %K =스토캐스틱 패스트 %D"라는 설명이 많아서(stc_slow %K는 키움자체 산식 사용) 이래저래 알아보느라 오래걸렸고,  오실레이터는 계산할 값이 많아서 복잡했다.
 
이 글에서는 코드에 대한 설명보다는 스토캐스틱에 대한 개념, 키움증권의 스토캐스틱 Slow %D가 타 증권사와 다른 이유 및 사용시 주의사항 등 설명할 예정이다.


2. 사전설명

1) 스토캐스틱(Stochastic) 개념 및 종료

주식/선물을 하면서 활용하는 보조지표 중 하나로 스토캐스틱이 있다. 일정 기간 동안 최고가 및 최저가 사이에서 현재가격의 위치를 백분율로 알려주는 지표이다. 100%에 가까울수록 "과매수", 0%에 가까울수록 "과매도" 상태로 판단한다.
 

그림1. 미니 나스닥(NQZ23) 스토캐스틱 현황

 

2) 계산하기 (키움증권 기준)

스토캐스틱 지표는 5가지이다. 키움증권 1분봉의 기본 설정값으로 계산하고자 한다. 아래의 계산은 키움증권을 기줏으로 계산할 것이다. 1분 차트에서의 지표 설정값은 아래와 같다. 분봉 차트를 활용할 예정이므로, 아래의 지표 단위는 분(minute)이다.(키움증권 기준)

  • 스토캐스틱 패스트 %K : 5분(일)
  • 스토캐스틱 패스트 %D : 5분(일) , 3분(일)
  • 스토캐스틱 슬로우 %K : 12분(일) , 5분(일)
  • 스토캐스틱 슬로우 %D : 5분(일)
  • 스토캐스틱 오실레이터 : 12분(일) , 26분(일) , 9분(일)

 
① 산출식

  • 스토캐스틱 패스트 %K : (현재가격 - n분(일) 중 최저가) / ( n분(일) 중 최고가 - n분(일) 중 최저가) * 100
  • 스토캐스틱 패스트 %D : 패스트 %K를 m분(일) 로 지수이동평균한 값
  • 스토캐스틱 슬로우 %K : 패스트 %D를 m분(일)로 이동평균한값 → 키움증권식 계산한 값
  • 스토캐스틱 슬로우 %D : 슬로우 %K를 m분(일)로 지수이동평균한 값
  • 스토캐스틱 오실레이터 : 패스트 %D - 슬로우 %D

 

② 이 글에서 적용할 산식
위의 "①산출식"에 n분과 m분 등 기간에 숫자를 넣는 등 구체적으로 기술한다.

  • 스토캐스틱 패스트 %K : (현재가격 - 5분(일) 중 최저가) / (5분(일) 중 최고가 - 5분(일) 중 최저가) * 100
  • 스토캐스틱 패스트 %D : 패스트 %K를 3분(일)로 지수이동평균한 값
  • 스토캐스틱 슬로우 %K : 패스트 %D를 m분(일)로 이동평균한값 → 키움증권식 계산한 값
  • 스토캐스틱 슬로우 %D : 슬로우 %K를 5분(일)로 지수이동평균한 값
  • 스토캐스틱 오실레이터 : 패스트 %D - 슬로우 %D

3. 타 증권사와 키움증권의 STC_Slow %K 다른 이유

슬로우 %K를 구할 때 생각보다 어려웠다. 인터넷 검색에서는 STC_Slow %K = 패스트 %D를 이동평균한 값이라고 나오는데, 실제로 STC_Slow %K는 키움증권에서 자체 산식으로 계산한 값이다. 아래에서 설명하겠지만, 이걸 이동평균이라고 해야할지, 지수이동평균이라고 해야할지 적절한 단어가 생각나지 않는다. 그래서 키움증권식 자체 계산값이라고 명명하였다.
 
< 그림2 >는 키움증권 홈페이지에서 찾은 내용이다. 해외선물 게시판에서 못 찾아서, 국내주식 게시판에서 가져왔다.
 * (경로) 홈페이지 > 고객서비스 > 고객게시판 > "슬로우"로 검색 (타 증권사와 결과값 다른 경우)
 

그림2. 스토캐스틱 Slow %D를 구하는 방법(키움증권)

 
일반적으로 이동평균은 산술평균을 말하고, 지수이동평균은 가중평균을 말한다.
예를 들어 숫자 1, 2, 3이 있다고 생각하자. 아래와 같이 이동평균 값은 2이며, 지수이동평균 값은 2.25이다.
그런데, < 그림2 >에서 확인하였듯이 키움증권의 스토캐스틱 Slow %D는 sum(현재가-n일 중 최저가) / sum(n일 중 최고가 - n일 중 최저가)으로 계산된다.
 

  • 산술평균 : (1 + 2 + 3) / 3 = 2
  • 가중평균 : 1과 2의 지수이동평균은 1.5(=2*0.5 + 1*0.5), 1.5와 3의 지수이동평균은 2.25(=3*0.5 + 1.5*0.5)이다.
  • 키움식 스토캐스틱 Slow %D : sum(3-1) / sum(3-1) = 1

 
기간을 더 늘리면, 키움식 스토캐스틱 Slow %D와 다른 증권사 간 차이가 보이는 이유를 알 수 있다.

그림3-1. 평균을 구하기 위한 데이터

 
종가의 평균을 각각 구해보자. 스토캐스틱 Slow %D의 기간은 2분으로 가정한다.
①이동평균(산술평균) = (2 + 8 + 12 + 14)/4 = 9
②지수이동평균(가중평균) = (2, 8, 12, 14)의 지수이동평균 → 12.67
 

그림3-2. 이동평균/지수이동편균으로 구한 결과값

 
③키움식 스토캐스틱 Slow %K : sum(현재가-n일 중 최저가) / sum(n일 중 최고가 - n일 중 최저가)
    (그림3-2의 숫자를 활용하며, 기간은 2분으로 가정한다)

  • (10:00~10:01) 현재가  8,  2분중 최저가 1, 2분중 최고가 9 →   분자 7(8-1),    분모 8(9-1)
  • (10:01~10:02) 현재가 12, 2분중 최저가 2, 2분중 최고가 13 → 분자10(12-2), 분모11(13-2)
  • (10:02~10:03) 현재가 14, 2분중 최저가 4, 2분중 최고가 14 → 분자10(14-4), 분모10(14-4)

 
키움식 Slow %K = sum(분자의 합) / sum(분모의 합) = (7+10+10) / (8+11+10) * 100 = 93.1%로 계산된다. 그래서 인터넷 검색으로 찾은 "Slow %K = Fast %D의 이동평균"은 적어도 키움증권에서 적용되지 않는 것이다.
 
물론 샘플이 단순한 숫자와 기간(2분)이 짧아 결과가 극단적이지만, 지표를 사용할 때 키움증권의 스토캐스틱 Slow %D를 사용할 때 어떻게 계산되는지, 혹은 타 증권사와 그 계산값이 어떻게 차이나는지는 알고나서 지표를 사용하도록 하자.


4. 지수이동평균의 가중치

지수이동평균 및 가중치는 이미 MACD에서 설명(https://springcoming.tistory.com/194)하였다. 중복되는 설명은 생략한다.
 
지수이동평균의 가중치는 일종의 공식이라고 생각하고, 그냥 외우자! 필자도 보조지표 코드를 구성할 때 지수이동평균만 나오면, "어떻게 구현해야 하나? 개념은 내가 이해하고 있나?" 지레 겁을 먹기도 했다. 외우고 나면 나중에 이해하게 된다.
 
가중치는 가장 최근의 값에 가중치를 곱한다는 것이다.
예를 들어 시간 순으로 1, 2, 3, 7이 주어진다면, 가장 최근의 값은 7이며, 숫자 갯수(n)는 4개이다.

  • 가중치 = 2 / (n+1) = 0.4
  • 첫번째 숫자 1은 그대로 써준다(일종의 약속이다).
  • 두번째 2의 지수이동평균은 2*가중치 + 1*(1-가중치)이며 1.4이다. 즉, 1과 2의 가중평균은 1.4이다.
  • 세번째 숫자 3의 가중평균 2.04 = 3*가중치 + 1.4*(1-가중치) : 기존 2에서 계산된 가중평균(1.4)을 승계한다.
  • 네벗째 숫자 7의 가중평균 4.024 = 7*가중치 + 2.04(1-가중치) : 기존 3에서 계산된 가중평균(2.04)을 승계한다.

 
즉, 1, 2, 3, 7의 가중평균은 4.024이다.
 
스토캐스틱을 이해하려면 가중평균을 이해해야 한다. 향후에는 별도로 가중평균을 설명하지 않을 것이다. 나중에 확인하겠지만, 스토캐스틱 오실레이터 계산시 한번 가중평균한 값을 또다시 가중평균할 때... 머리 속이 상당히 복잡했다. ㅠㅠ
 


5. 마치며

스토캐스틱 지표의 개념 및 산출식, 키움증권의 스토캐스틱_Slow %K 가 타 증권사와 다른 이유 등을 알아보았다. 지금껏 만들어본 지표 중 스토캐스틱이 구현하기 제일 어려운 것 같다. 지수이동평균의 코드 작성 등 상당히 까다로운 내용이 많이 나올 것이다. 인내심을 가지고 천천히 숙지하도록 하자
 
다음 글부터 스토캐스틱에 대한 코드를 설명할 것이다. 270줄 정도 되는데, 3번에 쪼개서 글을 쓸 예정이다. ①스토캐스틱 fast, ②스토캐스틱 slow, ③스토캐스틱 oscillator의 총 3회로 작성한다. 그 이유는 대개 100줄이 넘어가면 글을 쓰고있는 필자도 그렇고, 글을 읽는 분들도 상당히 집중력이 상당히 떨어진다. 위에서도 이야기했지만, 천천히 익혀가자.
 

반응형