AlgoLab Blog · 연휴 운영 · 2026

추석 휴장 자동매매 봇 — 연휴 전후 체크 7가지

경제 · 자동매매 운영 2026-09-22 · 약 8분 읽기 · 알고랩 AlgoLab
한 줄 요약

2026년 추석은 9월 25일 금요일이고, 증시 정규장이 실제로 닫히는 평일은 9월 24일(목)·25일(금) 이틀입니다. 9월 28일 월요일은 대체공휴일이 아니어서 정상 개장합니다 — 추석 연휴가 토요일과 겹치는 것만으로는 대체공휴일이 지정되지 않기 때문입니다. 여기서 봇이 가장 많이 틀립니다. 그리고 국내 야간파생은 정규장보다 반나절 먼저 멈춥니다 — 한국거래소가 9월 23일 오후 6시부터 24일 오전 6시까지 파생상품 야간거래를 휴장한다고 공지했습니다. 즉 봇 입장에서 이번 연휴는 9월 23일(수) 18:00에 시작해 9월 28일(월) 09:00에 끝납니다. 휴장일 자체는 변동될 수 있으니 한국거래소 공식 휴장일 안내로 반드시 재확인하십시오.

연휴는 봇을 가장 자주 깨뜨리는 구간입니다. 장이 열리는 날은 코드가 매일 검증되지만, 닷새 동안 아무도 안 보는 사이에 토큰이 만료되고 크론은 계속 돌고 상태 파일은 옛날 값을 들고 있습니다. 그리고 재개장 첫 9시에 그 모든 것이 한꺼번에 터집니다.

이 글은 개장일을 판정하는 방법을 비교하는 글이 아닙니다. 그건 주식 휴장일 조회 — 봇 개장일 판정 3가지 비교에 정리해 두었습니다. 여기서는 2026년 추석이라는 구체적인 닷새를 두고, 연휴 전 마지막 거래일부터 재개장 첫날까지 봇에서 실제로 확인해야 하는 일곱 군데만 봅니다.

목차

  1. 이번 연휴, 봇의 달력은 이렇게 생겼다
  2. 체크 ① 휴장일을 사람이 아니라 코드가 아는가
  3. 체크 ② 야간파생은 23일 저녁부터 없다
  4. 체크 ③ 미체결 주문은 연휴를 넘지 못한다
  5. 체크 ④ 닷새를 버티는 토큰
  6. 체크 ⑤ 코인과 해외는 그대로 돈다
  7. 체크 ⑥ 매도 대금은 9월 29일에 들어온다
  8. 체크 ⑦ 재개장 첫 30분

이번 연휴, 봇의 달력은 이렇게 생겼다

사람의 달력과 봇의 달력은 다릅니다. 사람에게 연휴는 목요일부터지만, 국내 야간파생을 보는 봇에게 연휴는 수요일 저녁 6시부터입니다.

날짜요일국내 정규장국내 야간파생업비트·바이낸스
09-23개장 — 연휴 전 마지막 거래일18:00부터 휴장정상
09-24휴장(공휴일)06:00까지 휴장정상
09-25휴장(추석)휴장정상
09-26주말주말정상
09-27주말주말정상
09-28개장 — 대체공휴일 아님정상정상

가장 흔한 오해 — “28일도 쉬는 거 아니야?” 아닙니다. 대체공휴일 제도는 설날·추석 연휴가 일요일과 겹칠 때 적용되고, 토요일과 겹치는 것만으로는 다음 평일이 대체공휴일로 지정되지 않습니다. 이번 추석은 연휴 마지막 날이 9월 26일 토요일이라 9월 28일 월요일은 대체공휴일이 아닙니다. 봇을 “화요일부터 재개”로 설정해 두면 재개장 첫날을 통째로 놓칩니다. 반대로 3·1절·광복절·개천절·한글날 같은 국경일은 토요일과 겹쳐도 대체공휴일이 지정되므로, 규칙을 외워서 코드에 박지 말고 매번 조회하십시오.

