더북(TheBook)

먼저 20일, 60일 이동평균을 계산하는 방법을 살펴보겠습니다. 마찬가지로 과거 가격 데이터를 담고 있는 universe_item['price_df']df 변수에 저장하도록 한 후 이동평균을 구해 보겠습니다.

RSIStrategy.py

(...)
def check_buy_signal_and_order(self, code):
    if not check_adjacent_transaction_closed():
        return False

    universe_item = self.universe[code]

    if code not in self.kiwoom.universe_realtime_transaction_info.keys():
        print("매수대상 확인 과정에서 아직 체결정보가 없습니다.")
        return
    open = self.kiwoom.universe_realtime_transaction_info[code]['시가']
    high = self.kiwoom.universe_realtime_transaction_info[code]['고가']
    low = self.kiwoom.universe_realtime_transaction_info[code]['저가']
    close = self.kiwoom.universe_realtime_transaction_info[code]['현재가']
    volume = self.kiwoom.universe_realtime_transaction_info[code]['누적거래량']

    today_price_data = [open, high, low, close, volume]

    df = universe_item['price_df'].copy()

    df.loc[datetime.now().strftime('%Y%m%d')] = today_price_data

    period = 2 ------ 기준일 N 설정
    date_index = df.index.astype('str')
    U = np.where(df['close'].diff(1) > 0, df['close'].diff(1), 0)
    D = np.where(df['close'].diff(1) < 0, df['close'].diff(1) * (-1), 0)
    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(N) 계산, 0부터 1로 표현되는 RSI에 100을 곱함
    df['RSI(2)'] = RSI
----- check_buy_signal_and_order 함수에서 사용한 실시간 체결 정보 조회 및 RSI(2) 계산 코드와 같은 코드

    df['ma20'] = df['close'].rolling(window=20, min_periods=1).mean()
    df['ma60'] = df['close'].rolling(window=60, min_periods=1).mean()

    rsi = df[-1:]['RSI(2)'].values[0]
    ma20 = df[-1:]['ma20'].values[0]
    ma60 = df[-1:]['ma60'].values[0]
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.