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

(키움증권 해외선물 OpenAPI-W) RSI 값 구하기 (2) RSI 개념 및 계산접근 방법

봄이오네 2023. 2. 1. 08:01
반응형
목 차
1. 들어가며
2. 개념 및 계산 접근 방법
1) RSI 개념
2) 1차 계산
3) 2차 계산
3. 마치며

1. 들어가며

지난 글에서는 OpenAPI-W를 통한 연속조회 및 과거데이터를 조회할 수 있는 기간설정에 대해 알아보았다.
국내주식 OpenAPI의 연속조회가 CommRqData의 3번째 인자를 "2"로 넣는 반면, 해외선물 OpenAPI-W에서의 연속조회는 CommRqData의 3번째 인자를 "F0NQH23 2023012720590000010000" 으로 "키값"을 넣어주어야하는 방법이었다.

글로 설명하거나 이해하는 것은 난해해 보일 수 있는데, 직접 해보면 코드 로직이 어떻게 이루어지고 진행되는지 금방 감을 잡을 수 있을 것이다.

이번 글에서는 OpenAPI-W의 opc10002 TR을 이용해 1분봉의 현재 기준, RSI 값을 받아오는 방법을 알아볼 것이다.


2. 개념 및 계산 접근 방법

1) RSI 개념

RSI(Relative Strength Index, 상대강도지수)는 현재가격에 대한 상승분 평균(au)하락분 평균(ad)간의 상대적 강도를 나타내는 지표이다. 아래에서 RSI 지표의 개념에 대해 간단히 설명해보자.

  • ① 현재가격에 대한 : RSI 값을 구할 때는 현재가격을 포함한다.
  • ② 상승분 평균(au) : n분간의 종가 상승분의 평균(average ups)
  • ③ 하락분 평균(ad) : n분간의 종가 하락분의 평균(average downs)
  • ④ 상대적 강도(rsi) : "n분간의 종가 상승분 평균"을 "종가 상승분 + 종가 하락분"으로 나눈 값

④번의 상대적 강도 개념을 먼저 확인하자.
"종가 상승분(au)"을 "종가 상승분(au) + 종가 하락분(ad)"으로 나눈값이라... 조금 추상적인거 같다.

상대강도(rs)는 상승평균에 대한 하락 평균의 상대적 강도를 의미하며, rs =au / ad 로 나타낼 수 있다.
< 그림1 >에서 필자는 2번의 공식을 사용할 것이다.

그림1. 상대강도지수를 계산하는 방법


상대강도지수를 구하는 개념과 공식은 많이 봤을 것이기 때문에, 추가 설명은 할 필요 없어보인다.
문제는... n분간의 종가 상승/하락분의 평균값이다.

"n분간의 종가 상승/하락분의 평균값"이 생각보다 어려웠다. 이걸 어떻게 파이썬에 적용할 것인가...
보통은 RSI 값을 14(일)을 쓰는데, 상승분의 평균만 합치라는 것인가? 상승분의 평균을 합치고(분자), 나누어야 하는 값(분모)은 14인가? 상승/하락한 값만 계산하는 것인가? 횡보 상태로 현재가가 이전 분봉과 같으면 어떻게 계산하는지?

결국 엑셀과 파이썬으로 돌려보면서 상승/하락/횡보 및 나누어주어야 하는 모수(분자) 값을 수정해주면서 테스팅을 해보는 수 밖에 없어 보인다. ㅠ_ㅠ

2) RSI 1차 계산

14일(분)의 상승/하락분의 평균이라... 눈으로 보면 이해는 하는데, 막상 계산을 하면 막막해진다.
결론부터 말하면, 전일(분) 대비 현재일(분)의 상승/하락의 변화율을 말한다.
14개의 변화율이 필요하다는 것은 우리에게 필요한 것은 15개의 값이 필요하다. 그래야 14개의 변화율이 나온다.

예를 들어보자.
쉬운 이해를 위해 정수로 표기하되, 전일(분) 대비 상승은 빨간색, 하락은 파란색, 동일하면 검정색으로 표기한다.
(시계열로 맨 왼쪽(100)은 15분전의 종가이며, 맨 마지막(800) 값이 현재가라고 가정한다)
(숫자가 많은 관계로 5개 종가마다 / (슬래시)를 넣었다)

  • A 종목의 15개 종가 = [ 100, 200, 200, 300, 200, / 200, 400, 100, 1000, 900, / 500, 700, 600, 1100, 800 ]
그림2. A종목의 15개 종가 차트


15개 종가의 상승분과 하락분을 계산하면 아래와 같다.
09:14분의 현재가를 포함하여 과거 14개 종가의 종가를 각각 계산한다.

  • 상승 변화율(B) : 전가 대비(A)는 700이나, 상승변화율(B)는 +2,000이다.
  • 하락 변화율(C) : 전가 대비(A)는 700이나, 하락변화율(C)는 -1,300이다.

