한국 거래소의 규정/제도에선 매매거래시간 및 휴장일을 안내하고 있다.

 

Regulation | 일반상품제도 | 금시장 | 거래제도 | 매매거래시간 및 휴장일

< KRX금시장 호가 및 매매거래시간 > 주의KRX 금시장 운영규정 제 77조 및 동규정 시행세칙 제 42조의 2에 따라. 임의종료(랜덤엔드) 적용 요건에 해당하는 경우불공정거래 예방 등을 위해 5분 이내

regulation.krx.co.kr

휴장일

  1. 「관공서의 공휴일에 관한 규정」에 따른 공휴일
  2. 「근로자의 날 제정에 관한 법률」에 따른 근로자의 날
  3. 토요일
  4. 12월 31일(공휴일 또는 토요일인 경우에는 직전의 매매거래일로 한다)
  5. 그 밖에 경제사정의 급격한 변동 또는 급격한 변동이 예상되거나 거래소가 시장관리상 필요하다고 인정하는 날

 

 

import requests
import pandas as pd
from bs4 import BeautifulSoup

매매거래시간 이외의 시간 및 휴장일에선 거래가 발생하지 않으므로 이 시간대에선 프로그램을 계속 켜놓을 이유가 없다. 따라서 해당 시간대에선 프로그램을 바로 종료할 수 있도록 코드를 작성할 것이다.

휴장일 제외하기 -1

한국 거래소의 휴장일은 국가지정 공휴일, 토요일과 일요일, 근로자의 날 및 연말휴장일, 크게 3가지로 구분지을 수 있다. 공공데이터 openAPI의 특일 정보를 제공해주는 API를 사용하면 공휴일을 휴장일로 구분지을 수 있다.

 

공공데이터 포털

