출력 결과를 살펴보면 종가를 20일, 60일을 기준으로 평균을 계산한 ‘ma20’, ‘ma60’ 열이 생성되어 있습니다. 특이한 점은 19850105~19850109일자는 20일 치, 60일 치 종가 데이터가 없음에도 ‘ma20’, ‘ma60’ 열이 계산되어 있습니다. min_periods=1이라는 옵션을 추가하면 평균 계산에 필요한 데이터 개수가 부족하더라도 우선 가지고 있는 데이터를 이용하여 평균을 계산하기 때문입니다. 이 옵션을 사용하지 않으면 20일 치, 60일 치 데이터가 있는 날부터 ‘ma20’, ‘ma60’ 열이 생성됩니다. RSI(2) 계산 때와 마찬가지로 금일을 제외한 과거의 이동평균값은 사용되지는 않지만 그대로 남겨 두었습니다.
마지막으로 금일 RSI(2)와 20일, 60일 이동평균을 각각 rsi, ma20, ma60 변수에 저장하겠습니다. 다음은 2일 전 종가와 현재가 차이를 계산하도록 하겠습니다. 2일 전 종가를 조회하는 것은 데이터프레임을 이용한 연산이 필요합니다. df에는 이동평균을 계산할 때처럼 universe_item['price_df']가 저장되어 있다고 생각하기 바랍니다(계속해서 check_buy_signal_and_order 함수에 다음 내용을 추가합니다).
RSIStrategy.py
def check_buy_signal_and_order(self, code):
(...)
idx = df.index.get_loc(datetime.now().strftime('%Y%m%d')) – 2
close_2days_ago = df.iloc[idx]['close']
price_diff = (close - close_2days_ago) / close_2days_ago * 100