[자동 매매 시스템 구축하기] 상하한가 데이터 계산하기 (3) - 상하한가 계산 함수 생성하기
지난 게시글에서 호가가격단위 미만 절사를 적용하는 함수를 구현했으니, 이번에는 전달받은 종목코드를 기반으로 시장을 구분하고 그 시장 구분에 따라 각기 달리 적용되는 가격 범위 내에서 각기 다른 measure 값을 전달하도록 하는 함수를 구현해보도록 하자.
상하한가 계산 함수 생성하기
이번에 생성할 함수는 종목코드와 전일 종가(이하 기준 가격) 데이터를 받아온 후에 그 데이터를 기반으로 코스피와 코스닥 등의 시장 구분을 하고, 시장 구분에 따라 각기 다른 함수를 적용하여 상하한가를 계산하는 함수이다.
def cal_limit(self, item_code, yclose):
yclose = int(yclose)
price_range = float(yclose * 0.3)
가장 먼저 cal_limit 이라는 이름의 함수를 생성한 후, 그 인자로 item_code(종목코드) 와 yclose(전일 종가, 기준 가격) 을 받아오도록 하자. 그 후에 yclose 변수의 자료형을 숫자형으로 변경해주고, yclose에 0.3을 곱한 값(가격제한폭)을 price_range 변수에 입력하자. 각 값들의 호가가격단위 미만 절사는 아직 적용하지 않은 상태이다.
여기서 호가가격단위 미만 절사를 적용하는 순서는 ①가격제한폭, ②상하한가의 순서로 적용하게 된다. 아직 상하한가 계산의 로직이 잘 이해가 가지 않는다면 상하한가 계산 로직 게시글을 다시 보고 오자.
이제 가격제한폭에 대한 호가가격단위 미만 절사를 적용하기 전에 앞서, 호가가격단위는 시장에 따라 적용되는 값이 다르므로 해당 종목코드 변수( item_code )가 어떤 시장에 속한 종목인지를 구분해주자.(Line 6, 10)
def cal_limit(self, item_code, yclose):
yclose = int(yclose)
price_range = float(yclose * 0.3)
## 코스피 종목의 상하한가 계산..
if item_code in self.kospi_code_list:
pass
## 코스닥 종목의 상하한가 계산
elif item_code in self.kosdaq_code_list:
pass
else:
set_logging.log.error(f"※※※ [{item_code}]가 코스피 및 코스닥 종목 정보에 없습니다.")
시장 구분 별 호가가격단위 미만 절사 적용 함수 구현하기
이제 해당 종목이 코스피 종목인지 코스닥 종목인지 구분했다면, 코스피와 코스닥에 대해 각기 다른 기준이 적용되는 호가가격단위 미만 절사 기능을 구현해줘야 한다. 각 시장에 대응하는 함수 이름은 코스피는 def kospi_price_range(self, price): , 코스닥은 def kosdaq_price_range(self, price): 로 하였다.
def kospi_price_range(self, price):
price = float(price)
def kosdaq_price_range(self, price):
price = float(price)
이제 코스피와 코스닥에 대해 아래의 표와 같은 가격 범위에 따라 각기 다른 호가가격단위를 self.cal_price_range 함수의 measure 인자로 전달해주면 된다.
※ Line 4~17, 24~33
def kospi_price_range(self, price):
price = float(price)
if 0 <= price < 1000: ## 1,000원 미만 : 1원 단위로 정수 만들기
set_logging.log.error(f"※※※ [{item_code}]가 코스피 및 코스닥 종목 정보에 없습니다.")
먼저 Line 7~12 의 경우에는 price_range 값을 self.kospi_price_range 함수에 전달함으로써 가격제한폭 값에 대해 호가가격단위 미만 절사를 적용한 후, var1 에서는 기준값에 가격제한폭을 더하여 상한가를 계산하고, 그 상한가를 다시 동일한 함수에 전달하여 호가가격단위 미만 절사를 적용한 후 up_price 변수에 입력했다. 하한가의 경우에도 var2 에서 기준값에 가격제한폭을 빼서 하한가를 계산하고, 그 하한가를 다시 동일한 함수에 전달하여 호가가격단위 미만 절사를 적용한 후 down_price 변수에 입력했다.
이제 상하한가 데이터는 단순하게 self.cal_limit(종목코드, 기준가격) 과 같은 형태의 코드 한 줄로 손쉽게 얻어올 수 있게 되었다. 다음 게시글에서 실제 데이터와의 비교를 통해 코드가 정상적으로 동작하는지 확인해보도록 하자.