국가에서 보유하고 있는 다양한 데이터를『공공데이터의 제공 및 이용 활성화에 관한 법률(제11956호)』에 따라 개방하여 국민들이 보다 쉽고 용이하게 공유•활용할 수 있도록 공공데이터(Datase

www.data.go.kr

공공데이터 포털에 로그인 후 해당 API를 신청해 일반 인증키를 제공받고 공휴일 정보 조회를 신청하면 된다. solYear(필수)와 solMonth(선택), serviceKey(필수)로 연결한 url에 접속하여 정보를 조회하면 기본적으로 xml 파일 형식으로 제공되며, _type 요소를 json으로 신청하면 json 파일로도 정보를 받아 파싱할 수 있다.

def koreaHoliday():
    # 공공데이터 공휴일 정보 OpenAPI 이용을 위한 url, key값 설정
    operation = "getRestDeInfo"
    year = 2021
    mykey = "일반 인증키"
    url = "http://apis.data.go.kr/B090041/openapi/service/SpcdeInfoService"

    # locDate : 공휴일 정보, dateName : 공휴일 이름
    locDate = []
    dateName = []

    # 1월 ~ 12월
    for i in range(1, 13):
        if i >= 10:
            month = str(i)
        elif i < 10:
            month = "0" + str(i)

        # url 접속 후 데이터 받아오기
        request_url = url + "/" + operation + "?solYear=" + str(year) + "&solMonth=" + month + "&serviceKey=" + mykey
        resp = requests.get(request_url)

        if resp.ok:
            soup = BeautifulSoup(resp.text, 'html.parser')
            item = soup.find_all('item')

            for i in item:
                date = i.find("locdate").get_text()
                locDate.append(date[:4] + "-" + date[4:6] + "-" + date[6:])
                dateName.append(i.find("datename").get_text())

    locDate.append("2021-05-01")
    dateName.append("근로자의 날")
    locDate.append("2021-12-31")
    dateName.append("연말휴장일")
    return locDate, dateName

일반 인증키 자리에 본인이 발급받은 API 인증키를 작성해주면 된다. 공휴일 데이터에는 "근로자의 날"과 "연말휴장일" 데이터는 따로 존재하지 않으므로 마지막에 추가해준다.

근로자의 날은 마지막에 있다.

 

휴장일 제외하기 -2

위처럼 공공데이터의 API를 사용해 공휴일을 구분해줄 수 있지만 한국거래소에서는 공식적으로 휴장일 데이터를 제공해주고 있어 더욱 쉽게 휴장일을 구분해줄 수 있다.

 

Market | 시장동향 | 증시일정 | 휴장일

 

open.krx.co.kr

위 링크에 접속해서 한국거래소 2021년 휴장일을 검색한 후 나온 데이터를 다운로드 하면 다음과 같은 엑셀 파일의 데이터가 다운로드된다.

공휴일이 토요일 및 일요일인 경우에는 따로 드러나있지 않으며, (2021.05.01 근로자의 날도 토요일이라 엑셀 파일에 따로 적혀있지 않다.) 연말 휴장일도 엑셀 파일에 포함되어 있는 것을 확인할 수 있다. 우리는 그저 이 파일을 파이썬으로 불러와 리스트 형태로 저장해주기만 하면 된다.

먼저 데이터를 사용하고자 하는 폴더 안에 엑셀 파일을 "2021_holiday"로 저장해주었다. (파일 형식은 xls) pandas의 read_excel 함수를 이용해서 파일을 불러오면 holiday_data에는 DataFrame 형태로 데이터가 저장되며, to_list() 메서드를 이용해 데이터를 리스트화 하였다.

def krx_holiday_data():
    holiday_data = pd.read_excel("2021_holiday.xls")
    locDate = holiday_data["일자 및 요일"].to_list()
    dateName = holiday_data["비고"].to_list()
    return locDate, dateName

공휴일이 토요일 및 일요일인 경우를 제외하면 앞서 공공데이터 특일 정보 API를 사용했던 것과 동일한 결과를 얻을 수 있다. 

 

 

위 두 함수를 "korea_holiday.py" 라는 파이썬 파일에 담아 main 함수에 import해주었다.

import requests
import pandas as pd
from bs4 import BeautifulSoup


def koreaHoliday():
    # 공공데이터 공휴일 정보 OpenAPI 이용을 위한 url, key값 설정
    operation = "getRestDeInfo"
    year = 2021
    mykey = "CtSMsSzzUb6STRMoDp9D751nLaY54bG2a5vTRIo3CWwAiRRovKvhhdBikpnmXsYpopW%2FbjmsyhAjeAbqOBJXEw%3D%3D"
    url = "http://apis.data.go.kr/B090041/openapi/service/SpcdeInfoService"

    # locDate : 공휴일 정보, dateName : 공휴일 이름
    locDate = []
    dateName = []

    # 1월 ~ 12월
    for i in range(1, 13):
        if i >= 10:
            month = str(i)
        elif i < 10:
            month = "0" + str(i)

        # url 접속 후 데이터 받아오기
        request_url = url + "/" + operation + "?solYear=" + str(year) + "&solMonth=" + month + "&serviceKey=" + mykey
        resp = requests.get(request_url)

        if resp.ok:
            soup = BeautifulSoup(resp.text, 'html.parser')
            item = soup.find_all('item')

            for i in item:
                date = i.find("locdate").get_text()
                locDate.append(date[:4] + "-" + date[4:6] + "-" + date[6:])
                dateName.append(i.find("datename").get_text())

    locDate.append("2021-05-01")
    dateName.append("근로자의 날")
    locDate.append("2021-12-31")
    dateName.append("연말휴장일")
    return locDate, dateName


def krx_holiday_data():
    holiday_data = pd.read_excel("2021_holiday.xls")
    locDate = holiday_data["일자 및 요일"].to_list()
    dateName = holiday_data["비고"].to_list()
    return locDate, dateName
728x90
반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 라이프코리아트위터 공유하기
  • shared
  • 카카오스토리 공유하기