bbcb935bf3
- scripts/_is_trading_day.py 신규: 한국 공휴일+대체공휴일 판단 (exit 0=거래일, 1=휴장) * holidays.SouthKorea() 기반, 제헌절(7/17) 오탐 제외 처리 - run_morning/midday/evening/bot.ps1: 스크립트 상단에 공휴일 체크 추가 * 휴장일이면 로그 기록 후 즉시 종료 (Claude/봇 미실행) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
47 lines
1.1 KiB
Python
47 lines
1.1 KiB
Python
"""
|
|
한국 주식 시장 거래일 여부 확인
|
|
exit code 0 = 거래일, 1 = 휴장일
|
|
|
|
사용:
|
|
python scripts/_is_trading_day.py
|
|
if ($LASTEXITCODE -ne 0) { exit }
|
|
"""
|
|
import sys
|
|
from datetime import date
|
|
import holidays
|
|
|
|
# 라이브러리가 포함하지만 KRX는 개장하는 날 (2008년 이후 제헌절)
|
|
_KRX_OPEN_OVERRIDES = {
|
|
(7, 17), # 제헌절 — 2008년부터 공휴일 제외, 장 열림
|
|
}
|
|
|
|
def is_trading_day(d: date = None) -> tuple[bool, str]:
|
|
if d is None:
|
|
d = date.today()
|
|
|
|
# 주말
|
|
if d.weekday() >= 5:
|
|
return False, "주말"
|
|
|
|
kr = holidays.SouthKorea(years=d.year)
|
|
|
|
if d in kr:
|
|
name = kr[d]
|
|
# KRX 개장 예외 날짜는 무시
|
|
if (d.month, d.day) in _KRX_OPEN_OVERRIDES:
|
|
return True, f"개장 (라이브러리 오류 무시: {name})"
|
|
return False, name
|
|
|
|
return True, "거래일"
|
|
|
|
|
|
if __name__ == "__main__":
|
|
today = date.today()
|
|
trading, reason = is_trading_day(today)
|
|
if trading:
|
|
print(f"[거래일] {today} — {reason}")
|
|
sys.exit(0)
|
|
else:
|
|
print(f"[휴장일] {today} — {reason}")
|
|
sys.exit(1)
|