그다음은 U와 D 각각의 평균을 구하는 코드로, 평균 상승분인 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의 약어로 계산이 불가능하다는 의미입니다.