더북(TheBook)

그다음은 UD 각각의 평균을 구하는 코드로, 평균 상승분인 AU와 평균 하락분인 AD를 계산합니다.

AU = pd.DataFrame(U, index=date_index).rolling(window=period).mean()
AD = pd.DataFrame(D, index=date_index).rolling(window=period).mean()

이후 RSI를 구하는 공식대로 AU / (AD + AU) * 100을 통해 RSI(2)를 계산해서 df에 새로운 열로 추가합니다. 이후 출력한 결과를 확인해 보겠습니다.

    open   high    low  close  volume  RSI(2)        index
19850104    310    310    310    310        0          NaN
19850105    310    310    310    310        0          NaN
19850107    310    310    310    310        0          NaN
19850108    310    310    310    310        0          NaN
19850109    317    317    317    317        0   100.000000
...         ...    ...    ...    ...      ...          ...
20210726  23000  23100  22800  22800   214903    77.777778
20210727  22950  23450  22900  23350   202481    84.615385
20210728  23400  24600  23200  23850   453441   100.000000
20210729  24000  25050  23850  24950   539972   100.000000
20210730  25100  25700  24700  25050   395662   100.000000

결과를 보면 모든 행에 대해 df에 RSI(2) 열이 추가된 것을 확인할 수 있습니다. 여기서 살펴볼 점은 해당 종목의 금일(20210730) 매도 신호를 확인하기 때문에 금일 RSI(2) 값만 계산하면 되므로 그 이전 데이터는 필요한 값은 아니지만 연산이 오래 걸리지 않아 전체를 대상으로 RSI(2)를 계산했습니다. 또 19850104~19850109 결과는 NaN으로 표시되어 있는데, 이는 Not a Number의 약어로 계산이 불가능하다는 의미입니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.