봇 기준 연휴 = 09-23 18:00 → 09-28 09:00 09-23 (수) 마지막 거래일 09-24 (목) · 09-25 (금) 정규장 휴장 · 공휴일 09-26 · 09-27 토 · 일 09-28 (월) 09:00 재개장 대체공휴일 아님 23일 18:00 야간파생 정지 28일 09:00 VI·갭 주의 구간 업비트·바이낸스 등 가상자산 거래소는 이 구간 전체가 정상 — 끄는 선택지가 없다
사람의 연휴는 목요일부터, 봇의 연휴는 수요일 저녁부터다

체크 ① 휴장일을 사람이 아니라 코드가 아는가

연휴 사고의 절반은 날짜를 코드에 직접 박아 둔 것에서 나옵니다. 올해는 맞지만 내년에는 틀리고, 대체공휴일이 추가로 지정되면 그날부터 틀립니다.

한국투자증권 KIS API에는 국내휴장일조회가 있습니다. GET /uapi/domestic-stock/v1/quotations/chk-holiday 이고 tr_idCTCA0903R 입니다. 응답에서 봐야 할 필드는 opnd_yn(개장일 여부) 하나입니다.

# KIS 국내휴장일조회 — 응답에서 개장일만 뽑는다 (필드 구조 예시)
{
  "rt_cd": "0",
  "msg_cd": "MCA00000",
  "output": [
    {"bass_dt": "20260923", "wday_dvsn_cd": "04", "bzdy_yn": "Y", "tr_day_yn": "Y", "opnd_yn": "Y", "sttl_day_yn": "Y"},
    {"bass_dt": "20260924", "wday_dvsn_cd": "05", "bzdy_yn": "N", "tr_day_yn": "N", "opnd_yn": "N", "sttl_day_yn": "N"},
    {"bass_dt": "20260925", "wday_dvsn_cd": "06", "bzdy_yn": "N", "tr_day_yn": "N", "opnd_yn": "N", "sttl_day_yn": "N"},
    {"bass_dt": "20260928", "wday_dvsn_cd": "02", "bzdy_yn": "Y", "tr_day_yn": "Y", "opnd_yn": "Y", "sttl_day_yn": "Y"}
  ]
}

주의. 위는 필드 구조를 보이기 위한 예시이며 실제 값은 호출 시점에 한국투자증권 서버가 내려주는 것이 기준입니다. bzdy_yn(영업일)·tr_day_yn(거래일)·opnd_yn(개장일)·sttl_day_yn(결제일)은 서로 다른 개념이라 아무거나 쓰면 안 됩니다. 매매 가능 여부는 opnd_yn 입니다. 필드명과 제공 범위는 KIS Developers 공식 문서에서 다시 확인하십시오.

봇에 붙이는 형태는 단순합니다. 주문 루프에 들어가기 전에 게이트를 하나 두는 것입니다.

# 개장일 게이트 — 주문 로직보다 위에 둔다
import datetime, json, os

CACHE = "holiday_2026.json"   # 하루 한 번만 받아 캐시한다

def open_days() -> set:
    """KIS chk-holiday(CTCA0903R) 응답에서 opnd_yn == 'Y' 인 날짜만 모은다."""
    with open(CACHE, encoding="utf-8") as f:
        rows = json.load(f)["output"]
    return {r["bass_dt"] for r in rows if r["opnd_yn"] == "Y"}

def is_trading_day(d: datetime.date, days: set) -> bool:
    return d.strftime("%Y%m%d") in days

if __name__ == "__main__":
    days = open_days()
    today = datetime.date.today()
    if not is_trading_day(today, days):
        print(f"[skip] {today} 휴장 — 주문 루프로 내려가지 않는다")
        raise SystemExit(0)
    # ... 여기서부터 시세 조회·주문 ...

핵심은 raise SystemExit(0) 입니다. 휴장일에 오류로 죽지 말고 정상 종료해야 감시 도구가 재시작을 반복하지 않습니다. 캐시를 쓰는 이유는 호출 한도 때문입니다 — 매 루프마다 휴장일을 조회하면 정작 시세와 주문이 쓸 한도를 잡아먹습니다. pykrxexchange_calendarsXKRX 캘린더를 쓰는 방법과의 장단 비교는 휴장일 판정 3가지 비교에 있습니다.

