더북(TheBook)

마지막으로 사례 ~는 장 시작 전이거나 장 중일 때 처리입니다. 이때는 데이터베이스에 저장된일봉 데이터를 조회해 와 매매에 활용할 수 있도록 self.universe에 저장하는 작업을 수행합니다.

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)
    price_df = price_df.set_index('index')
    self.universe[code]['price_df'] = price_df

조금 어려울 수 있는 부분은 데이터베이스에서 조회한 결과를 데이터프레임으로 변형하는 과정입니다. SQL 조회 결과가 담겨 있는 cur 객체에서 열 정보를 얻어 와 리스트 cols에 저장합니다. cols를 출력하는 코드는 추가하지 않았지만 cols에는 [‘index’, ‘open’, ‘high’, ‘low’, ‘close’, ‘volume’]이 저장되어 있습니다. 이후 cur 객체에 저장된 조회 결과를 데이터프레임으로 변형해서 price_df에 저장하고, 이 값을 다시 self.universe에 저장하면 사례 ~에 대한 처리까지 완료됩니다.

하지만 여기서 조회해 온 데이터에 중요한 점이 있습니다. 바로 조회해 온 일봉 데이터가 금일을 제외한 이전 거래일까지의 데이터라는 것입니다. 예를 들어 프로그램 실행 시점이 금요일 장 중이며 현재 가격이 5일 이동평균보다 높으면 매수하는 방식으로 매매한다고 하겠습니다. 이 경우 check_and_get_price_data 함수로 얻어 온 일봉 데이터는 같은 주 목요일까지 데이터이기 때문에 오늘 가격에 해당하는 금요일 가격 데이터가 추가로 필요하지만, check_and_get_price_data 함수로는 얻어 오지 못합니다.

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