각각의 변화율이 뜻하는 것은 무엇일까?
상승변화율에서는 증가값은 그대로 남겨두되, 감소값은 0으로 표기하는 것이 핵심이다.
이것은 하락변화율에서도 마찬가지이다. 하락 변화율을 계산할 때는 하락값은 그대로 남기되, 상승값은 0으로 바꾸어준다.

그림3. 상승/하락 변화율을 확인할 수 있다

RSI 값을 구해주기 위해 au(상승분 평균값)와 ad(하락분 평균값)을 각각 구해보자. 평균이므로 모수로 나누어주면 된다. RSI 14를 활용할 것이므로 모수(분모)는 14이다. 또한 하락 변화율 -1,300은 절대값을 붙여 양수(1,300)로 만들어준다.

  • au(상승분 평균값) = 2,000 / 14 = 142.86
  • ad(하락분 평균값) = 1,300 / 14 = 92.86

위의 공식에 따라 rs = au / ad = 1.54로 계산된다.
최종적으로 rsi = rs ÷ (1 + rs) * 100 = 60.62%로 계산된다.

핵심은 상승변화율을 구할 때 "감소값"을 0으로 만들고, RSI 14일(분)으로 설정하였기 때문에 나누는 모수는 14로 설정하여 계산하여야 한다.

3) RSI 2차 계산

2차 계산은 1차 계산에 비해 상당히 수월한 편이다.
1차 계산은 au / ad의 기준값을 잡아주기 위해 산술평균(14로 균등하게 나눔)을 하였다면, 2차 계산은 현재가를 가중평균하여 구하게 된다.

설명이 약간 어렵게 느껴질텐데...
결론은 1차 계산할 때 au / ad를 구하기 위해서는 산술평균을 하였다면, 2차 계산할 때는 1일(분)의 au / ad를 활용하고, 현재가를 더해준다는 것이다. 핵심은 au / ad 를 어떻게 구해주느냐이다.

가중평균은? 현재가가 급격하게 움직임에 따라 14일(분)이 균등한 영향을 미친다고 볼 수는 없다. 키움측의 별도의 설명은 없으나, 가중평균하여 1차 계산값의 au / ad 값을 2차 계산시 적용한다. 우리가 키움증권 영웅문G에서 확인하는 RSI 값은 2차 계산으로 얻은 가중평균의 RSI 값이다.

< 그림4 >에서 2차 계산할 때는 1일(분) 전 au / ad 값을 활용하고 현재가의 상승분 혹은 하락분(절대값)을 더해주면 된다. 이것은 과거 au를 가산하되, RSI 계산시 현재가의 영향 비중을 높이겠다는 것으로, 앞에서 말한 가중평균에 해당한다.

우리는 1차 계산시 au / ad만 구해주면 되고, 2차 계산할 때는 이전의 au / ad를 활용하여 현재의 RSI를 구하면 된다.

그림4. 1차 및 2차 계산시 au / ad 산출에 적용되는 산식

2차 계산에 대한 예를 들어보자. < 그림3 >은 현재를 09:14분(종가 800)으로 가정하였다. 09:15분 현재가 1,200원일 때 RSI를 구해보도록 하자.

< 그림3 >의 사례에서 au1 = 142.86이고, ad1 = 92.86이다.
09:14분 종가 800원, 09:15분 현재가 1,000원일 때, 증가 상승분이 400원이다.
(현재가는 하락하지 아니하였으므로, 09:15분의 하락 증가분은 0이다)

  • au2 = (142.86 x 13 + 400) / 14 = 161.23
  • ad2 = (92.86 x 13 + 0) / 14 = 86.23
  • rs2 = 161.23 / 86.23 = 1.87
  • rsi2 = (1.87) ÷ (1 + 1.87) x 100 = 65.16%

0914분 종가 800원에서 0915분 1,200원으로 올랐을 때 RSI는 60.62% → 65.16%로 증가하였다.
핵심은 2차 계산시부터는 이전 일(분)봉의 au/ad를 활용하는 것이다.

그림5. 상승변화율은 400이고, 하락변화율은 0이다.

3. 마치며

RSI 개념 및 1차 / 2차 계산하는 방법을 알아보았다. 글로 적다보니 내용이 상당히 길어졌다.
RSI 구하는 방법의 핵심은 결국 au / ad를 구하고 다음 값의 계산을 위한 산식에 전달하느냐가 관건인거 같다.
다음 시간에는 파이썬에 위의 내용을 적용하여 현재시간의 RSI를 구해보자.

반응형