체크 ② 야간파생은 23일 저녁부터 없다

국내 파생을 보는 봇이라면 이번 연휴에서 가장 먼저 닫히는 문이 여기입니다. 한국거래소는 9월 23일 오후 6시부터 24일 오전 6시까지 예정돼 있던 파생상품 야간거래를 휴장한다고 공지했습니다. 대상은 코스피200·미니코스피200·코스닥150 선물과 옵션, 코스피200·코스닥150 위클리옵션, 미국달러선물, 3년·10년 국채선물 입니다.

거래소가 밝힌 사유는 장기 연휴를 사이에 두고 거래분이 오래 위험에 노출되는 것을 고려했다는 것입니다. 연휴 중 가격이 급변하면 마진콜·반대거래·유동성 부족 같은 부담이 커지기 때문입니다.

봇에 무슨 일이 생기나. 야간 세션에 H0MFCNT0 같은 실시간 체결 WebSocket 을 구독해 두는 구조라면, 23일 저녁 데이터가 그냥 안 옵니다. “연결은 살아 있는데 메시지가 0” 인 상태를 장애로 오판해 재접속을 무한 반복하는 코드가 흔합니다. 야간 세션 진입 전에도 개장 여부를 판정하고, 무데이터 구간을 장애가 아니라 정상 상태로 분기하십시오. 야간파생 실시간 구조는 KIS 야간선물·옵션 실시간 H0MFCNT0에 정리돼 있습니다.

야간파생 휴장 일정은 연휴마다 거래소가 개별 공지합니다. 정규장 휴장일과 규칙이 다르므로 한국거래소 공식 공지로 매번 확인하십시오.

체크 ③ 미체결 주문은 연휴를 넘지 못한다

국내주식 일반 주문은 당일 유효가 원칙입니다. 9월 23일에 걸어 둔 지정가가 체결되지 않으면 그날 장 마감과 함께 소멸하고, 9월 28일에 저절로 되살아나지 않습니다.

여기서 깨지는 것은 증권사가 아니라 봇이 들고 있는 상태입니다. 봇의 내부 장부에 그 주문이 “미체결” 로 남아 있으면, 재개장 아침에 이미 존재하지 않는 주문번호로 정정·취소를 시도합니다.

확인KIS키움 REST API
미체결 잔량주식일별주문체결조회 — inquire-daily-ccld미체결 조회 ka10075
정정·취소order-rvsecncl정정·취소 kt10002
매수 여력inquire-psbl-order주문가능금액 kt00010

연휴 전 마지막 거래일에 할 일 한 가지. 9월 23일 장 마감 후 실제 계좌를 한 번 읽어 봇의 상태를 덮어쓰십시오. 미체결 잔량·보유 수량·예수금을 계좌 기준으로 맞춰 두면, 재개장 첫 루프가 추측이 아니라 사실에서 시작합니다. 예약주문이나 자동주문을 걸어 두는 기능은 증권사마다 취급이 다르므로 거래하는 증권사 공지를 확인하십시오.

체크 ④ 닷새를 버티는 토큰

연휴 사고 중 가장 조용하게 터지는 것이 토큰입니다. 장이 열리는 동안에는 매일 갱신되니 문제가 드러나지 않다가, 닷새 쉬고 나면 재개장 첫 호출이 인증 오류로 떨어집니다.

연휴 중 무한 재발급 루프. 토큰 발급에는 호출 간격 제한이 있습니다. 갱신에 실패했을 때 즉시 다시 시도하는 코드를 그대로 두면, 아무도 보지 않는 닷새 동안 초당 몇 번씩 인증 요청을 때리다 차단될 수 있습니다. 재시도는 반드시 지수 백오프 + 시도 횟수 상한으로 감싸고, 연속 실패가 누적되면 매매를 멈추고 알림만 보내는 상태로 내려가게 하십시오.

체크 ⑤ 코인과 해외는 그대로 돈다

