즉, 프로그램을 최초 실행 후 유니버스 구성 종목별로 일봉 데이터를 저장했다면 그다음부터는 check_and_get_price_data 함수의 if 문에 진입하지 않습니다(유니버스를 새로 만들거나 종목 변경이 있다면 다시 if 문에 진입할 수도 있습니다).
반대로 테이블이 있는 사례 ➋~➍는 if 문에 해당하지 않으므로 else 문으로 진입합니다. 이 사례들은 일봉 데이터를 담은 테이블이 있다는 점은 동일하지만 장 종료 여부에 따라 다르게 처리합니다.
RSIStrategy.py
(...)
else: ------ 사례 ➋~➍: 일봉 데이터가 있는 경우
if check_transaction_closed(): ------ 사례 ➋: 장이 종료되면 API를 이용하여 얻어 온 데이터 저장
sql = "select max(`{}`) from `{}`".format('index', code) ------ 저장된 데이터의 가장 최근 일자 조회
cur = execute_sql(self.strategy_name, sql)
last_date = cur.fetchone() ------ 일봉 데이터를 저장한 가장 최근 일자 조회
now = datetime.now().strftime("%Y%m%d") ------ 오늘 날짜를 20210101 형태로 지정
if last_date[0] != now: ------ 최근 저장 일자가 오늘이 아닌지 확인
price_df = self.kiwoom.get_price_data(code)
insert_df_to_db(self.strategy_name, code, price_df) ------ 코드를 테이블 이름으로 해서 데이터베이스에 저장
else: ------ 사례 ➌~➍: 장 시작 전이거나 장 중인 경우 데이터베이스에 저장된 데이터 조회
sql = "select * from `{}`".format(code)
cur = execute_sql(self.strategy_name, sql)
cols = [column[0] for column in cur.description]
price_df = pd.DataFrame.from_records(data=cur.fetchall(), columns=cols) ------ 데이터베이스에서 조회한 데이터를 DataFrame으로 변환해서 저장
price_df = price_df.set_index('index')
self.universe[code]['price_df'] = price_df ------ 가격 데이터를 self.universe에서 접근할 수 있도록 저장