PYTHON/AUTO TRADE SYSTEM

[자동 매매 시스템 구축하기] 상하한가 데이터 계산하기 (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원 단위로 정수 만들기
            return self.cal_price_range(price, 1)
        elif 1000 <= price < 5000:  ## 1,000원~5,000원 : 5원 단위
            return self.cal_price_range(price, 5)
        elif 5000 <= price < 10000:  ## 5,000원~10,000원 : 10원 단위
            return self.cal_price_range(price, 10)
        elif 10000 <= price < 50000:  ## 10,000원~50,000원 : 50원 단위
            return self.cal_price_range(price, 50)
        elif 50000 <= price < 100000:  ## 50,000원~ 100,000원 : 100원 단위
            return self.cal_price_range(price, 100)
        elif 100000 <= price < 500000:  ## 100,000원~500,000원 : 500원 단위
            return self.cal_price_range(price, 500)
        elif 500000 <= price:  ## 500,000원 이상: 1000원 단위
            return self.cal_price_range(price, 1000)



    def kosdaq_price_range(self, price):
        price = float(price)

        if 0 <= price < 1000:  ## 1,000원 미만 : 1원 단위
            return self.cal_price_range(price, 1)
        elif 1000 <= price < 5000:  ## 1,000원~5,000원 : 5원 단위
            return self.cal_price_range(price, 5)
        elif 5000 <= price < 10000:  ## 5,000원~10,000원 : 10원 단위
            return self.cal_price_range(price, 10)
        elif 10000 <= price < 50000:  ## 10,000원~50,000원 : 50원 단위
            return self.cal_price_range(price, 50)
        elif 50000 <= price:  ## 50,000원 이상 : 100원 단위
            return self.cal_price_range(price, 100)

 

 

 


728x90

 

 

상하한가 계산 함수 완성하기

이제 다시   def cal_limit(self, item_code, yclose):  함수로 돌아와서 각 시장에 따라 구분해주었던 조건문 하단에서 ①가격제한폭, ②상하한가 값의 순서로 호가가격단위 미만 절사를 적용하도록 구현하면 된다.
※ Line : 7~12, 16~21

def cal_limit(self, item_code, yclose):
    yclose = int(yclose)
    price_range = float(yclose * 0.3)

    ## 코스피 종목의 상하한가 계산..
    if item_code in self.kospi_code_list:
        price_range = self.kospi_price_range(price_range)
        var1 = float(yclose + price_range)
        up_price = self.kospi_price_range(var1)
        var2 = float(yclose - price_range)
        down_price = self.kospi_price_range(var2)
        return up_price, down_price

    ## 코스닥 종목의 상하한가 계산
    elif item_code in self.kosdaq_code_list:
        price_range = self.kosdaq_price_range(price_range)
        var1 = float(yclose + price_range)
        up_price = self.kosdaq_price_range(var1)
        var2 = float(yclose - price_range)
        down_price = self.kosdaq_price_range(var2)
        return up_price, down_price

    else:
        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(종목코드, 기준가격)  과 같은 형태의 코드 한 줄로 손쉽게 얻어올 수 있게 되었다. 다음 게시글에서 실제 데이터와의 비교를 통해 코드가 정상적으로 동작하는지 확인해보도록 하자.

 

 


728x90
반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.