추석은 한국 주식시장의 휴일이지 시장 전체의 휴일이 아닙니다.

시장추석 연휴 중봇 관점에서 할 일
업비트 · 바이낸스 등 가상자산24시간 정상끄는 선택지 없음. 오히려 사람이 안 보는 닷새라 리스크 한도를 평소보다 좁힐 것
미국 주식현지 일정대로 정상국내 증권사의 주문 접수·환전 운영 시간은 증권사 공지 확인
해외 선물정상 운영으로 보도국내 야간파생과 혼동하지 말 것 — 둘은 다른 시장이다
국내 주식 · 국내 야간파생휴장개장일 게이트로 차단

가상자산 쪽이 오히려 위험한 이유는 감시 밀도가 떨어지기 때문입니다. 평소라면 이상한 체결을 사람이 몇 시간 안에 발견하지만, 연휴에는 닷새가 지나서야 봅니다. 업비트 REST·WebSocket 로 실시간을 보는 구조라면 연결 끊김 재접속과 일일 손실 한도가 실제로 동작하는지 연휴 전에 한 번 확인하십시오.

체크 ⑥ 매도 대금은 9월 29일에 들어온다

국내주식 매도 대금은 체결일로부터 영업일 기준 이틀 뒤에 결제되는 것이 일반적입니다. 세는 단위가 달력일이 아니라 영업일이라, 연휴가 끼면 그만큼 밀립니다.

구분날짜비고
매도 체결09-23 (수)연휴 전 마지막 거래일
영업일 +109-28 (월)24·25일 휴장, 26·27일 주말이라 건너뛴다
영업일 +2 · 결제09-29 (화)달력으로는 6일

봇이 출금 가능 금액이나 D+2 예수금을 기준으로 다음 매수 수량을 계산하고 있다면, 이 구간에서 평소와 다른 값이 보입니다. 잔고 필드를 잘못 고르면 없는 돈으로 주문을 내거나, 있는 돈을 못 쓰고 그냥 쉽니다. 매수 여력 필드 선택은 KIS 매수가능조회에 정리해 두었습니다.

확인 캐치. 결제 주기와 출금 가능 시점, 연휴 중 이체 처리 시각은 증권사·은행별로 다르고 바뀔 수 있습니다. 위 날짜는 영업일 계산의 예시이며, 실제 입금일은 거래하는 증권사의 공식 안내로 확인하십시오.

체크 ⑦ 재개장 첫 30분

닷새 동안 쌓인 뉴스가 9월 28일 월요일 시초가 한 점에 한꺼번에 반영됩니다. 갭이 크면 변동성완화장치(VI) 가 걸리고, VI 구간에서는 주문이 평소처럼 처리되지 않습니다.

연휴 전 체크리스트 (9월 23일에 한 번)

운영 루틴을 처음부터 잡는 단계라면 봇 첫 30일 — 온보딩과 안정화에 평소 점검 항목이 정리돼 있습니다. 증권사별 연결 구조 전반은 한국투자증권 KIS API 자동매매 허브에서 볼 수 있습니다.

고지. 이 글은 기술·운영 자료이며 특정 종목이나 매매 방향을 권유하지 않습니다. 본문의 휴장일·야간파생 휴장 일시는 발행 시점(2026-09-22) 기준의 공지와 보도를 정리한 것이고, 휴장 일정과 대체공휴일 지정은 변경될 수 있으므로 한국거래소 공식 휴장일 안내와 거래 증권사 공지로 반드시 재확인하십시오. 결제일·출금 시점·주문 유효기간은 증권사별로 다릅니다. 알고랩(퀀트웍스)은 투자자문업·투자일임업을 영위하지 않으며, 고객이 지정한 규칙을 프로그램으로 구현해 드리는 도구 제공자입니다.

연휴에도 혼자 알아서 쉬는 봇, 만들어 드립니다

개장일 판정부터 토큰 갱신·리스크 한도·알림까지 사람이 안 봐도 도는 상태로 만들어 드립니다. 24시간 빠른 답변 가능합니다.

상담 문의하기